<?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>181543</bug_id>
          
          <creation_ts>2018-01-11 10:18:24 -0800</creation_ts>
          <short_desc>Rename MarkedAllocator to BlockDirectory and AllocatorAttributes to CellAttributes</short_desc>
          <delta_ts>2018-01-11 16:35:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181559</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388283</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 10:18:24 -0800</bug_when>
    <thetext>In a world that has thread-local caches, the thing we now call the &quot;MarkedAllocator&quot; doesn&apos;t really have anything to do with allocation anymore.  The allocation will be done by something in the TLC.  When you move the allocation logic out of MarkedAllocator, it becomes just a place to find blocks (a &quot;block directory&quot;).

Once we do that renaming, the term &quot;allocator attributes&quot; becomes weird. Those are really the attributes of the HeapCellType.  So let&apos;s call them CellAttributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388285</commentid>
    <comment_count>1</comment_count>
      <attachid>331067</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 10:19:50 -0800</bug_when>
    <thetext>Created attachment 331067
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388471</commentid>
    <comment_count>2</comment_count>
      <attachid>331119</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 14:27:04 -0800</bug_when>
    <thetext>Created attachment 331119
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388474</commentid>
    <comment_count>3</comment_count>
      <attachid>331119</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-01-11 14:28:44 -0800</bug_when>
    <thetext>Comment on attachment 331119
the patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388475</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 14:29:40 -0800</bug_when>
    <thetext>Attachment 331119 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoSubspace.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:158:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Subspace.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/SubspaceInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:45:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkedSpace.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkedBlockInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/BlockDirectory.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/BlockDirectoryInlines.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 15 in 51 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>1388478</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-11 14:31:16 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #4)
&gt; Attachment 331119 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/heap/IsoSubspace.cpp:30:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:33:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:158:  More than one
&gt; command on the same line  [whitespace/newline] [4]
&gt; ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:30:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/MarkedSpace.cpp:28:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/Subspace.cpp:32:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/SubspaceInlines.h:29:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:45:  The parameter name
&gt; &quot;size&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/heap/MarkedSpace.h:26:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:40:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/MarkedBlock.cpp:34:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/MarkedBlockInlines.h:29:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/BlockDirectory.h:118:  Weird number of
&gt; spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent]
&gt; [3]
&gt; ERROR: Source/JavaScriptCore/heap/Heap.cpp:58:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/BlockDirectoryInlines.h:28:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; Total errors found: 15 in 51 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I think you can fix these.  Just need to reorder the #includes since the filenames have changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388481</commentid>
    <comment_count>6</comment_count>
      <attachid>331121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 14:35:12 -0800</bug_when>
    <thetext>Created attachment 331121
fix style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388482</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 14:37:26 -0800</bug_when>
    <thetext>Attachment 331121 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:158:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 51 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>1388483</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 14:38:19 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #7)
&gt; Attachment 331121 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/heap/BlockDirectory.cpp:158:  More than one
&gt; command on the same line  [whitespace/newline] [4]
&gt; Total errors found: 1 in 51 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I fixed this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388489</commentid>
    <comment_count>9</comment_count>
      <attachid>331122</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 14:54:19 -0800</bug_when>
    <thetext>Created attachment 331122
fix webcore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388493</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 15:05:50 -0800</bug_when>
    <thetext>Attachment 331122 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/heap/BlockDirectoryInlines.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 54 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>1388559</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 16:32:55 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/226822/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388560</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-11 16:35:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/36453802&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331067</attachid>
            <date>2018-01-11 10:19:50 -0800</date>
            <delta_ts>2018-01-11 14:27:04 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>169438</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjY3ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCTBGN0RGMTM4MUUyOTcw
RTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0
QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3REYxNDYxRTJCRUY2QTAwOTU5NTFCIC8q
IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY3REYxNDYxRTJCRUY2QTAwOTU5NTFCIC8qIEJsb2NrRGlyZWN0b3J5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxNDUx
RTJCRUY2ODAwOTU5NTFCIC8qIEJsb2NrRGlyZWN0b3J5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0
RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MzgsNyArNDM4LDcgQEAKIAkJMEY5NDk1ODgx
QzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFj
a1Nsb3QuaCAqLzsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJB
QTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2Vz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzMDM2MUQ0MTkyQzMwMDU2
MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2MzAzQzFENDE5MkNE
MDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzODFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rp
b25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJE
OUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTZFQkIzMTY2NzZFRjYwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRo
SklUVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2MjQsNyArMTYy
NCw3IEBACiAJCUMyOUVDQjAzMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJs
b2NrR2V0dGVyVGVzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyOUVDQjAxMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2Nr
R2V0dGVyVGVzdC5tbSAqLzsgfTsKIAkJQzJBN0Y2ODgxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkI2
RDc1MzE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCNkQ3NTIxOEEzMzc5MzAwNEE5
MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyogTWFya2Vk
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzJCOTE2QzIxNERBMDE0
RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJl
Y3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlDMkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi87IH07CiAJCUMyQ0YzOUMy
MTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAv
KiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2
IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjQ1MCw3ICsyNDUw
LDcgQEAKIAkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUx
QiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAv
KiBCbG9ja0RpcmVjdG9yeUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdGOTg4QTFEOTU5
NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwNCw4ICsyNTA0LDggQEAKIAkJMEY5NTJBQTAxREY3
ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNr
ZWRSZWZlcmVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWNrZWRS
ZWZlcmVuY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTYzMDM1MUQ0MTky
QzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0b3JBdHRy
aWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzMDM1MUQ0MTkyQzMw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDZWxsQXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDZWxsQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjk2MzAzNzFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25N
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlc3RydWN0aW9u
TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzMDM4MUQ0MTkyQzMw
MDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVzdHJ1Y3Rpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NDE5LDggKzQ0MTksOCBAQAogCQlDMjlFQ0IwMjE4MDREMEVEMDBEMkNCQjQgLyog
Q3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QuaDsgcGF0aCA9IEFQ
SS90ZXN0cy9DdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGli
bGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGli
bGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJCNkQ3NTIxOEEzMzc5
MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV3JpdGVCYXJyaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDMkI5MTZDNDE0REEwNDBDMDBDQkFDODYgLyogTWFya2Vk
QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtl
ZEFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjkxNkMxMTRE
QTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCbG9ja0RpcmVjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI5MTZDNDE0REEwNDBDMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tEaXJlY3RvcnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVz
aXJlZFRyYW5zaXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFRyYW5zaXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDMEY3Q0MxN0JCRkM1QjAw
NDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVk
VHJhbnNpdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDRjM5QkYxNkUx
NUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQVBJV3JhcHBlck9iamVjdC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NDYsMTAgKzU1NDYsMTMgQEAKIAkJCQkwRkVDM0M1MTFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBB
MURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKIAkJCQkwRkRDRTExQjFG
QUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8sCi0JCQkJMEY5NjMw
MzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAotCQkJCTBG
OTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
MEYzMENCNUQxRkNFNDZCNDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKIAkJCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKKwkJCQlDMkI5MTZD
NDE0REEwNDBDMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuY3BwICovLAorCQkJCUMyQjkxNkMx
MTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oICovLAorCQkJCTBGN0RGMTQ1MUUy
QkVGNjgwMDk1OTUxQiAvKiBCbG9ja0RpcmVjdG9yeUlubGluZXMuaCAqLywKKwkJCQkwRjk2MzAz
NTFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuY3BwICovLAorCQkJCTBGOTYzMDM2
MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovLAogCQkJCTBGREU4N0Y4MURG
RDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQz
QTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkw
MDZFNzIzMiAvKiBDZWxsQ29udGFpbmVySW5saW5lcy5oICovLApAQCAtNTY0Nyw5ICs1NjUwLDYg
QEAKIAkJCQkwRjIwOEFENjFERjA5MjVBMDA3RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCAq
LywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNw
cCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2Vy
LmggKi8sCi0JCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5j
cHAgKi8sCi0JCQkJQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5o
ICovLAotCQkJCTBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxp
bmVzLmggKi8sCiAJCQkJMTQyRDZGMDYxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNw
cCAqLywKIAkJCQkxNDJENkYwNzEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suaCAqLywK
IAkJCQkwRjdDNUZCNzFEODg4QTAxMDA0NEY1RTIgLyogTWFya2VkQmxvY2tJbmxpbmVzLmggKi8s
CkBAIC04MDg5LDcgKzgwODksNyBAQAogCQkJCTBGRUMzQzUzMUYzM0E0MTYwMEY1OUI2QyAvKiBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE3NjIwQjFEQjk1
OUY5MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRD
RTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRl
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMwQ0I1RTFGQ0U0RTM3MDA0QjUzMjMg
LyogQWxsb2NhdG9yRm9yTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcw
QzAwMDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcwRTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTkwNzMsOCArOTA3Myw4IEBACiAJCQkJQTcwMDg3
M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAotCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAv
KiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkI5MTZDMjE0
REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
N0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBCbG9ja0RpcmVjdG9yeUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3QzVGQjgxRDg4OEEwQzAwNDRGNUUyIC8qIE1hcmtlZEJsb2Nr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVCQTFBIC8q
IE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTU1LDcgKzk1NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vz
c0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxv
Y2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0
eUNvdW50KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSk7CiAKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IG1fYWxsb2NhdG9yOyAvLyBQcmVjb21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIGdl
bmVyYXRlZCBjb2RlLgorICAgIEJsb2NrRGlyZWN0b3J5KiBtX2FsbG9jYXRvcjsgLy8gUHJlY29t
cHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKICAgICB1bnNpZ25lZCBtX2lubGluZUNh
cGFjaXR5OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RB
bGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGluZUNh
cGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5l
Q2FwYWNpdHkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmNl
bGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgZXh0
cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBpZiAo
YWxsb2NhdG9yKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsx
MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7
Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7CisgICAgICAgIGlmIChCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0
ZShzdG9yYWdlR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOwogICAgICAgICAgICAgCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIH0KIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKICAgICBpZiAoYWxsb2NhdG9yUHRyKSB7CiAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
dWludDMyX3QgbWFzayA9IFdURjo6Y29tcHV0ZUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwpA
QCAtNDIwOCw5ICs0MjA4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3Bl
KE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtYXJr
ZWRBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtYXJr
ZWRBbGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1
bHRHUFIsIG1hcmtlZEFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0
LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYmxvY2tE
aXJlY3RvcnkgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihibG9ja0Rp
cmVjdG9yeSksIGFsbG9jYXRvckdQUik7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQ
UiwgYmxvY2tEaXJlY3RvcnksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1PcEdQ
UnM7ICsraSkKQEAgLTgzODMsNyArODM4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9k
ZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTg0MjgsNyArODQyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0
b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52
bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlm
ICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTQ0OCw3ICsxMTQ0OCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmlu
YWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQu
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQAogI2luY2x1ZGUgIkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRl
ICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTWFy
a2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJQ
dXRLaW5kLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKQEAgLTMxMjAsNyArMzEyMCw3IEBAIHB1YmxpYzoKICAgICAvLyBB
bGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2FuIGJlIEdQUiBvciBJbW1Q
dHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1
Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNDZWxsKHJl
c3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOwpAQCAtMzEyOSw3ICszMTI5LDcgQEAgcHVibGljOgogICAgIC8vIEFsbG9jYXRv
ciBmb3IgYW4gb2JqZWN0IG9mIGEgc3BlY2lmaWMgc2l6ZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBl
PiAvLyBTdHJ1Y3R1cmVUeXBlLCBTdG9yYWdlVHlwZSBhbmQsIE1hc2tUeXBlIGNhbiBiZSBHUFIg
b3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoCi0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9y
R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJl
VHlwZSBzdHJ1Y3R1cmUsCiAgICAgICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1h
c2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3QoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5E
RVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXlTdG9yYWdlX3ZlY3Rv
ciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpIFwKLSAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVw
LCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVv
ZihNYXJrZWRBbGxvY2F0b3IqKSkgXAorICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6
ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKICAgICBtYWNybyhEaXJlY3RBcmd1
bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCksIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJs
ZXMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpLCBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgMCwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0
cmluZz4pKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MzQsNyArNTgzNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwo
CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCB2bSgpLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSwgc2xvd1BhdGgpOwpAQCAtOTg2Miw3ICs5ODYyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkg
ewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAgICBCbG9j
a0RpcmVjdG9yeSogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZt
KCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhpbmdIZWFkZXJTaXplID0gMDsKQEAg
LTEwODkzLDcgKzEwODkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogCiAgICAgICAgIHNp
emVfdCBzaXplSW5CeXRlcyA9IHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplSW5CeXRlcywgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0
LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZCht
X291dC5jb25zdEludFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
dGFydE9mU3RvcmFnZSkpOwpAQCAtMTE5MjYsOSArMTE5MjYsOSBAQCBwcml2YXRlOgogCiAgICAg
TFZhbHVlIGFsbG9jYXRlSGVhcENlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFjdHVhbEFsbG9jYXRvciA9
IG51bGxwdHI7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxs
cHRyOwogICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFj
dHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxNYXJrZWRBbGxvY2F0b3IqPihhbGxvY2F0b3It
PmFzSW50UHRyKCkpOworICAgICAgICAgICAgYWN0dWFsQWxsb2NhdG9yID0gYml0d2lzZV9jYXN0
PEJsb2NrRGlyZWN0b3J5Kj4oYWxsb2NhdG9yLT5hc0ludFB0cigpKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghYWN0dWFsQWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgZWl0aGVyIHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qg
a25vdyB3aGF0IHRoZQpAQCAtMTIwNTUsNyArMTIwNTUsNyBAQCBwcml2YXRlOgogICAgIExWYWx1
ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
c3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9j
YXRvciksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAg
ICB9CiAgICAgCkBAIC0xMjA3NSw3ICsxMjA3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBD
b21wbGV0ZVN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxDb21wbGV0ZVN1
YnNwYWNlKj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOwogICAgICAgICAgICAgc2l6ZV90IGFjdHVh
bFNpemUgPSBzaXplLT5hc0ludFB0cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKKyAgICAgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1
YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9j
YXRvcikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKQEAgLTEyMTM1LDcgKzEyMTM1
LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBh
bGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5IGVtaXQgYSBub3JtYWwgQyBjYWxsIHRv
IHRoZSBhbGxvY2F0b3IKICAgICAgICAgLy8gaW5zdGVhZCBvZiBwdXR0aW5nIGl0IG9uIHRoZSBz
bG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCIKIAotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IApAQCAtMzksMTYgKzM5LDE2IEBAIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5BbGln
bmVkTWVtb3J5QWwKIHsKIH0KIAotdm9pZCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdpc3Rl
ckFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3ZvaWQgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6cmVnaXN0ZXJEaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFkaXJlY3RvcnktPm5leHRE
aXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CiAgICAgCi0gICAgaWYgKG1fYWxs
b2NhdG9ycy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9kaXJlY3RvcnlzLmlzRW1wdHkoKSkgewog
ICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fc3Vic3BhY2VzLmZpcnN0KCk7IHN1
YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSkKLSAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9jYXRv
cihhbGxvY2F0b3IpOworICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0RGlyZWN0
b3J5KGRpcmVjdG9yeSk7CiAgICAgfQogICAgIAotICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoc3Rk
OjptZW1fZm4oJk1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciksIGFsbG9jYXRvcik7CisgICAgbV9kaXJlY3RvcnlzLmFwcGVuZChzdGQ6Om1l
bV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNldE5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpLCBkaXJlY3RvcnkpOwogfQogCiB2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJl
Z2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24g
MjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3MgU3Vi
c3BhY2U7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewpAQCAtNDUsMTMgKzQ1LDEz
IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKIAotICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKik7
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgdm9pZCByZWdpc3RlckRpcmVjdG9yeShCbG9ja0Rp
cmVjdG9yeSopOworICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERpcmVjdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlyZWN0b3JpZXMuZmlyc3QoKTsgfQogCiAgICAgdm9pZCByZWdpc3RlclN1YnNw
YWNlKFN1YnNwYWNlKik7CiAKIHByaXZhdGU6Ci0gICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWls
PE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNpbmdseUxpbmtlZExpc3RXaXRo
VGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKICAgICBTaW5nbHlMaW5rZWRMaXN0
V2l0aFRhaWw8U3Vic3BhY2U+IG1fc3Vic3BhY2VzOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJpYnV0
ZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgotCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlvbiwg
IiwgIiwgY2VsbEtpbmQsICJ9Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JB
dHRyaWJ1dGVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJIZWFwQ2VsbC5oIgotI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMgewotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMoKSB7IH0KLSAgICAKLSAg
ICBBbGxvY2F0b3JBdHRyaWJ1dGVzKERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiwgSGVhcENl
bGw6OktpbmQgY2VsbEtpbmQpCi0gICAgICAgIDogZGVzdHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24pCi0g
ICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0gICAgRGVzdHJ1Y3Rpb25Nb2Rl
IGRlc3RydWN0aW9uIHsgRG9lc05vdE5lZWREZXN0cnVjdGlvbiB9OwotICAgIEhlYXBDZWxsOjpL
aW5kIGNlbGxLaW5kIHsgSGVhcENlbGw6OkpTQ2VsbCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9y
eS5jcHAJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlICJB
bGxvY2F0aW5nU2NvcGUuaCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNp
bmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRy
dWU7CisKK01hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIHNpemVf
dCBjZWxsU2l6ZSkKKyAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJlbnRC
bG9jaygwKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKKyAgICAsIG1fY2VsbFNpemUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKKyAgICAsIG1faGVhcChoZWFwKQoreworfQor
Cit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQor
eworICAgIG1fYXR0cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9zdWJz
cGFjZSA9IHN1YnNwYWNlOworfQorCitib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChk
b3VibGUgZGVhZGxpbmUpCit7CisgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sg
PSAwOworICAgIGZvciAoYXV0byogYmxvY2sgOiBtX2Jsb2NrcykgeworICAgICAgICBpZiAoYmxv
Y2spCisgICAgICAgICAgICBob2xkTG9jayhibG9jay0+YmxvY2soKS5sb2NrKCkpOworICAgICAg
ICArK2l0ZXJzU2luY2VMYXN0VGltZUNoZWNrOworICAgICAgICBpZiAoaXRlcnNTaW5jZUxhc3RU
aW1lQ2hlY2sgPj0gSGVhcDo6c190aW1lQ2hlY2tSZXNvbHV0aW9uKSB7CisgICAgICAgICAgICBk
b3VibGUgY3VycmVudFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lID4gZGVhZGxpbmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitNYXJrZWRCbG9jazo6SGFu
ZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCit7CisgICAgbV9l
bXB0eUN1cnNvciA9IG1fZW1wdHkuZmluZEJpdChtX2VtcHR5Q3Vyc29yLCB0cnVlKTsKKyAgICBp
ZiAobV9lbXB0eUN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKK30KKwordm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVudEJs
b2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAg
CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsK
K30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5n
KCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Cisg
ICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgQVNTRVJUKG1fZnJlZUxpc3Qu
YWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgbV9h
bGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZp
bmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKG1fYWxsb2NhdGlv
bkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOworCisgICAgICAgIGlmICh2b2lkKiByZXN1bHQg
PSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl0pKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1w
dHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAgICAgJiYgKHRyYWRlRGVzdHJ1Y3Rv
ckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAgICAgICBpZiAoTWFya2VkQmxv
Y2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkg
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90
RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ug
dGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFs
bG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNh
bWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tQWxsb2NhdG9yKCk7CisgICAg
ICAgICAgICBhZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihi
bG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykK
K3sKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgp
KTsKKyAgICAKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOworICAgIAorICAgIC8vIEl0
J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2lu
ZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAorICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJh
Y3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgorICAgIGlmIChtX2ZyZWVMaXN0
LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlz
dGVkKCkpOworICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7Cisg
ICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFp
c0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFpc0Nh
bkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9j
azsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAg
ICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gbnVsbHB0cjsgfSk7CisgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJy
ZW50QmxvY2ssIHRydWUpOworICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1f
Y3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0aEFs
bG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIHVuc2lnbmVk
IGFsbG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKKyAgICAg
ICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFs
Q29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0
cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdE5v
dyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3Mo
KSkKKyAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKwordm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0Q29sbGVjdGlvbnNJ
Zk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFtYXJrZWRTcGFjZSgpLmlz
SXRlcmF0aW5nKCkpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxs
b2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKCptX2hlYXApOworCisgICAgbV9oZWFwLT5jb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkg
Y29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgYWxsb2Nh
dG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1
bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydz
IGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAor
ICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jaygpOwor
ICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIGFkZEJsb2NrKGJsb2NrKTsKKyAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsKKyAg
ICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6ZV90
IGJsb2NrSGVhZGVyU2l6ZSgpCit7CisgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpOworfQorCitzaXpl
X3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyhzaXplX3QgYnl0ZXMpCit7Cisg
ICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CisgICAgc2l6
ZV90IG1pbkFsbG9jYXRpb25TaXplID0gYmxvY2tIZWFkZXJTaXplKCkgKyBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CisgICAgbWluQWxsb2Nh
dGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6ZSgpLCBtaW5B
bGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWluQWxs
b2NhdGlvblNpemUpOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlQmxvY2soKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBN
YXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHN1YnNwYWNlKCktPmFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIAorICAgIG1hcmtlZFNwYWNlKCkuZGlkQWRkQmxvY2soaGFuZGxlKTsKKyAgICAKKyAgICBy
ZXR1cm4gaGFuZGxlOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgc2l6ZV90IGluZGV4OworICAgIGlmIChtX2Zy
ZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGluZGV4ID0gbV9ibG9ja3Muc2l6
ZSgpOworCisgICAgICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IG1fYmxvY2tzLmNhcGFjaXR5KCk7
CisgICAgICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgICAgIGlmIChtX2Jsb2Nrcy5j
YXBhY2l0eSgpICE9IG9sZENhcGFjaXR5KSB7CisgICAgICAgICAgICBmb3JFYWNoQml0VmVjdG9y
KAorICAgICAgICAgICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKKyAgICAgICAgICAgICAgICBb
Jl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHZlY3RvciwgdmVjdG9yLm51bUJpdHMoKSA9PSBvbGRDYXBhY2l0eSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5j
YXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+
ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGZvckVhY2hC
aXRWZWN0b3IoCisgICAgICAgICAgICAgICAgbG9ja2VyLAorICAgICAgICAgICAgICAgIFsmXSAo
RmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5yZXNp
emUobV9ibG9ja3MuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IG1fZnJlZUJsb2NrSW5kaWNlcy50YWtlTGFz
dCgpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIG1fYmxvY2tz
W2luZGV4XSA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAorICAg
ICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVj
dG9yKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZlY3RvciwgIXZlY3RvcltpbmRleF0p
OworICAgICAgICB9KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBi
bG9jayBsZWFybnMgb2YgaXRzIGNlbGxTaXplKCkgYW5kIGF0dHJpYnV0ZXMoKS4KKyAgICBibG9j
ay0+ZGlkQWRkVG9BbGxvY2F0b3IodGhpcywgaW5kZXgpOworICAgIAorICAgIHNldElzTGl2ZShO
b0xvY2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKKyAgICBzZXRJc0VtcHR5KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgaW5kZXgsIHRydWUpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVt
b3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgQVNTRVJUKGJsb2Nr
LT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2stPmluZGV4
KCldID09IGJsb2NrKTsKKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9j
ay0+aW5kZXgoKSk7CisgICAgCisgICAgbV9ibG9ja3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0
cjsKKyAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5pbmRleCgpKTsKKyAgICAK
KyAgICBmb3JFYWNoQml0VmVjdG9yKAorICAgICAgICBob2xkTG9jayhtX2JpdHZlY3RvckxvY2sp
LAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAgdmVj
dG9yW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAKKyAgICBibG9j
ay0+ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
c3RvcEFsbG9jYXRpbmcoKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQ
b2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7Cisg
ICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykg
eworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0
aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7
CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30KKwor
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICBtX2xh
c3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwor
ICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7Cisg
ICAgbV9lbXB0eUN1cnNvciA9IDA7CisgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKKyAgICAKKyAg
ICBtX2VkZW4uY2xlYXJBbGwoKTsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VJbW1v
cnRhbE9iamVjdHMoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGFnYWlu
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
Mjk2CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxpemUoKQoreworICAgIGZvckVh
Y2hCbG9jaygKKyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykgeworICAg
ICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisgICAgICAgIH0pOworfQor
Cit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYgKCFt
X2xhc3RBY3RpdmVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZlQmxv
Y2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBt
X2xhc3RBY3RpdmVCbG9jazsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpCit7
CisgICAgLy8gTWFyayBiaXRzIGFyZSBzdGlja3kgYW5kIHNvIGlzIG91ciBzdW1tYXJ5IG9mIG1h
cmsgYml0cy4gV2Ugb25seSBjbGVhciB0aGVzZSBkdXJpbmcgZnVsbAorICAgIC8vIGNvbGxlY3Rp
b25zLCBzbyBpZiB5b3Ugc3Vydml2ZWQgdGhlIGxhc3QgY29sbGVjdGlvbiB5b3Ugd2lsbCBzdXJ2
aXZlIHRoZSBuZXh0IG9uZSBzbyBsb25nCisgICAgLy8gYXMgdGhlIG5leHQgb25lIGlzIGVkZW4u
CisgICAgbV9tYXJraW5nTm90RW1wdHkuY2xlYXJBbGwoKTsKKyAgICBtX21hcmtpbmdSZXRpcmVk
LmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjplbmRNYXJraW5nKCkKK3sK
KyAgICBtX2FsbG9jYXRlZC5jbGVhckFsbCgpOworICAgIAorICAgIC8vIEl0J3Mgc3VycHJpc2lu
ZyBhbmQgZnJ1c3RyYXRpbmcgdG8gY29tcHJlaGVuZCwgYnV0IHRoZSBlbmQtb2YtbWFya2luZyBm
bGlwIGRvZXMgbm90IG5lZWQgdG8KKyAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0aW9u
IGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFya2lu
Z1hZWgorICAgIC8vIHZlY3RvcnMuCisgICAgCisgICAgaWYgKCF0cmFkZURlc3RydWN0b3JCbG9j
a3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChtX2VtcHR5LmlzRW1w
dHkoKSk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9IG1fbGl2ZSAmIH5tX21h
cmtpbmdSZXRpcmVkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW1wdHkgPSBtX2xpdmUgJiB+
bV9tYXJraW5nTm90RW1wdHk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9IG1f
bGl2ZSAmIG1fbWFya2luZ05vdEVtcHR5ICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfQorICAg
IAorICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNv
bWUgYmxvY2tzIHRoYXQgd2UgZGlkbid0IGFsbG9jYXRlIG91dCBvZiBpbiB0aGUgbGFzdCBjeWNs
ZSwgYnV0IHdlIHN3ZXB0IHRoZW0uIFRoaXMKKyAgICAgICAgLy8gd2lsbCBmb3JnZXQgdGhhdCB3
ZSBkaWQgdGhhdCBhbmQgd2Ugd2lsbCBlbmQgdXAgc3dlZXBpbmcgdGhlbSBhZ2FpbiBhbmQgYXR0
ZW1wdGluZyB0byBjYWxsIHRoZWlyCisgICAgICAgIC8vIGRlc3RydWN0b3JzIGFnYWluLiBUaGF0
J3MgZmluZSBiZWNhdXNlIG9mIHphcHBpbmcuIFRoZSBvbmx5IHRpbWUgd2hlbiB3ZSBjYW5ub3Qg
Zm9yZ2V0IGlzIHdoZW4KKyAgICAgICAgLy8gd2UganVzdCBhbGxvY2F0ZSBhIGJsb2NrIG9yIHdo
ZW4gd2UgbW92ZSBhIGJsb2NrIGZyb20gb25lIHNpemUgY2xhc3MgdG8gYW5vdGhlci4gVGhhdCBk
b2Vzbid0CisgICAgICAgIC8vIGhhcHBlbiBoZXJlLgorICAgICAgICBtX2Rlc3RydWN0aWJsZSA9
IG1fbGl2ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFMb2co
IkJpdHMgZm9yICIsIG1fY2VsbFNpemUsICIsICIsIG1fYXR0cmlidXRlcywgIiBhZnRlciBlbmRN
YXJraW5nOlxuIik7CisgICAgICAgIGR1bXBCaXRzKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQor
fQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rp
b24oKQoreworICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47Cit9CisKK3ZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit7CisgICAgbV91bnN3ZXB0
ID0gbV9saXZlOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZp
bmRCbG9ja1RvU3dlZXAoKQoreworICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2VwdC5maW5k
Qml0KG1fdW5zd2VwdEN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fdW5zd2VwdEN1cnNvciA+PSBt
X2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Js
b2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAo
KQoreworICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAorICAgICAgICBbJl0gKHNpemVfdCBp
bmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Jsb2Nr
c1tpbmRleF07CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgIH0p
OworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKK3sKKyAgICAobV9lbXB0eSAm
IH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3QgaW5k
ZXgpIHsKKyAgICAgICAgICAgIG1hcmtlZFNwYWNlKCkuZnJlZUJsb2NrKG1fYmxvY2tzW2luZGV4
XSk7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3
ZXB0KCkKK3sKKyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKG1fdW5zd2VwdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBkYXRhTG9nKCJBc3NlcnRpb24gZmFpbGVkOiB1bnN3ZXB0IG5vdCBlbXB0eSBpbiAiLCAqdGhp
cywgIi5cbiIpOworICAgIGR1bXBCaXRzKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRBbGxv
Y2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6
IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6
IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobV9kb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAg
bV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwg
dHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fYWxs
b2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1f
ZG9uZSB7IGZhbHNlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRh
c2soKnRoaXMpKTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2Nl
bGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpk
dW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQoreworICAgIHVuc2lnbmVkIG1heE5hbWVMZW5ndGgg
PSAwOworICAgIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKKyAgICAgICAgTm9Mb2NraW5nTmVj
ZXNzYXJ5LAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImLCBjb25zdCBjaGFyKiBuYW1lKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAg
ICBtYXhOYW1lTGVuZ3RoID0gc3RkOjptYXgobWF4TmFtZUxlbmd0aCwgbGVuZ3RoKTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKAorICAgICAgICBOb0xv
Y2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yLCBjb25z
dCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBuYW1lLCAiOiAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1heE5hbWVMZW5ndGggLSBzdHJsZW4o
bmFtZSk7IGktLTspCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CisgICAgICAgICAg
ICBvdXQucHJpbnQodmVjdG9yLCAiXG4iKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtlZFNwYWNl
JiBNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
dWJzcGFjZS0+c3BhY2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9uIDIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJCbG9ja0RpcmVj
dG9yeS5oIgogCiAjaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiR0NBY3Rp
dml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAj
aW5jbHVkZSAiVk0uaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwogCi1NYXJrZWRB
bGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCitC
bG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXpl
KQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAg
ICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQpAQCAtNTAsMTMgKzUwLDEzIEBAIE1hcmtlZEFsbG9j
YXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGgKIHsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6
OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKIHsKICAgICBtX2F0dHJpYnV0ZXMgPSBz
dWJzcGFjZS0+YXR0cmlidXRlcygpOwogICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKIH0KIAot
Ym9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQorYm9vbCBC
bG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7CiAgICAgdW5zaWdu
ZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwogICAgIGZvciAoYXV0byogYmxvY2sgOiBt
X2Jsb2NrcykgewpAQCAtNzMsNyArNzMsNyBAQCBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdl
ZE91dChkb3VibGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxl
KiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCitNYXJrZWRCbG9jazo6
SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKIHsKICAgICBt
X2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwogICAg
IGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKQEAgLTgxLDcgKzgxLDcgQEAg
TWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaQogICAgIHJldHVybiBtX2Js
b2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1
bWVGcmVlTGlzdCgpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkaWRDb25zdW1lRnJlZUxpc3QoKQog
ewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENv
bnN1bWVGcmVlTGlzdCgpOwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogfQogCi12
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQordm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQogewogICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKQEAgLTEx
OCw3ICsxMTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAg
ICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAgICAgICAgICAvLyBiZWNhdXNl
IHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAgICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRoZSBz
YW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAg
ICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKICAgICAgICAgICAgIGFkZEJs
b2NrKGJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICAg
ICAgfQpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZVdpdGhvdQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit2b2lkKiBCbG9ja0Rp
cmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKIHsKICAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3ZvaWQqIEJsb2NrRGly
ZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewogICAg
IEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCitBTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAg
ICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICByZXR1
cm47CkBAIC0xNzksNyArMTc5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6ZG9UZQogICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQmxvY2tEaXJl
Y3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAKICAgICBtX2hlYXAtPmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKLSAgICAvLyBH
b29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBh
bGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKKyAgICAvLyBHb29meSBjb3Ju
ZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBkaXJlY3Rvcnkg
aGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAvLyBoYXBwZW5zIHdoZW4gcnVubmlu
ZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdDJ3MgZmlu
YWxpemF0aW9uLgogICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCiAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKQEAgLTIyMiw3ICsy
MjIsNyBAQCBzdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCiAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRC
bG9jaykpOwogfQogCi1zaXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyhz
aXplX3QgYnl0ZXMpCitzaXplX3QgQmxvY2tEaXJlY3Rvcnk6OmJsb2NrU2l6ZUZvckJ5dGVzKHNp
emVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNpemUo
KSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVz
KTsKQEAgLTIzMCw3ICsyMzAsNyBAQCBzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVG
b3JCeXRlCiAgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWluQWxsb2NhdGlvblNp
emUpOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlQmxvY2soKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9j
YXRlQmxvY2soKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKICAgICAKQEAgLTI0Myw3ICsyNDMsNyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJr
ZWRBbGxvY2F0b3I6OnRyCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQordm9pZCBCbG9ja0Rp
cmVjdG9yeTo6YWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7CiAgICAgc2l6
ZV90IGluZGV4OwogICAgIGlmIChtX2ZyZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CkBAIC0y
ODEsMTUgKzI4MSwxNSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxv
CiAgICAgICAgIH0pOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGJs
b2NrIGxlYXJucyBvZiBpdHMgY2VsbFNpemUoKSBhbmQgYXR0cmlidXRlcygpLgotICAgIGJsb2Nr
LT5kaWRBZGRUb0FsbG9jYXRvcih0aGlzLCBpbmRleCk7CisgICAgYmxvY2stPmRpZEFkZFRvRGly
ZWN0b3J5KHRoaXMsIGluZGV4KTsKICAgICAKICAgICBzZXRJc0xpdmUoTm9Mb2NraW5nTmVjZXNz
YXJ5LCBpbmRleCwgdHJ1ZSk7CiAgICAgc2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGlu
ZGV4LCB0cnVlKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVtb3ZlQmxvY2so
TWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7Ci0gICAgQVNTRVJUKGJsb2NrLT5hbGxvY2F0
b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoYmxvY2stPmRpcmVjdG9yeSgpID09IHRoaXMpOwog
ICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPT0gYmxvY2spOwogICAgIAogICAg
IHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsKQEAgLTMwMywxMyAr
MzAzLDEzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWQKICAgICAg
ICAgICAgIHZlY3RvcltibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsKICAgICAgICAgfSk7CiAgICAg
Ci0gICAgYmxvY2stPmRpZFJlbW92ZUZyb21BbGxvY2F0b3IoKTsKKyAgICBibG9jay0+ZGlkUmVt
b3ZlRnJvbURpcmVjdG9yeSgpOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmcoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmcoKQogewogICAgIGlm
IChmYWxzZSkKLSAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxv
Y2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0
aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7CiAgICAgQVNTRVJU
KCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewogICAgICAg
ICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CkBAIC0zMjIsNyArMzIy
LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAgICBtX2ZyZWVM
aXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2Nh
dGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7CiAg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZv
ckFsbG9jYXRpCiAgICAgfQogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRv
RmluYWxpemUoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQog
ewogICAgIGZvckVhY2hCbG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykgewpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpsYXN0Q2hh
bmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1
bWVBbGxvY2F0aW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcoKQog
ewogICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsKQEAgLTM1OSw3
ICszNTksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCiAgICAg
bV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6
YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6YmVn
aW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQogewogICAgIC8vIE1hcmsgYml0cyBhcmUgc3Rp
Y2t5IGFuZCBzbyBpcyBvdXIgc3VtbWFyeSBvZiBtYXJrIGJpdHMuIFdlIG9ubHkgY2xlYXIgdGhl
c2UgZHVyaW5nIGZ1bGwKICAgICAvLyBjb2xsZWN0aW9ucywgc28gaWYgeW91IHN1cnZpdmVkIHRo
ZSBsYXN0IGNvbGxlY3Rpb24geW91IHdpbGwgc3Vydml2ZSB0aGUgbmV4dCBvbmUgc28gbG9uZwpA
QCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JG
dWwKICAgICBtX21hcmtpbmdSZXRpcmVkLmNsZWFyQWxsKCk7CiB9CiAKLXZvaWQgTWFya2VkQWxs
b2NhdG9yOjplbmRNYXJraW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OmVuZE1hcmtpbmcoKQog
ewogICAgIG1fYWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgCkBAIC0zOTksMTcgKzM5OSwxNyBA
QCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZW5kTWFya2luZygpCiAgICAgfQogfQogCi12b2lkIE1h
cmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKQordm9pZCBC
bG9ja0RpcmVjdG9yeTo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKQogewogICAg
IG1fdW5zd2VwdCB8PSBtX2VkZW47CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzbmFwc2hv
dFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpzbmFwc2hv
dFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCiB7CiAgICAgbV91bnN3ZXB0ID0gbV9saXZlOwog
fQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRCbG9ja1RvU3dl
ZXAoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja1RvU3dl
ZXAoKQogewogICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2VwdC5maW5kQml0KG1fdW5zd2Vw
dEN1cnNvciwgdHJ1ZSk7CiAgICAgaWYgKG1fdW5zd2VwdEN1cnNvciA+PSBtX2Jsb2Nrcy5zaXpl
KCkpCkBAIC00MTcsNyArNDE3LDcgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2Nh
dG9yOjpmaQogICAgIHJldHVybiBtX2Jsb2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOwogfQogCi12b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c3dlZXAoKQog
ewogICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBpbmRl
eCkgewpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCiAg
ICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKK3ZvaWQgQmxv
Y2tEaXJlY3Rvcnk6OnNocmluaygpCiB7CiAgICAgKG1fZW1wdHkgJiB+bV9kZXN0cnVjdGlibGUp
LmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CkBAIC00MzQsNyAr
NDM0LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNocmluaygpCiAgICAgICAgIH0pOwogfQog
Ci12b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKK3ZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OmFzc2VydE5vVW5zd2VwdCgpCiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZlB0
cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBh
cmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4gQmxvY2tEaXJlY3Rvcnk6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSgpCiB7CiAgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpI
YW5kbGUqKCk+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3IpCi0gICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAg
VGFzayhCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KQorICAgICAgICAgICAgOiBtX2RpcmVjdG9y
eShkaXJlY3RvcnkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ2MSwxNiAr
NDYxLDE2IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICAg
ICAgICAgIGlmIChtX2RvbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBtX2lu
ZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0cnVl
KTsKLSAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUo
KSkgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fZGlyZWN0b3J5Lm1fbWFya2luZ05vdEVtcHR5
LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2Rp
cmVjdG9yeS5tX2Jsb2Nrcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVl
OwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgICAg
ICByZXR1cm4gbV9kaXJlY3RvcnkubV9ibG9ja3NbbV9pbmRleCsrXTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2NhdG9y
OworICAgICAgICBCbG9ja0RpcmVjdG9yeSYgbV9kaXJlY3Rvcnk7CiAgICAgICAgIHNpemVfdCBt
X2luZGV4IHsgMCB9OwogICAgICAgICBMb2NrIG1fbG9jazsKICAgICAgICAgYm9vbCBtX2RvbmUg
eyBmYWxzZSB9OwpAQCAtNDc5LDEyICs0NzksMTIgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOwog
fQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
dm9pZCBCbG9ja0RpcmVjdG9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRy
aWJ1dGVzKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXBCaXRzKFByaW50U3RyZWFt
JiBvdXQpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQog
ewogICAgIHVuc2lnbmVkIG1heE5hbWVMZW5ndGggPSAwOwogICAgIGZvckVhY2hCaXRWZWN0b3JX
aXRoTmFtZSgKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJp
dHMoUHJpbnRTdHJlCiAgICAgICAgIH0pOwogfQogCi1NYXJrZWRTcGFjZSYgTWFya2VkQWxsb2Nh
dG9yOjptYXJrZWRTcGFjZSgpIGNvbnN0CitNYXJrZWRTcGFjZSYgQmxvY2tEaXJlY3Rvcnk6Om1h
cmtlZFNwYWNlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdWJzcGFjZS0+c3BhY2UoKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2
aXNpb24gMjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1
dGVzLmgiCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsK
K2NsYXNzIElzb0NlbGxTZXQ7CitjbGFzcyBNYXJrZWRTcGFjZTsKK2NsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKKworI2RlZmluZSBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChtYWNy
bykgXAorICAgIG1hY3JvKGxpdmUsIExpdmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0
aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9cCisgICAgbWFjcm8oZW1wdHksIEVtcHR5KSAvKiBU
aGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5vIGxpdmUgb2JqZWN0cy4gKi8gXAorICAg
IG1hY3JvKGFsbG9jYXRlZCwgQWxsb2NhdGVkKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhh
dCBhcmUgZnVsbCBvZiBsaXZlIG9iamVjdHMuICovXAorICAgIG1hY3JvKGNhbkFsbG9jYXRlQnV0
Tm90RW1wdHksIENhbkFsbG9jYXRlQnV0Tm90RW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2Nr
cyBhcmUgbmVpdGhlciBlbXB0eSBub3IgcmV0aXJlZCAoaS5lLiBhcmUgbW9yZSB0aGFuIG1pbk1h
cmtlZEJsb2NrVXRpbGl6YXRpb24gZnVsbCkuICovIFwKKyAgICBtYWNybyhkZXN0cnVjdGlibGUs
IERlc3RydWN0aWJsZSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgbWF5IGhhdmUgZGVz
dHJ1Y3RvcnMgdG8gcnVuLiAqL1wKKyAgICBtYWNybyhlZGVuLCBFZGVuKSAvKiBUaGUgc2V0IG9m
IGFsbCBibG9ja3MgdGhhdCBoYXZlIG5ldyBvYmplY3RzIHNpbmNlIHRoZSBsYXN0IEdDLiAqL1wK
KyAgICBtYWNybyh1bnN3ZXB0LCBVbnN3ZXB0KSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhh
dCBjb3VsZCBiZSBzd2VwdCBieSB0aGUgaW5jcmVtZW50YWwgc3dlZXBlci4gKi9cCisgICAgXAor
ICAgIC8qIFRoZXNlIGFyZSBjb21wdXRlZCBkdXJpbmcgbWFya2luZy4gKi9cCisgICAgbWFjcm8o
bWFya2luZ05vdEVtcHR5LCBNYXJraW5nTm90RW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2Nr
cyB0aGF0IGFyZSBub3QgZW1wdHkuICovIFwKKyAgICBtYWNybyhtYXJraW5nUmV0aXJlZCwgTWFy
a2luZ1JldGlyZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSByZXRpcmVkLiAq
LworCisvLyBGSVhNRTogV2UgZGVmaW5lZCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFuZCBlbXB0
eSB0byBiZSBleGNsdXNpdmU6CisvLworLy8gICAgIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgJiBl
bXB0eSA9PSAwCisvLworLy8gSW5zdGVhZCBvZiBjYWxsaW5nIGl0IGNhbkFsbG9jYXRlIGFuZCBt
YWtpbmcgaXQgaW5jbHVzaXZlOgorLy8KKy8vICAgICBjYW5BbGxvY2F0ZSAmIGVtcHR5ID09IGVt
cHR5CisvLworLy8gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBiZXR0ZXIuIEknbGwgbGVhdmUgaXQg
dG8gYSBmdXR1cmUgYnVnIHRvIGZpeCB0aGF0LCBzaW5jZSBicmVhdGhpbmcgb24KKy8vIHRoaXMg
Y29kZSBsZWFkcyB0byByZWdyZXNzaW9ucyBmb3IgZGF5cywgYW5kIGl0J3Mgbm90IGNsZWFyIHRo
YXQgbWFraW5nIHRoaXMgY2hhbmdlIHdvdWxkCisvLyBpbXByb3ZlIHBlcmYgc2luY2UgaXQgd291
bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZpb3IsIGFuZCBlaXRoZXIgd2F5IHRo
ZSBhbGxvY2F0b3IKKy8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0dmVjdG9ycy4KKy8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKKworY2xhc3MgTWFya2Vk
QWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsK
KworICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lk
IHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgp
OworICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0
aW5nKCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgdm9pZCBiZWdpbk1hcmtp
bmdGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIHZvaWQgZW5kTWFya2luZygpOworICAgIHZvaWQg
c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsKKyAgICB2b2lkIHNuYXBzaG90VW5z
d2VwdEZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgdm9pZCBzd2VlcCgpOworICAgIHZvaWQgc2hy
aW5rKCk7CisgICAgdm9pZCBhc3NlcnROb1Vuc3dlcHQoKTsKKyAgICBzaXplX3QgY2VsbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NlbGxTaXplOyB9CisgICAgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CisgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CisgICAgSGVh
cENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtp
bmQ7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSk7CisgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQorCisgICAg
Ym9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlC
bG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgIAor
ICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAgIHZvaWQgcmVtb3Zl
QmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJs
ZSBkZWFkbGluZSk7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBibG9ja1NpemVGb3JCeXRlcyhz
aXplX3QpOworICAgIAorICAgIExvY2smIGJpdHZlY3RvckxvY2soKSB7IHJldHVybiBtX2JpdHZl
Y3RvckxvY2s7IH0KKyAgIAorI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMo
bG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgICAgIFwKKyAgICBib29sIGlzICMjIGNhcGl0
YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtXyAjIyBsb3dlckJpdE5hbWVbaW5kZXhdOyB9IFwKKyAgICBib29sIGlzICMjIGNhcGl0
YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrKSBjb25zdCB7IHJldHVybiBpcyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIsIGJs
b2NrLT5pbmRleCgpKTsgfSBcCisgICAgdm9pZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCwgYm9vbCB2YWx1ZSkgeyBtXyAjIyBsb3dl
ckJpdE5hbWVbaW5kZXhdID0gdmFsdWU7IH0gXAorICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJp
dE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2ssIGJvb2wgdmFsdWUpIHsgc2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUobG9ja2VyLCBibG9j
ay0+aW5kZXgoKSwgdmFsdWUpOyB9CisgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQo
TUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTKQorI3VuZGVmIE1BUktFRF9BTExPQ0FUT1Jf
QklUX0FDQ0VTU09SUworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZv
ckVhY2hCaXRWZWN0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBjb25zdCBGdW5jJiBmdW5jKQor
ICAgIHsKKyNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1l
LCBjYXBpdGFsQml0TmFtZSkgXAorICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSk7Cisg
ICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklU
X0NBTExCQUNLKTsKKyN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaEJpdFZl
Y3RvcldpdGhOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuYyYgZnVuYykKKyAg
ICB7CisjZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKGxvd2VyQml0TmFtZSwg
Y2FwaXRhbEJpdE5hbWUpIFwKKyAgICAgICAgZnVuYyhtXyAjIyBsb3dlckJpdE5hbWUsICNjYXBp
dGFsQml0TmFtZSk7CisgICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktF
RF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKTsKKyN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9D
QUxMQkFDSworICAgIH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3Iq
IG5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9y
SW5TdWJzcGFjZTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsgfQorICAgIAorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0K
KyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KKyAgICB2
b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
ID0gYWxsb2NhdG9yOyB9CisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5
QmxvY2tUb1N0ZWFsKCk7CisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2Nr
VG9Td2VlcCgpOworICAgIAorICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Vic3BhY2U7IH0KKyAgICBNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKKyAg
ICAKKyAgICBjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVM
aXN0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOworICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2Vk
QmxvY2s7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2Fz
ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7
CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdp
dGhvdXRDb2xsZWN0aW5nKCk7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVC
bG9jaygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwor
ICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7
CisgICAgCisgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICAKKyAgICBWZWN0b3I8TWFya2Vk
QmxvY2s6OkhhbmRsZSo+IG1fYmxvY2tzOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mcmVlQmxv
Y2tJbmRpY2VzOworCisgICAgLy8gTXV0YXRvciB1c2VzIHRoaXMgdG8gZ3VhcmQgcmVzaXppbmcg
dGhlIGJpdHZlY3RvcnMuIFRob3NlIHRoaW5ncyBpbiB0aGUgR0MgdGhhdCBtYXkgcnVuCisgICAg
Ly8gY29uY3VycmVudGx5IHRvIHRoZSBtdXRhdG9yIG11c3QgbG9jayB0aGlzIHdoZW4gYWNjZXNz
aW5nIHRoZSBiaXR2ZWN0b3JzLgorICAgIExvY2sgbV9iaXR2ZWN0b3JMb2NrOworI2RlZmluZSBN
QVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTihsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXRO
YW1lKSBcCisgICAgRmFzdEJpdFZlY3RvciBtXyAjIyBsb3dlckJpdE5hbWU7CisgICAgRk9SX0VB
Q0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04p
CisjdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04KKyAgICAKKyAgICAvLyBB
ZnRlciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1
cnNvcnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0
dmVjdG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9h
bGxvY2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBp
cyBhIGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7
IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9y
IGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KKyAgICBzaXpl
X3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhh
dCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCisgICAgCisgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7CisgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogbV9sYXN0QWN0aXZlQmxvY2s7CisKKyAgICBMb2NrIG1fbG9jazsKKyAgICB1bnNpZ25lZCBt
X2NlbGxTaXplOworICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIC8v
IEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAorICAgIEhl
YXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51bGxw
dHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIgfTsK
KyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxscHRy
IH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IgeyBudWxscHRyIH07Cit9OworCitpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
YXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90IE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2VsbFNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJl
Y3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0jaW5jbHVkZSAiQWxsb2NhdG9y
QXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRnJl
ZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFj
ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotI2RlZmluZSBGT1JfRUFDSF9NQVJL
RURfQUxMT0NBVE9SX0JJVChtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RP
UllfQklUKG1hY3JvKSBcCiAgICAgbWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9j
ayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wKICAgICBtYWNybyhlbXB0eSwg
RW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbm8gbGl2ZSBvYmplY3Rz
LiAqLyBcCiAgICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0ZWQpIC8qIFRoZSBzZXQgb2YgYWxs
IGJsb2NrcyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0cy4gKi9cCkBAIC02NSwxMiArNjUs
MTIgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogLy8KIC8vIFRoZSBsYXR0ZXIgaXMg
cHJvYmFibHkgYmV0dGVyLiBJJ2xsIGxlYXZlIGl0IHRvIGEgZnV0dXJlIGJ1ZyB0byBmaXggdGhh
dCwgc2luY2UgYnJlYXRoaW5nIG9uCiAvLyB0aGlzIGNvZGUgbGVhZHMgdG8gcmVncmVzc2lvbnMg
Zm9yIGRheXMsIGFuZCBpdCdzIG5vdCBjbGVhciB0aGF0IG1ha2luZyB0aGlzIGNoYW5nZSB3b3Vs
ZAotLy8gaW1wcm92ZSBwZXJmIHNpbmNlIGl0IHdvdWxkIG5vdCBjaGFuZ2UgdGhlIGNvbGxlY3Rv
cidzIGJlaGF2aW9yLCBhbmQgZWl0aGVyIHdheSB0aGUgYWxsb2NhdG9yCisvLyBpbXByb3ZlIHBl
cmYgc2luY2UgaXQgd291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZpb3IsIGFu
ZCBlaXRoZXIgd2F5IHRoZSBkaXJlY3RvcnkKIC8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0dmVj
dG9ycy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEK
IAotY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJr
ZWRBbGxvY2F0b3IpOworY2xhc3MgQmxvY2tEaXJlY3RvcnkgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJsb2NrRGlyZWN0b3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNzksNyArNzks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAKLSAgICBNYXJrZWRBbGxv
Y2F0b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgQmxvY2tEaXJlY3RvcnkoSGVhcCos
IHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFjZSopOwogICAg
IHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0
aW9uKCk7CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNocmluaygpOwogICAg
IHZvaWQgYXNzZXJ0Tm9VbnN3ZXB0KCk7CiAgICAgc2l6ZV90IGNlbGxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9jZWxsU2l6ZTsgfQotICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBDZWxsQXR0
cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAg
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAg
SGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2Vs
bEtpbmQ7IH0KQEAgLTExNiwzOSArMTE2LDM5IEBAIHB1YmxpYzoKICAgICAKICAgICBMb2NrJiBi
aXR2ZWN0b3JMb2NrKCkgeyByZXR1cm4gbV9iaXR2ZWN0b3JMb2NrOyB9CiAgICAKLSNkZWZpbmUg
TUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5h
bWUpICAgICBcCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQUNDRVNTT1JTKGxvd2VyQml0
TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCiAgICAgYm9vbCBpcyAjIyBjYXBpdGFsQml0TmFt
ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV8g
IyMgbG93ZXJCaXROYW1lW2luZGV4XTsgfSBcCiAgICAgYm9vbCBpcyAjIyBjYXBpdGFsQml0TmFt
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykgY29uc3QgeyByZXR1cm4gaXMgIyMgY2FwaXRhbEJpdE5hbWUobG9ja2VyLCBibG9jay0+aW5k
ZXgoKSk7IH0gXAogICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBzaXplX3QgaW5kZXgsIGJvb2wgdmFsdWUpIHsgbV8gIyMgbG93ZXJCaXROYW1l
W2luZGV4XSA9IHZhbHVlOyB9IFwKICAgICB2b2lkIHNldElzICMjIGNhcGl0YWxCaXROYW1lKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrLCBi
b29sIHZhbHVlKSB7IHNldElzICMjIGNhcGl0YWxCaXROYW1lKGxvY2tlciwgYmxvY2stPmluZGV4
KCksIHZhbHVlKTsgfQotICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9B
TExPQ0FUT1JfQklUX0FDQ0VTU09SUykKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NF
U1NPUlMKKyAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9SWV9C
SVRfQUNDRVNTT1JTKQorI3VuZGVmIEJMT0NLX0RJUkVDVE9SWV9CSVRfQUNDRVNTT1JTCiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEJpdFZlY3Rvcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotI2RlZmluZSBNQVJL
RURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBc
CisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBp
dGFsQml0TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSk7Ci0gICAgICAg
IEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExC
QUNLKTsKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSworICAgICAgICBGT1Jf
RUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0spOwor
I3VuZGVmIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sKICAgICB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZShj
b25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotI2RlZmluZSBN
QVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1l
KSBcCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBj
YXBpdGFsQml0TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSwgI2NhcGl0
YWxCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VE
X0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NB
TExCQUNLCisgICAgICAgIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQoQkxPQ0tfRElSRUNU
T1JZX0JJVF9DQUxMQkFDSyk7CisjdW5kZWYgQkxPQ0tfRElSRUNUT1JZX0JJVF9DQUxMQkFDSwog
ICAgIH0KICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3IoKSBjb25zdCB7
IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxv
Y2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFj
ZTsgfQotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjsgfQotICAgIAotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KLSAgICB2b2lk
IHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7
IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KLSAgICB2b2lkIHNldE5l
eHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxsb2Nh
dG9yOyB9CisgICAgQmxvY2tEaXJlY3RvcnkqIG5leHREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVy
biBtX25leHREaXJlY3Rvcnk7IH0KKyAgICBCbG9ja0RpcmVjdG9yeSogbmV4dERpcmVjdG9yeUlu
U3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlOyB9Cisg
ICAgQmxvY2tEaXJlY3RvcnkqIG5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7
IH0KKyAgICAKKyAgICB2b2lkIHNldE5leHREaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVj
dG9yeSkgeyBtX25leHREaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0KKyAgICB2b2lkIHNldE5leHRE
aXJlY3RvcnlJblN1YnNwYWNlKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9uZXh0RGly
ZWN0b3J5SW5TdWJzcGFjZSA9IGRpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0TmV4dERpcmVjdG9y
eUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1f
bmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGRpcmVjdG9yeTsgfQogICAg
IAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAg
IApAQCAtMTgyLDEwICsxODIsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBNdXRhdG9yIHVzZXMgdGhp
cyB0byBndWFyZCByZXNpemluZyB0aGUgYml0dmVjdG9ycy4gVGhvc2UgdGhpbmdzIGluIHRoZSBH
QyB0aGF0IG1heSBydW4KICAgICAvLyBjb25jdXJyZW50bHkgdG8gdGhlIG11dGF0b3IgbXVzdCBs
b2NrIHRoaXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMuCiAgICAgTG9jayBtX2JpdHZl
Y3RvckxvY2s7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xBUkFUSU9OKGxvd2Vy
Qml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyNkZWZpbmUgQkxPQ0tfRElSRUNUT1JZX0JJVF9E
RUNMQVJBVElPTihsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCiAgICAgRmFzdEJpdFZl
Y3RvciBtXyAjIyBsb3dlckJpdE5hbWU7Ci0gICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9C
SVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04pCi0jdW5kZWYgTUFSS0VEX0FMTE9D
QVRPUl9CSVRfREVDTEFSQVRJT04KKyAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJM
T0NLX0RJUkVDVE9SWV9CSVRfREVDTEFSQVRJT04pCisjdW5kZWYgQkxPQ0tfRElSRUNUT1JZX0JJ
VF9ERUNMQVJBVElPTgogICAgIAogICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBi
bG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4g
dGhlCiAgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Ig
d2hlcmUgaXQgd2FzLgpAQCAtMTk4LDI0ICsxOTgsMjQgQEAgcHJpdmF0ZToKIAogICAgIExvY2sg
bV9sb2NrOwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRl
cyBtX2F0dHJpYnV0ZXM7CisgICAgQ2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIC8v
IEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogICAgIEhl
YXAqIG1faGVhcCB7IG51bGxwdHIgfTsKICAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51bGxw
dHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIgfTsK
LSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxscHRy
IH07Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9y
eSB7IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5TdWJz
cGFjZSB7IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAotaW5saW5lIHB0cmRpZmZf
dCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoraW5saW5lIHB0cmRpZmZfdCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpCiB7Ci0gICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1fZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgcHRyZGlm
Zl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCitpbmxpbmUgcHRyZGlmZl90
IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkKIHsKLSAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7CisgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tE
aXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOjIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKKyNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNv
bnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlu
cyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1
cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Cisg
ICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9saXZlLmZvckVhY2hTZXRCaXQoCisgICAg
ICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBmdW5jdG9yKG1fYmxvY2tzW2lu
ZGV4XSk7CisgICAgICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5s
aW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIG1fbWFya2luZ05vdEVtcHR5LmZvckVhY2hTZXRCaXQoCisg
ICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBmdW5jdG9yKG1fYmxvY2tz
W2luZGV4XSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2Nr
RGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNyArMjYsMTcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFy
a2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJW
TS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK2lubGluZSBib29sIEJs
b2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
Pih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSBmYWlsdXJlTW9kZSkKK0FMV0FZU19JTkxJTkUgdm9pZCogQmxvY2tEaXJlY3Rvcnk6
OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0
ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CkBAIC00NSw3ICs0NSw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAgICAgICAgfSk7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZv
ckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZd
IChzaXplX3QgaW5kZXgpIHsKQEAgLTUzLDcgKzUzLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+IGlubGluZSB2b2lkIAogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaE5vdEVtcHR5Qmxv
Y2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKIHsKICAgICBtX21hcmtpbmdOb3RFbXB0eS5mb3JFYWNoU2V0Qml0KAog
ICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gMjI2NzgzKQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcDoyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yQXR0
cmlidXRlcy5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCit2b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQs
ICJ9Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsMTMgKzI0LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5oIgogCiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEFs
bG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgQ2Vs
bEF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQoInsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDIyNjc4
MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5o
OjIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVz
dHJ1Y3Rpb25Nb2RlLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1
dGVzIHsKKyAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKCkgeyB9CisgICAgCisgICAgQWxsb2NhdG9y
QXR0cmlidXRlcyhEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKQorICAgICAgICA6IGRlc3RydWN0aW9uKGRlc3RydWN0aW9uKQorICAgICAgICAsIGNl
bGxLaW5kKGNlbGxLaW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
biB7IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gfTsKKyAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2lu
ZCB7IEhlYXBDZWxsOjpKU0NlbGwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKCkg
eyB9CitzdHJ1Y3QgQ2VsbEF0dHJpYnV0ZXMgeworICAgIENlbGxBdHRyaWJ1dGVzKCkgeyB9CiAg
ICAgCi0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyhEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKQorICAgIENlbGxBdHRyaWJ1dGVzKERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQpCiAgICAgICAgIDogZGVz
dHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24pCiAgICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFj
ZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiU3Vic3BhY2UuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJldmVudENv
bGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgpAQCAtNDYsNyAr
NDYsNyBAQCBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLU1h
cmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCitCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CkBAIC01OSwx
NCArNTksMTQgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IAogdm9p
ZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7CiAgICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cykpCiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBhbGxv
Y2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFy
a2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9
IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKQEAgLTc4LDIxICs3
OCwyMSBAQCBNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jCiAgICAgLy8g
anVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdlJ3JlIGlu
IHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAogICAgIC8vIGFsbG9jYXRvciBhcyAi
cGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQgbGVhZCB0
byBwZXJmb3JtYW5jZQogICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBoZXJlIGlz
IHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywgdG8KLSAg
ICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8vIHByZXZlbnQgc2lt
dWx0YW5lb3VzbHkgQmxvY2tEaXJlY3RvcnkgY3JlYXRpb25zIGZyb20gbXVsdGlwbGUgdGhyZWFk
cy4gVGhpcyBjb2RlIGVuc3VyZXMKICAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9jYXRvciIg
dHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlh
bGl6ZWQKICAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKKyAgICBpZiAoQmxv
Y2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQog
ICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwogCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRh
TG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUsICIsICIsIG1fYXR0
cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KLSAgICAgICAgc3RkOjptYWtlX3VuaXF1
ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3MpOwotICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdldCgpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCbG9ja0RpcmVjdG9yeT4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAgICAgc3Rk
OjptYWtlX3VuaXF1ZTxCbG9ja0RpcmVjdG9yeT4obV9zcGFjZS5oZWFwKCksIHNpemVDbGFzcyk7
CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHVuaXF1ZUFsbG9jYXRvci5nZXQoKTsK
ICAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKFdURk1vdmUodW5pcXVlQWxsb2NhdG9yKSk7CiAgICAg
YWxsb2NhdG9yLT5zZXRTdWJzcGFjZSh0aGlzKTsKLSAgICBtX3NwYWNlLmFkZE1hcmtlZEFsbG9j
YXRvcihsb2NrZXIsIGFsbG9jYXRvcik7CisgICAgbV9zcGFjZS5hZGRCbG9ja0RpcmVjdG9yeShs
b2NrZXIsIGFsbG9jYXRvcik7CiAgICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9J
bmRleChzaXplQ2xhc3MpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKE1hcmtlZFNwYWNl
OjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KAogewogICAg
IHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CiAgICAgCi0gICAgaWYg
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCisgICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2Nh
dG9yKSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXpl
IDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzcsMzEgKzM3LDMxIEBAIHB1YmxpYzoKICAgICAvLyBJbiBzb21lIGNvZGUgcGF0aHMs
IHdlIG5lZWQgaXQgdG8gYmUgYSBjb21waWxlIGVycm9yIHRvIGNhbGwgdGhlIHZpcnR1YWwgdmVy
c2lvbiBvZiBvbmUgb2YKICAgICAvLyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyB3aHkgd2UgZG8g
ZmluYWwgbWV0aG9kcyB0aGUgb2xkIHNjaG9vbCB3YXkuCiAgICAgCi0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxs
b2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKICAgICAKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KSBvdmVycmlkZTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAg
ICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXApOyB9CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6
ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorICAgIEJsb2Nr
RGlyZWN0b3J5KiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFswXTsgfQogCiBwcml2YXRlOgotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yRm9yU2xvdyhzaXplX3QpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JTbG93
KHNpemVfdCk7CiAgICAgCiAgICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdp
dGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KICAgICB2b2lkKiBh
bGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRl
eHQqKTsKICAgICAKLSAgICBzdGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNl
OjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4+IG1fYWxsb2NhdG9yczsKKyAgICBzdGQ6OmFy
cmF5PEJsb2NrRGlyZWN0b3J5KiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9j
YXRvckZvclNpemVTdGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tEaXJlY3Rv
cnk+PiBtX2FsbG9jYXRvcnM7CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciog
Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZSBtb2RlKQorQUxXQVlTX0lOTElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9m
ZikgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBCbG9j
a0RpcmVjdG9yeSogcmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6
c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAg
ICBjYXNlIEFsbG9jYXRvckZvck1vZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDExICsyOCwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7Ci1j
bGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIAogY2xhc3MgR0NE
ZWZlcnJhbENvbnRleHQgewogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwotICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRBbGxvY2F0b3I7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogcHVi
bGljOgogICAgIGlubGluZSBHQ0RlZmVycmFsQ29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5H
Q0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUg
Ik1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9y
SW5saW5lcy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0Lmgi
CiAjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgpAQCAtMjIwMCw3ICsyMjAwLDcg
QEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICBzaXplX3QgY3VycmVu
dEhlYXBTaXplID0gMDsKIAogICAgIC8vIEZvciBtYXJrZWQgc3BhY2UsIHdlIHVzZSB0aGUgdG90
YWwgbnVtYmVyIG9mIGJ5dGVzIHZpc2l0ZWQuIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgZm9yCi0g
ICAgLy8gTWFya2VkQWxsb2NhdG9yJ3MgY2FsbHMgdG8gZGlkQWxsb2NhdGUoKSwgd2hpY2ggZWZm
ZWN0aXZlbHkgYWNjb3VudHMgZm9yIHRoZSB0b3RhbCBzaXplIG9mCisgICAgLy8gQmxvY2tEaXJl
Y3RvcnkncyBjYWxscyB0byBkaWRBbGxvY2F0ZSgpLCB3aGljaCBlZmZlY3RpdmVseSBhY2NvdW50
cyBmb3IgdGhlIHRvdGFsIHNpemUgb2YKICAgICAvLyBvYmplY3RzIGFsbG9jYXRlZCByYXRoZXIg
dGhhbiBibG9ja3MgdXNlZC4gVGhpcyB3aWxsIHVuZGVyZXN0aW1hdGUgY2FwYWNpdHkoKSwgYW5k
IGluIGNhc2UKICAgICAvLyBvZiBmcmFnbWVudGF0aW9uLCB0aGlzIG1heSBiZSBzdWJzdGFudGlh
bC4gRm9ydHVuYXRlbHksIG1hcmtlZCBzcGFjZSByYXJlbHkgZnJhZ21lbnRzIGJlY2F1c2UKICAg
ICAvLyBjZWxscyB1c3VhbGx5IGhhdmUgYSBuYXJyb3cgcmFuZ2Ugb2Ygc2l6ZXMuIFNvLCB0aGUg
dW5kZXJlc3RpbWF0aW9uIGlzIHByb2JhYmx5IE9LLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3MgTWFya1N0YWNrQXJyYXk7
CiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKLWNsYXNzIE1hcmtlZEFsbG9jYXRv
cjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CiBj
bGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwpAQCAt
MzkwLDcgKzM5MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxv
Y2F0b3I7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgUnVubmluZ1Njb3BlOwogICAgIGZyaWVu
ZCBjbGFzcyBTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENl
bGwuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cENlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBMYXJnZUFsbG9j
YXRpb247CiBjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFN1YnNwYWNlOwogY2xhc3MgVk07Ci1z
dHJ1Y3QgQWxsb2NhdG9yQXR0cmlidXRlczsKK3N0cnVjdCBDZWxsQXR0cmlidXRlczsKIAogY2xh
c3MgSGVhcENlbGwgewogcHVibGljOgpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgVk0q
IHZtKCkgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgY29uc3Q7Ci0gICAgQWxs
b2NhdG9yQXR0cmlidXRlcyBhbGxvY2F0b3JBdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgQ2VsbEF0
dHJpYnV0ZXMgY2VsbEF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlKCkgY29uc3Q7CiAgICAgS2luZCBjZWxsS2luZCgpIGNvbnN0OwogICAgIFN1
YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcENlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIEFMV0FZU19JTkxJTkUgc2l6ZV90IEhlYXBDZWxsOjpjZWxsU2l6ZSgKICAgICBy
ZXR1cm4gbWFya2VkQmxvY2soKS5jZWxsU2l6ZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEFsbG9j
YXRvckF0dHJpYnV0ZXMgSGVhcENlbGw6OmFsbG9jYXRvckF0dHJpYnV0ZXMoKSBjb25zdAorQUxX
QVlTX0lOTElORSBDZWxsQXR0cmlidXRlcyBIZWFwQ2VsbDo6Y2VsbEF0dHJpYnV0ZXMoKSBjb25z
dAogewogICAgIGlmIChpc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbGFyZ2VB
bGxvY2F0aW9uKCkuYXR0cmlidXRlcygpOwpAQCAtODIsMTIgKzgyLDEyIEBAIEFMV0FZU19JTkxJ
TkUgQWxsb2NhdG9yQXR0cmlidXRlcyBIZWFwQ2UKIAogQUxXQVlTX0lOTElORSBEZXN0cnVjdGlv
bk1vZGUgSGVhcENlbGw6OmRlc3RydWN0aW9uTW9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFs
bG9jYXRvckF0dHJpYnV0ZXMoKS5kZXN0cnVjdGlvbjsKKyAgICByZXR1cm4gY2VsbEF0dHJpYnV0
ZXMoKS5kZXN0cnVjdGlvbjsKIH0KIAogQUxXQVlTX0lOTElORSBIZWFwQ2VsbDo6S2luZCBIZWFw
Q2VsbDo6Y2VsbEtpbmQoKSBjb25zdAogewotICAgIHJldHVybiBhbGxvY2F0b3JBdHRyaWJ1dGVz
KCkuY2VsbEtpbmQ7CisgICAgcmV0dXJuIGNlbGxBdHRyaWJ1dGVzKCkuY2VsbEtpbmQ7CiB9CiAK
IEFMV0FZU19JTkxJTkUgU3Vic3BhY2UqIEhlYXBDZWxsOjpzdWJzcGFjZSgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IERlZmF1bHREZXN0cm95RnVu
YyB7CiAgICAgfQogfTsKIAotSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQorSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJp
YnV0ZXMgYXR0cmlidXRlcykKICAgICA6IG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogewogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgY2xhc3MgSGVhcENlbGxUeXBlIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwQ2VsbFR5cGUpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShB
bGxvY2F0b3JBdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUo
Q2VsbEF0dHJpYnV0ZXMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkhlYXBDZWxs
VHlwZSgpOwogCi0gICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAKICAgICAvLyBUaGUg
cHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9y
IHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKICAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRl
c3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UuCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwogCiBwcml2YXRlOgotICAgIEFsbG9jYXRvckF0dHJp
YnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKLWNsYXNzIE1h
cmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OwogCiBjbGFzcyBJbmNyZW1lbnRh
bFN3ZWVwZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgpAQCAtNDgsNyArNDgs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9Td2VlcChNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSk7
CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVyKCk7CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBt
X2N1cnJlbnRBbGxvY2F0b3I7CisgICAgQmxvY2tEaXJlY3RvcnkqIG1fY3VycmVudEFsbG9jYXRv
cjsKICAgICBib29sIG1fc2hvdWxkRnJlZUZhc3RNYWxsb2NNZW1vcnlBZnRlclN3ZWVwaW5nIHsg
ZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxT
ZXQuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKIAotI2luY2x1ZGUgIk1hcmtlZEFs
bG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Miw3
ICs3Miw3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSXNvQ2VsbFNldCYgbV9zZXQ7Ci0gICAgICAgIE1h
cmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5JiBtX2Fs
bG9jYXRvcjsKICAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CiAgICAgICAgIExvY2sgbV9s
b2NrOwogICAgICAgICBib29sIG1fZG9uZSB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFp
bnMoSGVhcENlbAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgSXNvQ2VsbFNldDo6Zm9y
RWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IG1fc3Vic3BhY2UubV9hbGxvY2F0b3I7CisgICAgQmxvY2tEaXJlY3Rvcnkm
IGFsbG9jYXRvciA9IG1fc3Vic3BhY2UubV9hbGxvY2F0b3I7CiAgICAgKGFsbG9jYXRvci5tX21h
cmtpbmdOb3RFbXB0eSAmIG1fYmxvY2tzV2l0aEJpdHMpLmZvckVhY2hTZXRCaXQoCiAgICAgICAg
IFsmXSAoc2l6ZV90IGJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrID0gYWxsb2NhdG9yLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwpAQCAtMTE3LDcgKzEx
Nyw3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IEkKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiB2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBG
dW5jJiBmdW5jKQogewotICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9zdWJzcGFj
ZS5tX2FsbG9jYXRvcjsKKyAgICBCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yID0gbV9zdWJzcGFj
ZS5tX2FsbG9jYXRvcjsKICAgICBtX2Jsb2Nrc1dpdGhCaXRzLmZvckVhY2hTZXRCaXQoCiAgICAg
ICAgIFsmXSAoc2l6ZV90IGJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gYWxsb2NhdG9yLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI2Nzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKIAogI2lu
Y2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC00MSw3ICs0MSw3IEBAIElzb1N1YnNwYWNlOjpJc29TdWJzcGFj
ZShDU3RyaW5nIG5hbWUsIEgKIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5h
bGxvY2F0b3JMb2NrKCkpOwogICAgIG1fYWxsb2NhdG9yLnNldFN1YnNwYWNlKHRoaXMpOwotICAg
IG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKKyAgICBt
X3NwYWNlLmFkZEJsb2NrRGlyZWN0b3J5KGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKICAgICBtX2Fs
aWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyQWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7CiAg
ICAgbV9maXJzdEFsbG9jYXRvciA9ICZtX2FsbG9jYXRvcjsKIH0KQEAgLTUwLDcgKzUwLDcgQEAg
SXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSgpCiB7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogSXNv
U3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2Rl
KQorQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUs
IEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplLCBtb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkJsb2Nr
RGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKICNpbmNsdWRlIDx3dGYvU2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAKQEAgLTQxLDggKzQxLDggQEAgcHVibGljOgogCiAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBB
bGxvY2F0b3JGb3JNb2RlKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpOwogCiAgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgb3ZlcnJpZGU7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwpAQCAtNTUsMTIgKzU1LDEyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9j
azo6SGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgCiAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisgICAgQmxvY2tEaXJlY3RvcnkgbV9hbGxvY2F0b3I7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwg
QmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCi1pbmxp
bmUgTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKK2lubGluZSBCbG9ja0RpcmVjdG9yeSogSXNv
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOwogICAg
IHJldHVybiAmbV9hbGxvY2F0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
YXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsx
MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhYm92ZUxvd2VyQm91bmQocmF3UHRyKSAm
JiBiZWxvd1VwcGVyQm91bmQocmF3UHRyKTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgQWxsb2Nh
dG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsg
fQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzOyB9CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVy
c2lvbikgeyByZXR1cm4gRGVwZW5kZW5jeSgpOyB9CiAgICAgCkBAIC0xNTIsNyArMTUyLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faXNOZXdseUFsbG9jYXRlZDsKICAgICBib29sIG1faGFzVmFs
aWRDZWxsOwogICAgIEF0b21pYzxib29sPiBtX2lzTWFya2VkOwotICAgIEFsbG9jYXRvckF0dHJp
YnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAg
ICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKICAgICBXZWFrU2V0IG1fd2Vha1NldDsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKLQotI2luY2x1ZGUgIkFsbG9jYXRpbmdTY29w
ZS5oIgotI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkhlYXAuaCIK
LSNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJs
b2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlZNLmgi
Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0
aWMgY29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKLQotTWFya2Vk
QWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQot
ICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAsIG1fY3VycmVudEJsb2NrKDApCi0gICAg
LCBtX2xhc3RBY3RpdmVCbG9jaygwKQotICAgICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2VsbFNpemUpKQotICAgICwgbV9oZWFwKGhlYXApCi17Ci19Ci0KLXZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3BhY2UpCi17Ci0gICAgbV9hdHRy
aWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKTsKLSAgICBtX3N1YnNwYWNlID0gc3Vic3Bh
Y2U7Ci19Ci0KLWJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGlu
ZSkKLXsKLSAgICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7Ci0gICAgZm9y
IChhdXRvKiBibG9jayA6IG1fYmxvY2tzKSB7Ci0gICAgICAgIGlmIChibG9jaykKLSAgICAgICAg
ICAgIGhvbGRMb2NrKGJsb2NrLT5ibG9jaygpLmxvY2soKSk7Ci0gICAgICAgICsraXRlcnNTaW5j
ZUxhc3RUaW1lQ2hlY2s7Ci0gICAgICAgIGlmIChpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA+PSBI
ZWFwOjpzX3RpbWVDaGVja1Jlc29sdXRpb24pIHsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50
VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudFRpbWUgPiBkZWFkbGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFs
bG9jYXRvcjo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKLXsKLSAgICBtX2VtcHR5Q3Vyc29yID0g
bV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2VtcHR5Q3Vy
c29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIG1fYmxvY2tzW21fZW1wdHlDdXJzb3JdOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0KCkKLXsKLSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVM
aXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQotewotICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBBU1NF
UlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2ls
bEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICBtX2FsbG9jYXRpb25DdXJz
b3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9j
YXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1f
YmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0
SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9u
Q3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRl
SW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21P
dGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJhZGVEZXN0cnVjdG9yQmxvY2tzIHx8ICFu
ZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fc3Vi
c3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
SXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxs
IGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJl
bW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RF
bXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICAg
ICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21BbGxvY2F0b3IoKTsKLSAgICAgICAgICAgIGFkZEJs
b2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAg
IHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spOwotICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VS
VChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAg
IGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0
byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJl
dGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZv
cmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldp
bGxGYWlsKCkpIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAg
ICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJU
KCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAgICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXRO
b3RFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAg
IHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhl
YXBDZWxsKiB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9
KTsKLSAgICBzZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1
ZSk7Ci0gICAgbWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2sp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCkKLXsKLSAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdD
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNv
dW50ID0gMDsKLSAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVh
cC0+aXNEZWZlcnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAg
ICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlv
bkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBh
bGxvY2F0aW9uQ291bnQgPSAwOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVy
cmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7
Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAg
ICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUg
aGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTog
dGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3Vy
cmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQg
dGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9u
LgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCi0gICAgICAgIHJldHVybiBhbGxv
Y2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VM
WShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9j
aykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpB
c3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2so
YmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJT
aXplKCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2Nr
OjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7Ci19Ci0KLXNpemVfdCBNYXJrZWRBbGxv
Y2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRlcykKLXsKLSAgICBzaXplX3QgbWlu
QmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKLSAgICBzaXplX3QgbWluQWxsb2Nh
dGlvblNpemUgPSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxN
YXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKLSAgICBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFsbG9jYXRpb25TaXpl
KTsKLSAgICByZXR1cm4gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7
Ci19Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVC
bG9jaygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwotICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IE1hcmtlZEJsb2NrOjp0
cnlDcmVhdGUoKm1faGVhcCwgc3Vic3BhY2UoKS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsK
LSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgbWFy
a2VkU3BhY2UoKS5kaWRBZGRCbG9jayhoYW5kbGUpOwotICAgIAotICAgIHJldHVybiBoYW5kbGU7
Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKLXsKLSAgICBzaXplX3QgaW5kZXg7Ci0gICAgaWYgKG1fZnJlZUJsb2NrSW5kaWNl
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7Ci0KLSAgICAg
ICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gbV9ibG9ja3MuY2FwYWNpdHkoKTsKLSAgICAgICAgbV9i
bG9ja3MuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkgIT0g
b2xkQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgICAg
ICAgICAgTm9Mb2NraW5nTmVjZXNzYXJ5LAotICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZl
Y3RvciYgdmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodmVjdG9y
LCB2ZWN0b3IubnVtQml0cygpID09IG9sZENhcGFjaXR5KTsKLSAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2tzLmNhcGFjaXR5KCkgPiBv
bGRDYXBhY2l0eSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fYml0dmVjdG9yTG9jayk7Ci0gICAgICAgICAgICBzdWJzcGFjZSgpLT5kaWRSZXNpemVCaXRz
KG1fYmxvY2tzLmNhcGFjaXR5KCkpOwotICAgICAgICAgICAgZm9yRWFjaEJpdFZlY3RvcigKLSAg
ICAgICAgICAgICAgICBsb2NrZXIsCi0gICAgICAgICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9y
JiB2ZWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnJlc2l6ZShtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGluZGV4ID0gbV9mcmVlQmxvY2tJbmRpY2VzLnRha2VMYXN0KCk7Ci0gICAgICAg
IEFTU0VSVCghbV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgbV9ibG9ja3NbaW5kZXhdID0gYmxv
Y2s7Ci0gICAgfQotICAgIAotICAgIGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgIE5vTG9ja2lu
Z05lY2Vzc2FyeSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQodmVjdG9yLCAhdmVjdG9yW2luZGV4XSk7Ci0gICAgICAgIH0p
OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGJsb2NrIGxlYXJucyBv
ZiBpdHMgY2VsbFNpemUoKSBhbmQgYXR0cmlidXRlcygpLgotICAgIGJsb2NrLT5kaWRBZGRUb0Fs
bG9jYXRvcih0aGlzLCBpbmRleCk7Ci0gICAgCi0gICAgc2V0SXNMaXZlKE5vTG9ja2luZ05lY2Vz
c2FyeSwgaW5kZXgsIHRydWUpOwotICAgIHNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBp
bmRleCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2stPmFsbG9jYXRvcigp
ID09IHRoaXMpOwotICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPT0gYmxvY2sp
OwotICAgIAotICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsK
LSAgICAKLSAgICBtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPSBudWxscHRyOwotICAgIG1fZnJl
ZUJsb2NrSW5kaWNlcy5hcHBlbmQoYmxvY2stPmluZGV4KCkpOwotICAgIAotICAgIGZvckVhY2hC
aXRWZWN0b3IoCi0gICAgICAgIGhvbGRMb2NrKG1fYml0dmVjdG9yTG9jayksCi0gICAgICAgIFsm
XSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7Ci0gICAgICAgICAgICB2ZWN0b3JbYmxvY2stPmlu
ZGV4KCldID0gZmFsc2U7Ci0gICAgICAgIH0pOwotICAgIAotICAgIGJsb2NrLT5kaWRSZW1vdmVG
cm9tQWxsb2NhdG9yKCk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGlu
ZygpCi17Ci0gICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyks
ICI6IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1f
bGFzdEFjdGl2ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFT
U0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlz
dCk7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJl
bnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotfQotCi12b2lkIE1hcmtlZEFs
bG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQotewotICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlz
dC5jbGVhcigpOwotCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKLSAgICBtX2VtcHR5Q3Vy
c29yID0gMDsKLSAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwotICAgIAotICAgIG1fZWRlbi5jbGVh
ckFsbCgpOwotCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUltbW9ydGFsT2JqZWN0cygp
KSkgewotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgYWdhaW4uCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIyOTYKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya2VkQWxs
b2NhdG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCi17Ci0gICAgZm9yRWFjaEJsb2NrKAotICAg
ICAgICBbJl0gKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKSB7Ci0gICAgICAgICAgICBibG9j
ay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKLXsKLSAgICBpZiAoIW1fbGFzdEFjdGl2ZUJs
b2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxs
b2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJs
b2NrOwotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKLX0KLQotdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICAvLyBNYXJr
IGJpdHMgYXJlIHN0aWNreSBhbmQgc28gaXMgb3VyIHN1bW1hcnkgb2YgbWFyayBiaXRzLiBXZSBv
bmx5IGNsZWFyIHRoZXNlIGR1cmluZyBmdWxsCi0gICAgLy8gY29sbGVjdGlvbnMsIHNvIGlmIHlv
dSBzdXJ2aXZlZCB0aGUgbGFzdCBjb2xsZWN0aW9uIHlvdSB3aWxsIHN1cnZpdmUgdGhlIG5leHQg
b25lIHNvIGxvbmcKLSAgICAvLyBhcyB0aGUgbmV4dCBvbmUgaXMgZWRlbi4KLSAgICBtX21hcmtp
bmdOb3RFbXB0eS5jbGVhckFsbCgpOwotICAgIG1fbWFya2luZ1JldGlyZWQuY2xlYXJBbGwoKTsK
LX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmVuZE1hcmtpbmcoKQotewotICAgIG1fYWxsb2Nh
dGVkLmNsZWFyQWxsKCk7Ci0gICAgCi0gICAgLy8gSXQncyBzdXJwcmlzaW5nIGFuZCBmcnVzdHJh
dGluZyB0byBjb21wcmVoZW5kLCBidXQgdGhlIGVuZC1vZi1tYXJraW5nIGZsaXAgZG9lcyBub3Qg
bmVlZCB0bwotICAgIC8vIGtub3cgd2hhdCBraW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQg
a25vd2xlZGdlIGlzIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgbV9tYXJraW5nWFlaCi0gICAgLy8g
dmVjdG9ycy4KLSAgICAKLSAgICBpZiAoIXRyYWRlRGVzdHJ1Y3RvckJsb2NrcyAmJiBuZWVkc0Rl
c3RydWN0aW9uKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKLSAgICAg
ICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9lbXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtpbmdOb3RF
bXB0eTsKLSAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgbV9tYXJr
aW5nTm90RW1wdHkgJiB+bV9tYXJraW5nUmV0aXJlZDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5l
ZWRzRGVzdHJ1Y3Rpb24oKSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBibG9ja3MgdGhh
dCB3ZSBkaWRuJ3QgYWxsb2NhdGUgb3V0IG9mIGluIHRoZSBsYXN0IGN5Y2xlLCBidXQgd2Ugc3dl
cHQgdGhlbS4gVGhpcwotICAgICAgICAvLyB3aWxsIGZvcmdldCB0aGF0IHdlIGRpZCB0aGF0IGFu
ZCB3ZSB3aWxsIGVuZCB1cCBzd2VlcGluZyB0aGVtIGFnYWluIGFuZCBhdHRlbXB0aW5nIHRvIGNh
bGwgdGhlaXIKLSAgICAgICAgLy8gZGVzdHJ1Y3RvcnMgYWdhaW4uIFRoYXQncyBmaW5lIGJlY2F1
c2Ugb2YgemFwcGluZy4gVGhlIG9ubHkgdGltZSB3aGVuIHdlIGNhbm5vdCBmb3JnZXQgaXMgd2hl
bgotICAgICAgICAvLyB3ZSBqdXN0IGFsbG9jYXRlIGEgYmxvY2sgb3Igd2hlbiB3ZSBtb3ZlIGEg
YmxvY2sgZnJvbSBvbmUgc2l6ZSBjbGFzcyB0byBhbm90aGVyLiBUaGF0IGRvZXNuJ3QKLSAgICAg
ICAgLy8gaGFwcGVuIGhlcmUuCi0gICAgICAgIG1fZGVzdHJ1Y3RpYmxlID0gbV9saXZlOwotICAg
IH0KLSAgICAKLSAgICBpZiAoZmFsc2UpIHsKLSAgICAgICAgZGF0YUxvZygiQml0cyBmb3IgIiwg
bV9jZWxsU2l6ZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiIGFmdGVyIGVuZE1hcmtpbmc6XG4iKTsK
LSAgICAgICAgZHVtcEJpdHMoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpCi17Ci0gICAg
bV91bnN3ZXB0IHw9IG1fZWRlbjsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90
VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICBtX3Vuc3dlcHQgPSBtX2xpdmU7Ci19
Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6ZmluZEJsb2NrVG9Td2Vl
cCgpCi17Ci0gICAgbV91bnN3ZXB0Q3Vyc29yID0gbV91bnN3ZXB0LmZpbmRCaXQobV91bnN3ZXB0
Q3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV91bnN3ZXB0Q3Vyc29yID49IG1fYmxvY2tzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fdW5zd2Vw
dEN1cnNvcl07Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCi17Ci0gICAgbV91
bnN3ZXB0LmZvckVhY2hTZXRCaXQoCi0gICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAg
ICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XTsKLSAg
ICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQg
TWFya2VkQWxsb2NhdG9yOjpzaHJpbmsoKQotewotICAgIChtX2VtcHR5ICYgfm1fZGVzdHJ1Y3Rp
YmxlKS5mb3JFYWNoU2V0Qml0KAotICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewotICAgICAg
ICAgICAgbWFya2VkU3BhY2UoKS5mcmVlQmxvY2sobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAg
fSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQotewotICAg
IGlmIChBU1NFUlRfRElTQUJMRUQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV91
bnN3ZXB0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGRhdGFMb2coIkFz
c2VydGlvbiBmYWlsZWQ6IHVuc3dlcHQgbm90IGVtcHR5IGluICIsICp0aGlzLCAiLlxuIik7Ci0g
ICAgZHVtcEJpdHMoKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotUmVmUHRyPFNo
YXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxs
ZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKLXsKLSAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFz
ayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAgICAgIDogbV9hbGxvY2F0b3Io
YWxsb2NhdG9yKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2RvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gbV9h
bGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0cnVlKTsKLSAgICAg
ICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKSkgewotICAg
ICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9j
a3NbbV9pbmRleCsrXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwotICAgICAgICBzaXplX3QgbV9pbmRleCB7
IDAgfTsKLSAgICAgICAgTG9jayBtX2xvY2s7Ci0gICAgICAgIGJvb2wgbV9kb25lIHsgZmFsc2Ug
fTsKLSAgICB9OwotICAgIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOwot
fQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwg
bV9hdHRyaWJ1dGVzKTsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXBCaXRzKFByaW50
U3RyZWFtJiBvdXQpCi17Ci0gICAgdW5zaWduZWQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAgZm9y
RWFjaEJpdFZlY3RvcldpdGhOYW1lKAotICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCi0gICAg
ICAgIFsmXSAoRmFzdEJpdFZlY3RvciYsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgICAgIG1heE5hbWVMZW5n
dGggPSBzdGQ6Om1heChtYXhOYW1lTGVuZ3RoLCBsZW5ndGgpOwotICAgICAgICB9KTsKLSAgICAK
LSAgICBmb3JFYWNoQml0VmVjdG9yV2l0aE5hbWUoCi0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2Fy
eSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IsIGNvbnN0IGNoYXIqIG5hbWUp
IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG5hbWUsICI6ICIpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbWF4TmFtZUxlbmd0aCAtIHN0cmxlbihuYW1lKTsgaS0tOykK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiKTsKLSAgICAgICAgICAgIG91dC5wcmludCh2
ZWN0b3IsICJcbiIpOwotICAgICAgICB9KTsKLX0KLQotTWFya2VkU3BhY2UmIE1hcmtlZEFsbG9j
YXRvcjo6bWFya2VkU3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFj
ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAg
LTEsMjIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oIgotI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJGcmVlTGlz
dC5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
LSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
R0NEZWZlcnJhbENvbnRleHQ7Ci1jbGFzcyBIZWFwOwotY2xhc3MgSXNvQ2VsbFNldDsKLWNsYXNz
IE1hcmtlZFNwYWNlOwotY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0jZGVmaW5lIEZP
Ul9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKG1hY3JvKSBcCi0gICAgbWFjcm8obGl2ZSwgTGl2
ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAq
L1wKLSAgICBtYWNybyhlbXB0eSwgRW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0
IGhhdmUgbm8gbGl2ZSBvYmplY3RzLiAqLyBcCi0gICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0
ZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0
cy4gKi9cCi0gICAgbWFjcm8oY2FuQWxsb2NhdGVCdXROb3RFbXB0eSwgQ2FuQWxsb2NhdGVCdXRO
b3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIGFyZSBuZWl0aGVyIGVtcHR5IG5vciBy
ZXRpcmVkIChpLmUuIGFyZSBtb3JlIHRoYW4gbWluTWFya2VkQmxvY2tVdGlsaXphdGlvbiBmdWxs
KS4gKi8gXAotICAgIG1hY3JvKGRlc3RydWN0aWJsZSwgRGVzdHJ1Y3RpYmxlKSAvKiBUaGUgc2V0
IG9mIGFsbCBibG9ja3MgdGhhdCBtYXkgaGF2ZSBkZXN0cnVjdG9ycyB0byBydW4uICovXAotICAg
IG1hY3JvKGVkZW4sIEVkZW4pIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbmV3
IG9iamVjdHMgc2luY2UgdGhlIGxhc3QgR0MuICovXAotICAgIG1hY3JvKHVuc3dlcHQsIFVuc3dl
cHQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGNvdWxkIGJlIHN3ZXB0IGJ5IHRoZSBp
bmNyZW1lbnRhbCBzd2VlcGVyLiAqL1wKLSAgICBcCi0gICAgLyogVGhlc2UgYXJlIGNvbXB1dGVk
IGR1cmluZyBtYXJraW5nLiAqL1wKLSAgICBtYWNybyhtYXJraW5nTm90RW1wdHksIE1hcmtpbmdO
b3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgYXJlIG5vdCBlbXB0eS4gKi8g
XAotICAgIG1hY3JvKG1hcmtpbmdSZXRpcmVkLCBNYXJraW5nUmV0aXJlZCkgLyogVGhlIHNldCBv
ZiBhbGwgYmxvY2tzIHRoYXQgYXJlIHJldGlyZWQuICovCi0KLS8vIEZJWE1FOiBXZSBkZWZpbmVk
IGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYW5kIGVtcHR5IHRvIGJlIGV4Y2x1c2l2ZToKLS8vCi0v
LyAgICAgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSAmIGVtcHR5ID09IDAKLS8vCi0vLyBJbnN0ZWFk
IG9mIGNhbGxpbmcgaXQgY2FuQWxsb2NhdGUgYW5kIG1ha2luZyBpdCBpbmNsdXNpdmU6Ci0vLwot
Ly8gICAgIGNhbkFsbG9jYXRlICYgZW1wdHkgPT0gZW1wdHkKLS8vCi0vLyBUaGUgbGF0dGVyIGlz
IHByb2JhYmx5IGJldHRlci4gSSdsbCBsZWF2ZSBpdCB0byBhIGZ1dHVyZSBidWcgdG8gZml4IHRo
YXQsIHNpbmNlIGJyZWF0aGluZyBvbgotLy8gdGhpcyBjb2RlIGxlYWRzIHRvIHJlZ3Jlc3Npb25z
IGZvciBkYXlzLCBhbmQgaXQncyBub3QgY2xlYXIgdGhhdCBtYWtpbmcgdGhpcyBjaGFuZ2Ugd291
bGQKLS8vIGltcHJvdmUgcGVyZiBzaW5jZSBpdCB3b3VsZCBub3QgY2hhbmdlIHRoZSBjb2xsZWN0
b3IncyBiZWhhdmlvciwgYW5kIGVpdGhlciB3YXkgdGhlIGFsbG9jYXRvcgotLy8gaGFzIHRvIGxv
b2sgYXQgYm90aCBiaXR2ZWN0b3JzLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjEyMQotCi1jbGFzcyBNYXJrZWRBbGxvY2F0b3IgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE1hcmtlZEFsbG9jYXRvcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotcHVi
bGljOgotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCi0gICAgTWFya2VkQWxsb2NhdG9yKEhl
YXAqLCBzaXplX3QgY2VsbFNpemUpOwotICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsK
LSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yQWxs
b2NhdGlvbigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKLSAgICB2b2lkIHJlc3VtZUFs
bG9jYXRpbmcoKTsKLSAgICB2b2lkIGJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7Ci0g
ICAgdm9pZCBlbmRNYXJraW5nKCk7Ci0gICAgdm9pZCBzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29s
bGVjdGlvbigpOwotICAgIHZvaWQgc25hcHNob3RVbnN3ZXB0Rm9yRnVsbENvbGxlY3Rpb24oKTsK
LSAgICB2b2lkIHN3ZWVwKCk7Ci0gICAgdm9pZCBzaHJpbmsoKTsKLSAgICB2b2lkIGFzc2VydE5v
VW5zd2VwdCgpOwotICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNp
emU7IH0KLSAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0gICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247
IH0KLSAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KLSAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRl
KEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLSAgICBIZWFwKiBo
ZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9Ci0KLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29u
c3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKLSAg
ICAKLSAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxs
ZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7Ci0gICAgCi0gICAgdm9pZCBhZGRCbG9jayhNYXJrZWRC
bG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxl
Kik7Ci0KLSAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAKLSAgICBz
dGF0aWMgc2l6ZV90IGJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCk7Ci0gICAgCi0gICAgTG9jayYg
Yml0dmVjdG9yTG9jaygpIHsgcmV0dXJuIG1fYml0dmVjdG9yTG9jazsgfQotICAgCi0jZGVmaW5l
IE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXRO
YW1lKSAgICAgXAotICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fICMjIGxvd2VyQml0TmFtZVtp
bmRleF07IH0gXAotICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spIGNvbnN0IHsgcmV0dXJu
IGlzICMjIGNhcGl0YWxCaXROYW1lKGxvY2tlciwgYmxvY2stPmluZGV4KCkpOyB9IFwKLSAgICB2
b2lkIHNldElzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90
IGluZGV4LCBib29sIHZhbHVlKSB7IG1fICMjIGxvd2VyQml0TmFtZVtpbmRleF0gPSB2YWx1ZTsg
fSBcCi0gICAgdm9pZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgYm9vbCB2YWx1ZSkgeyBzZXRJ
cyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIsIGJsb2NrLT5pbmRleCgpLCB2YWx1ZSk7IH0KLSAg
ICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NF
U1NPUlMpCi0jdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTCi0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFjaEJpdFZlY3Rvcihjb25zdCBBYnN0
cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCi0gICAgewotI2RlZmluZSBNQVJLRURfQUxM
T0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCi0gICAg
ICAgIGZ1bmMobV8gIyMgbG93ZXJCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FM
TE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktF
RF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCi0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoQml0VmVjdG9yV2l0aE5hbWUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBjb25zdCBGdW5jJiBmdW5jKQotICAgIHsKLSNkZWZpbmUgTUFSS0VEX0FMTE9D
QVRPUl9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgXAotICAgICAg
ICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSwgI2NhcGl0YWxCaXROYW1lKTsKLSAgICAgICAgRk9S
X0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sp
OwotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCi0gICAgfQotICAgIAotICAg
IE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFs
bG9jYXRvcjsgfQotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9Ci0gICAgTWFya2Vk
QWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9Ci0gICAg
Ci0gICAgdm9pZCBzZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7
IG1fbmV4dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9y
SW5TdWJzcGFjZSA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KLSAgICAKLSAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKLSAgICAKLSAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tUb1N3ZWVwKCk7Ci0gICAgCi0gICAgU3Vi
c3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQotICAgIE1hcmtl
ZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBm
cmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KLSAgICAKLSAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9
IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBJc29D
ZWxsU2V0OwotICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKLSAgICAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVl
TGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCogdHJ5QWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxsb2NhdGVJbihNYXJr
ZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rp
b25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICAKLSAgICBGcmVlTGlzdCBtX2Zy
ZWVMaXN0OwotICAgIAotICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7
Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGljZXM7Ci0KLSAgICAvLyBNdXRh
dG9yIHVzZXMgdGhpcyB0byBndWFyZCByZXNpemluZyB0aGUgYml0dmVjdG9ycy4gVGhvc2UgdGhp
bmdzIGluIHRoZSBHQyB0aGF0IG1heSBydW4KLSAgICAvLyBjb25jdXJyZW50bHkgdG8gdGhlIG11
dGF0b3IgbXVzdCBsb2NrIHRoaXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMuCi0gICAg
TG9jayBtX2JpdHZlY3RvckxvY2s7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xB
UkFUSU9OKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKLSAgICBGYXN0Qml0VmVjdG9y
IG1fICMjIGxvd2VyQml0TmFtZTsKLSAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChN
QVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTikKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9S
X0JJVF9ERUNMQVJBVElPTgotICAgIAotICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8g
YSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQg
aW4gdGhlCi0gICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJz
b3Igd2hlcmUgaXQgd2FzLgotICAgIHNpemVfdCBtX2FsbG9jYXRpb25DdXJzb3IgeyAwIH07IC8v
IFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBhbGxvY2F0
aW9uLgotICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5l
eHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkgYWxsb2NhdGlvbiAoYWxsb2Nh
dGluZyBpbiBlbXB0eSBibG9ja3MpLgotICAgIHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07
IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNy
ZW1lbnRhbCBzd2VlcGluZy4KLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJl
bnRCbG9jazsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jazsKLQot
ICAgIExvY2sgbV9sb2NrOwotICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAgQWxsb2NhdG9y
QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0gICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91
bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCogbV9oZWFwIHsgbnVsbHB0ciB9Owot
ICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRv
ciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9u
ZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKLX07
Ci0KLWlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkK
LXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9mcmVlTGlz
dCk7Ci19Ci0KLWlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxT
aXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9j
ZWxsU2l6ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24g
MjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCShub25leGlzdGVudCkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZy
ZWVMaXN0SW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgotI2luY2x1ZGUg
IlZNLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0g
KCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCkt
PnZtKCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2Nh
dGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLXsKLSAgICBtX2xpdmUu
Zm9yRWFjaFNldEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAg
IGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hOb3RF
bXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi17Ci0gICAgbV9tYXJraW5nTm90RW1w
dHkuZm9yRWFjaFNldEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAg
ICAgIGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdTY29w
ZS5oIgpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xv
dyhIZWFwVmUKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBoYW5kbGUo
KS5hbGxvY2F0b3IoKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gaGFuZGxlKCku
YWxsb2NhdG9yKCk7CiAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVk
KGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpKQogICAgICAg
ICB8fCAhbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKSB7
CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQo
KQogCiB2b2lkIE1hcmtlZEJsb2NrOjpub3RlTWFya2VkU2xvdygpCiB7Ci0gICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBoYW5kbGUoKS5hbGxvY2F0b3IoKTsKKyAgICBCbG9ja0RpcmVj
dG9yeSogYWxsb2NhdG9yID0gaGFuZGxlKCkuYWxsb2NhdG9yKCk7CiAgICAgYWxsb2NhdG9yLT5z
ZXRJc01hcmtpbmdSZXRpcmVkKGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9jaygpKSwg
JmhhbmRsZSgpLCB0cnVlKTsKIH0KIApAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6cmVtb3ZlRnJvbUFsbG8KICAgICBtX2FsbG9jYXRvci0+cmVtb3ZlQmxvY2so
dGhpcyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9BbGxvY2F0b3Io
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBpbmRleCkKK3ZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZGlkQWRkVG9BbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwg
c2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVChtX2luZGV4ID09IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIEFTU0VSVCghbV9hbGxvY2F0b3IpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxsb2NhdG9y
QXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVz
dHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjsgICAgCiBjbGFzcyBGcmVlTGlzdDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKU0NlbGw7Ci1jbGFz
cyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIE1hcmtlZFNw
YWNlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdWJzcGFjZTsKQEAgLTExMCw3ICsxMTAs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCi0g
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKCkgY29uc3Q7CisgICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgU3Vic3BhY2UqIHN1YnNwYWNl
KCkgY29uc3Q7CiAgICAgICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwpAQCAtMTU0LDcg
KzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CiAgICAgICAgIGlu
bGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBjb25zdCBB
bGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IENl
bGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgICAgIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbigpIGNvbnN0OwogICAgICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBj
b25zdDsKICAgICAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdDsKQEAgLTE5OSw3
ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlbW92ZUZyb21BbGxv
Y2F0b3IoKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgZGlkQWRkVG9BbGxvY2F0b3IoTWFya2Vk
QWxsb2NhdG9yKiwgc2l6ZV90IGluZGV4KTsKKyAgICAgICAgdm9pZCBkaWRBZGRUb0FsbG9jYXRv
cihCbG9ja0RpcmVjdG9yeSosIHNpemVfdCBpbmRleCk7CiAgICAgICAgIHZvaWQgZGlkUmVtb3Zl
RnJvbUFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRT
dHJlYW0mKTsKQEAgLTIzMiwxMSArMjMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAg
ICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKICAgICAgICAgICAg
IAotICAgICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICAgICAgQ2Vs
bEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAgICBib29sIG1faXNGcmVlTGlzdGVkIHsg
ZmFsc2UgfTsKIAogICAgICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxv
Y2F0b3IgeyBudWxscHRyIH07CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBtX2FsbG9jYXRvciB7
IG51bGxwdHIgfTsKICAgICAgICAgc2l6ZV90IG1faW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpIH07CiAgICAgICAgIFdlYWtTZXQgbV93ZWFrU2V0OwogICAgICAgICAK
QEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgCiAgICAgc2l6ZV90IGNlbGxTaXplKCk7Ci0gICAgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0OworICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVz
JiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBoYXNBbnlNYXJrZWQoKSBjb25z
dDsKICAgICB2b2lkIG5vdGVNYXJrZWQoKTsKQEAgLTM5Nyw3ICszOTcsNyBAQCBpbmxpbmUgTWFy
a2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0ZvCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNrKTsK
IH0KIAotaW5saW5lIE1hcmtlZEFsbG9jYXRvciogTWFya2VkQmxvY2s6OkhhbmRsZTo6YWxsb2Nh
dG9yKCkgY29uc3QKK2lubGluZSBCbG9ja0RpcmVjdG9yeSogTWFya2VkQmxvY2s6OkhhbmRsZTo6
YWxsb2NhdG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiB9CkBAIC00NTcs
MTIgKzQ1NywxMiBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpjZWxsU2l6ZSgpCiAgICAg
cmV0dXJuIG1faGFuZGxlLmNlbGxTaXplKCk7CiB9CiAKLWlubGluZSBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXR0cmlidXRlcygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKIH0KIAotaW5saW5lIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmIE1hcmtlZEJsb2NrOjphdHRyaWJ1dGVzKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2hhbmRsZS5hdHRyaWJ1dGVzKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI2
NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxs
b2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgog
CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZnJlZU1lbW9yeSgpCiB2b2lk
IE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAgICAgZm9yRWFjaEFsbG9j
YXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0
aW9uU3RhdHVzIHsKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSAtPiBJ
dGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLmxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgfSk7CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6c3dlZXAoKQog
ewogICAgIG1faGVhcC0+c3dlZXBlcigpLnN0b3BTd2VlcGluZygpOwogICAgIGZvckVhY2hBbGxv
Y2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGFsbG9jYXRvcikgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5zd2VlcCgpOwogICAgICAg
ICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwpAQCAt
Mjk2LDcgKzI5Niw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAg
ICBBU1NFUlQoIWlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAg
IFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Cisg
ICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKICAgICAgICAgICAgIGFsbG9jYXRvci5zdG9wQWxsb2NhdGluZygpOwogICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwpAQCAtMzI3LDcg
KzMyNyw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIHZvaWQgTWFy
a2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIGZvckVhY2hBbGxvY2F0b3IoCi0g
ICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1
cyB7CisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CiAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CkBA
IC0zMzgsNyArMzM4LDcgQEAgYm9vbCBNYXJrZWRTcGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVh
ZAogewogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAg
ICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25T
dGF0dXMgewogICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkg
ewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIE1hcmtlZFNw
YWNlOjpmcmVlT3JTaHJpbmtCbG9jayhNYXJrCiB2b2lkIE1hcmtlZFNwYWNlOjpzaHJpbmsoKQog
ewogICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3Rv
cnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRv
ci5zaHJpbmsoKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVl
OwogICAgICAgICB9KTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpiZWdp
bk1hcmtpbmcoKQogewogICAgIGlmIChtX2hlYXAtPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxl
Y3Rpb25TY29wZTo6RnVsbCkgewogICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICAg
ICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsK
KyAgICAgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKICAgICAgICAgICAgICAgICBhbGxvY2F0b3IuYmVnaW5NYXJraW5nRm9yRnVsbENv
bGxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICAgICAgICAgIH0pOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgTWFya2VkU3Bh
Y2U6OmVuZE1hcmtpbmcoKQogICAgIH0KIAogICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAg
IFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Cisg
ICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKICAgICAgICAgICAgIGFsbG9jYXRvci5lbmRNYXJraW5nKCk7CiAgICAgICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CkBAIC01MTUsMTMgKzUx
NSwxMyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzbmFwc2hvdFVuc3dlcHQoKQogewogICAgIGlmICht
X2hlYXAtPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikgewogICAg
ICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIFsmXSAoQmxvY2tE
aXJlY3RvcnkmIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgICAg
ICBhbGxvY2F0b3Iuc25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgICAgIH0p
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgICAgICBb
Jl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAg
ICAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0
dXMgewogICAgICAgICAgICAgICAgIGFsbG9jYXRvci5zbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29s
bGVjdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRp
bnVlOwogICAgICAgICAgICAgfSk7CkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBNYXJrZWRTcGFj
ZTo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgWyZdIChCbG9ja0Rp
cmVjdG9yeSYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxs
b2NhdG9yLmFzc2VydE5vVW5zd2VwdCgpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwpAQCAtNTQyLDIwICs1NDIsMjAgQEAgdm9pZCBN
YXJrZWRTcGFjZTo6YXNzZXJ0Tm9VbnN3ZXB0KCkKIHZvaWQgTWFya2VkU3BhY2U6OmR1bXBCaXRz
KFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZd
IChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAg
ICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewog
ICAgICAgICAgICAgb3V0LnByaW50KCJCaXRzIGZvciAiLCBhbGxvY2F0b3IsICI6XG4iKTsKICAg
ICAgICAgICAgIGFsbG9jYXRvci5kdW1wQml0cyhvdXQpOwogICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZFNw
YWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6OmFkZEJsb2NrRGlyZWN0b3J5KGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvcikKIHsKICAgICBh
bGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3IobnVsbHB0cik7CiAgICAgCiAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKIAotICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoc3RkOjptZW1fZm4oJk1h
cmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvciksIGFsbG9jYXRvcik7CisgICAgbV9hbGxv
Y2F0b3JzLmFwcGVuZChzdGQ6Om1lbV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNldE5leHRBbGxvY2F0
b3IpLCBhbGxvY2F0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAi
TGFyZ2VBbGxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSA8YXJyYXk+CkBAIC0xNTcsMTAgKzE1NywxMCBA
QCBwdWJsaWM6CiAgICAgTGFyZ2VBbGxvY2F0aW9uKiogbGFyZ2VBbGxvY2F0aW9uc0ZvclRoaXND
b2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0Nv
bGxlY3Rpb25FbmQ7IH0KICAgICB1bnNpZ25lZCBsYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxl
Y3Rpb25TaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxl
Y3Rpb25TaXplOyB9CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgQmxvY2tEaXJlY3Rv
cnkqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0b3JzLmZpcnN0KCk7
IH0KICAgICAKICAgICBMb2NrJiBhbGxvY2F0b3JMb2NrKCkgeyByZXR1cm4gbV9hbGxvY2F0b3JM
b2NrOyB9Ci0gICAgdm9pZCBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBNYXJrZWRBbGxvY2F0b3IqKTsKKyAgICB2b2lkIGFkZEJsb2NrRGlyZWN0b3J5KGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgQmxvY2tEaXJlY3RvcnkqKTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMg
aXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBo
YXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVy
biBtX2lzTWFya2luZzsgfQpAQCAtMjE1LDcgKzIxNSw3IEBAIHByaXZhdGU6CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+PiBtX25l
d0FjdGl2ZVdlYWtTZXRzOwogCiAgICAgTG9jayBtX2FsbG9jYXRvckxvY2s7Ci0gICAgU2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNp
bmdseUxpbmtlZExpc3RXaXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9hbGxvY2F0b3JzOwogCiAg
ICAgZnJpZW5kIGNsYXNzIEhlYXBWZXJpZmllcjsKIH07CkBAIC0yMjMsNyArMjIzLDcgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFj
ZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaEFs
bG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRl
cmF0aW9uU3RhdHVzIHsKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSAt
PiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLmZvckVhY2hCbG9jayhm
dW5jdG9yKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwog
ICAgICAgICB9KTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHZvaWQgCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgTWFya2Vk
U3BhY2U6OmZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBm
b3IgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzLmZpcnN0KCk7IGFs
bG9jYXRvcjsgYWxsb2NhdG9yID0gYWxsb2NhdG9yLT5uZXh0QWxsb2NhdG9yKCkpIHsKKyAgICBm
b3IgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgYWxs
b2NhdG9yOyBhbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgewogICAgICAg
ICBpZiAoZnVuY3RvcigqYWxsb2NhdG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgiCiAjaW5j
bHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFN1
YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjCiB2b2lkIFN1YnNwYWNlOjpwcmVwYXJl
Rm9yQWxsb2NhdGlvbigpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5
JiBhbGxvY2F0b3IpIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5wcmVwYXJlRm9yQWxsb2NhdGlv
bigpOwogICAgICAgICB9KTsKIApAQCAtODksMjYgKzg5LDI2IEBAIE1hcmtlZEJsb2NrOjpIYW5k
bGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2Nh
dG9yU291cmNlKCkKK1JlZlB0cjxTaGFyZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPj4gU3Vic3Bh
Y2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKIHsKLSAgICBjbGFzcyBUYXNrIDogcHVibGlj
IFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgY2xhc3MgVGFzayA6IHB1Ymxp
YyBTaGFyZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPiB7CiAgICAgcHVibGljOgotICAgICAgICBU
YXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICBUYXNrKEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IpCiAgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJ1
bigpIG92ZXJyaWRlCisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBydW4oKSBvdmVycmlkZQogICAg
ICAgICB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAg
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAg
ICAgQmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOwogICAgICAgICAgICAgaWYg
KHJlc3VsdCkKICAgICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9j
YXRvckluU3Vic3BhY2UoKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9j
YXRvcjsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOwogICAgICAgICBMb2Nr
IG1fbG9jazsKICAgICB9OwogICAgIApAQCAtMTE3LDkgKzExNyw5IEBAIFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFMKIAogUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxv
Y2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3Vy
Y2UoKQogewotICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxs
b2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgIHJldHVybiBjcmVhdGVQYXJhbGxl
bFNvdXJjZUFkYXB0ZXI8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCiAg
ICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCi0gICAgICAgIFtdIChNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IHsKKyAgICAgICAgW10gKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IpIC0+IFJlZlB0
cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CiAgICAgICAgICAgICBpZiAo
IWFsbG9jYXRvcikKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOwpAQCAtMTI5
LDcgKzEyOSw3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKIHZv
aWQgU3Vic3BhY2U6OnN3ZWVwKCkKIHsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBb
Jl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgIFsmXSAoQmxvY2tEaXJl
Y3RvcnkmIGFsbG9jYXRvcikgewogICAgICAgICAgICAgYWxsb2NhdG9yLnN3ZWVwKCk7CiAgICAg
ICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZp
c2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxOSArNDksMTkgQEAgcHVibGljOgogICAgIGNvbnN0IGNoYXIq
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGF0YSgpOyB9CiAgICAgTWFya2VkU3BhY2Um
IHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQogICAgIAotICAgIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KKyAgICBjb25zdCBDZWxsQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlczsgfQogICAgIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOyB9CiAgICAgCiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiwgRnJlZUxpc3QqKTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKIAotICAgIHZp
cnR1YWwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JN
b2RlKSA9IDA7CisgICAgdmlydHVhbCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOwogICAg
IAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAKLSAgICB2b2lkIGRpZENy
ZWF0ZUZpcnN0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fYWxsb2Nh
dG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gYWxsb2NhdG9yOyB9CisgICAgdm9pZCBkaWRDcmVhdGVG
aXJzdEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yKSB7IG1fYWxsb2NhdG9yRm9y
RW1wdHlBbGxvY2F0aW9uID0gYWxsb2NhdG9yOyB9CiAgICAgCiAgICAgLy8gRmluZHMgYW4gZW1w
dHkgYmxvY2sgZnJvbSBhbnkgU3Vic3BhY2UgdGhhdCBhZ3JlZXMgdG8gdHJhZGUgYmxvY2tzIHdp
dGggdXMuCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7
CkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCi0gICAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2Uo
KTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxCbG9ja0RpcmVjdG9yeSooKT4+IHBhcmFsbGVsQWxs
b2NhdG9yU291cmNlKCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CkBAIC0xMDYsMTMgKzEwNiwxMyBA
QCBwcm90ZWN0ZWQ6CiAgICAgTWFya2VkU3BhY2UmIG1fc3BhY2U7CiAgICAgCiAgICAgQ1N0cmlu
ZyBtX25hbWU7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgQ2Vs
bEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogCiAgICAgSGVhcENlbGxUeXBlKiBtX2hlYXBDZWxs
VHlwZSB7IG51bGxwdHIgfTsKICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBt
X2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxv
Y2F0b3JGb3JFbXB0eUFsbG9jYXRpb24geyBudWxscHRyIH07IC8vIFVzZXMgdGhlIE1hcmtlZFNw
YWNlIGxpbmtlZCBsaXN0IG9mIGJsb2Nrcy4KKyAgICBCbG9ja0RpcmVjdG9yeSogbV9maXJzdEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9hbGxvY2F0b3JGb3JF
bXB0eUFsbG9jYXRpb24geyBudWxscHRyIH07IC8vIFVzZXMgdGhlIE1hcmtlZFNwYWNlIGxpbmtl
ZCBsaXN0IG9mIGJsb2Nrcy4KICAgICBTZW50aW5lbExpbmtlZExpc3Q8TGFyZ2VBbGxvY2F0aW9u
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMYXJnZUFsbG9jYXRpb24+PiBtX2xhcmdlQWxsb2NhdGlv
bnM7CiAgICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
IHsgbnVsbHB0ciB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJNYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hBbGxvY2F0b3IoY29uc3Qg
RnVuYyYgZnVuYykKIHsKLSAgICBmb3IgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9m
aXJzdEFsbG9jYXRvcjsgYWxsb2NhdG9yOyBhbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHRBbGxv
Y2F0b3JJblN1YnNwYWNlKCkpCisgICAgZm9yIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0g
bV9maXJzdEFsbG9jYXRvcjsgYWxsb2NhdG9yOyBhbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHRB
bGxvY2F0b3JJblN1YnNwYWNlKCkpCiAgICAgICAgIGZ1bmMoKmFsbG9jYXRvcik7CiB9CiAKQEAg
LTQ0LDcgKzQ0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hBbGxvY2F0
b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAg
WyZdIChCbG9ja0RpcmVjdG9yeSYgYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICBhbGxvY2F0b3Iu
Zm9yRWFjaEJsb2NrKGZ1bmMpOwogICAgICAgICB9KTsKIH0KQEAgLTUzLDcgKzUzLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hOb3RFbXB0eU1hcmtl
ZEJsb2NrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAg
ICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICBbJl0gKEJsb2Nr
RGlyZWN0b3J5JiBhbGxvY2F0b3IpIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5mb3JFYWNoTm90
RW1wdHlCbG9jayhmdW5jKTsKICAgICAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0OTIsNyArMTQ5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9F
UyBOT1QgbWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3Ig
Y2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAg
Ly8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcg
cmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAg
Ly8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0
IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKICAgICAgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCkBA
IC0xNTA1LDIyICsxNTA1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAg
ICAgICBKdW1wIGRvbmU7CiAgICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9m
ZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIHBvcFBhdGggPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKICAgICAgICAgaWYgKGFsbG9jYXRvcikKICAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVz
dWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNY
ODYoKSkgewogICAgICAgICAgICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdWIz
MihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxs
U2l6ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICAgICAgc3ViMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBuZWdQdHIocmVzdWx0R1BS
KTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1h
aW5pbmcoKSkpOwotICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgICAgIEFkZHJlc3MgcGF5bG9hZEVu
ZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChp
c1g4NigpKQogICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwog
ICAgICAgICBlbHNlIHsKQEAgLTE1MzIsMTEgKzE1MzIsMTEgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yUHRyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CiAgICAgICAgIH0KICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVzdWx0R1BSKSk7CkBAIC0xNTQ0LDEyICsxNTQ0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLy8g
VGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBm
cmVzaCBvYmplY3QsIGJ1dAogICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUg
bGlzdC4KICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2Vk
QWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJs
ZWRIZWFkKCkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zm
c2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BS
UmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRv
ckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAg
ICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgYWxsb2NhdG9yR1BSKSk7CkBAIC0xNTU3LDE0ICsxNTU3LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KLSAg
ICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1
cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0
QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBlbWl0QWxsb2Nh
dGUocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1Bh
dGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCBy
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBz
dHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3Jh
dGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVj
dChHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxs
b2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwg
TWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAg
ICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxs
b2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgc3Rv
cmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwpAQCAtMTU3Niw3ICsxNTc2LDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQ
UlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2
bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikg
ewogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSklUOwogICAgIGNsYXNzIElkZW50aWZp
ZXI7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7Ci0gICAgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwor
ICAgIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNz
IFN0cnVjdHVyZUNoYWluOwogICAgIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24g
MjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZXR1cm5WYWx1ZUdQUjsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI2NzgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBKU0Rl
c3RydWN0aWJsZU9iamVjdERlc3Ryb3lGdW5jIHsKIH07CiAKIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCi0gICAgOiBI
ZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2Vs
bDo6SlNDZWxsKSkKKyAgICA6IEhlYXBDZWxsVHlwZShDZWxsQXR0cmlidXRlcyhOZWVkc0Rlc3Ry
dWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0RGVzdHJveUYKIH07CiAKIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQot
ICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5j
cHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBz
dHJ1Y3QgSlNTdHJpbmdEZXN0cm95RnVuYyB7CiB9OwogCiBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6
SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJp
YnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBIZWFwQ2Vs
bFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI4LDkgKzIyOCw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAgICAsIHByaW1pdGl2ZUdpZ2Fj
YWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNh
Z2U6OkpTVmFsdWUpKQotICAgICwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlx
dWU8SGVhcENlbGxUeXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpKSkKLSAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjpt
YWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWRE
ZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpKQotICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbEhl
YXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBhdXhpbGlh
cnlIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KENlbGxBdHRyaWJ1
dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpKSkKKyAgICAs
IGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KENlbGxBdHRy
aWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKSkKKyAgICAs
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5
cGU+KENlbGxBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKSkK
ICAgICAsIHN0cmluZ0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU3RyaW5nSGVhcENl
bGxUeXBlPigpKQogICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCiAgICAgLCBzZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331119</attachid>
            <date>2018-01-11 14:27:04 -0800</date>
            <delta_ts>2018-01-11 14:35:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>209133</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2ODA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxOC0wMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBNYXJrZWRBbGxvY2F0b3IgdG8gQmxvY2tEaXJlY3RvcnkgYW5kIEFsbG9jYXRvckF0
dHJpYnV0ZXMgdG8gQ2VsbEF0dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MTU0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW4gYSB3b3JsZCB0aGF0IGhhcyB0aHJlYWQtbG9j
YWwgY2FjaGVzLCB0aGUgdGhpbmcgd2Ugbm93IGNhbGwgdGhlICJNYXJrZWRBbGxvY2F0b3IiIGRv
ZXNuJ3QKKyAgICAgICAgcmVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBhbGxvY2F0aW9u
IGFueW1vcmUuIFRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZG9uZSBieSBzb21ldGhpbmcKKyAgICAg
ICAgaW4gdGhlIFRMQy4gV2hlbiB5b3UgbW92ZSB0aGUgYWxsb2NhdGlvbiBsb2dpYyBvdXQgb2Yg
TWFya2VkQWxsb2NhdG9yLCBpdCBiZWNvbWVzIGp1c3QgYQorICAgICAgICBwbGFjZSB0byBmaW5k
IGJsb2NrcyAoYSAiYmxvY2sgZGlyZWN0b3J5IikuCisKKyAgICAgICAgT25jZSB3ZSBkbyB0aGF0
IHJlbmFtaW5nLCB0aGUgdGVybSAiYWxsb2NhdG9yIGF0dHJpYnV0ZXMiIGJlY29tZXMgd2VpcmQu
IFRob3NlIGFyZSByZWFsbHkgdGhlCisgICAgICAgIGF0dHJpYnV0ZXMgb2YgdGhlIEhlYXBDZWxs
VHlwZS4gU28gbGV0J3MgY2FsbCB0aGVtIENlbGxBdHRyaWJ1dGVzLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5p
dGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0
KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlSGVhcENlbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZU9iamVjdCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRvckZvclNpemUp
OgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KToKKyAgICAgICAg
KEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOgorICAgICAgICAoSlND
OjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmaXJzdERpcmVjdG9yeSBjb25zdCk6CisgICAgICAg
IChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBoZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGhlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oOiBSZW1vdmVkLgorICAgICAgICAq
IGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwLgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6QmxvY2tEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c2V0U3Vi
c3BhY2UpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dCk6CisgICAg
ICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6OkJsb2Nr
RGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpibG9j
a1NpemVGb3JCeXRlcyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFkZEJsb2NrKToKKyAgICAg
ICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJl
c3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YmVnaW5NYXJr
aW5nRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5k
TWFya2luZyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpzbmFwc2hvdFVuc3dlcHRG
b3JFZGVuQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpzbmFwc2hv
dFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5
OjpmaW5kQmxvY2tUb1N3ZWVwKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnNocmluayk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojphc3NlcnROb1Vuc3dlcHQpOgorICAgICAgICAoSlNDOjpCbG9ja0Rp
cmVjdG9yeTo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKToKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6
ZHVtcEJpdHMpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3BhY2UgY29u
c3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JGdWxsQ29s
bGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZW5kTWFy
a2luZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RV
bnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmaW5kQmxvY2tUb1N3ZWVwKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJpdHMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oLgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVj
dG9yeTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpm
b3JFYWNoQml0VmVjdG9yKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZvckVhY2hC
aXRWZWN0b3JXaXRoTmFtZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpuZXh0RGly
ZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om5leHREaXJlY3Rv
cnlJblN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om5leHRE
aXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpC
bG9ja0RpcmVjdG9yeTo6c2V0TmV4dERpcmVjdG9yeSk6CisgICAgICAgIChKU0M6OkJsb2NrRGly
ZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSk6CisgICAgICAgIChKU0M6OkJsb2Nr
RGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAg
ICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QpOgorICAgICAgICAo
SlNDOjpCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6Y2VsbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OmF0dHJpYnV0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmRlc3RydWN0aW9uIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpjZWxsS2luZCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aGVhcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Yml0dmVjdG9yTG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3Rvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxsb2NhdG9yIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxsb2NhdG9y
SW5TdWJzcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvckluU3Vi
c3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnNldE5leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OnN1YnNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpmcmVlTGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oLgorICAgICAgICAoSlND
OjpCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5
Ojpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6Zm9yRWFjaE5v
dEVtcHR5QmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3Rl
ZENlbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmb3JFYWNo
QmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hO
b3RFbXB0eUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNw
cDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmli
dXRlcy5jcHAuCisgICAgICAgIChKU0M6OkNlbGxBdHRyaWJ1dGVzOjpkdW1wIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWxsb2NhdG9yQXR0cmlidXRlczo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9DZWxsQXR0cmlidXRlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmguCisgICAgICAgIChKU0M6OkNlbGxB
dHRyaWJ1dGVzOjpDZWxsQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OkFsbG9jYXRvckF0dHJp
YnV0ZXM6OkFsbG9jYXRvckF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQ29t
cGxldGVTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvcik6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmly
dHVhbCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3cp
OgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3cpOgorICAg
ICAgICAqIGhlYXAvQ29tcGxldGVTdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvR0NEZWZlcnJh
bENvbnRleHQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
Ojp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKiBoZWFwL0hlYXBDZWxsLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcENlbGw6OmNlbGxBdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcENlbGw6OmRlc3RydWN0aW9uTW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6Okhl
YXBDZWxsOjpjZWxsS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsOjphbGxvY2F0
b3JBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsVHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToKKyAgICAg
ICAgKiBoZWFwL0hlYXBDZWxsVHlwZS5oOgorICAgICAgICAoSlNDOjpIZWFwQ2VsbFR5cGU6OmF0
dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgor
ICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKToKKyAgICAgICAgKEpT
Qzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdG9wU3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SXNvQ2VsbFNldDo6SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxT
ZXQ6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSk6CisgICAgICAgIChKU0M6Oklz
b0NlbGxTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZW1vdmVC
bG9jayk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OnN3ZWVwVG9GcmVlTGlzdCk6CisgICAg
ICAgICogaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpmb3JFYWNoTWFya2VkQ2VsbCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmZvckVhY2hM
aXZlQ2VsbCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6
Oklzb1N1YnNwYWNlOjpJc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjph
bGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgIChKU0M6Oklzb1N1
YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmF0dHJpYnV0ZXMgY29u
c3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp+SGFuZGxlKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGVkKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6Om5vdGVNYXJrZWRTbG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6cmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OmRpZEFkZFRvRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6ZGlkUmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpI
YW5kbGU6OmR1bXBTdGF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN1
YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVtb3ZlRnJvbUFsbG9j
YXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZEFk
ZFRvQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpkaXJlY3Rvcnkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphbGxvY2F0b3IgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6aXNMaXZlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
RW1wdHkpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c3RvcEFsbG9jYXRpbmcp
OgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZyk6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3Bh
Y2U6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzaHJpbmspOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c25hcHNo
b3RVbnN3ZXB0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFzc2VydE5vVW5zd2VwdCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkdW1wQml0cyk6CisgICAgICAgIChKU0M6Ok1h
cmtlZFNwYWNlOjphZGRCbG9ja0RpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjphZGRNYXJrZWRBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkU3Bh
Y2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZpcnN0RGlyZWN0b3J5IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRpcmVjdG9yeUxvY2spOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6
OmZvckVhY2hEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Zmlyc3RBbGxv
Y2F0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2Nh
dG9yTG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmb3JFYWNoQWxs
b2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlSW5saW5lcy5oOgor
ICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbik6
CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxEaXJlY3RvcnlTb3VyY2UpOgorICAgICAgICAoSlND
OjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OnBhcmFsbGVs
QWxsb2NhdG9yU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6Cisg
ICAgICAgIChKU0M6OlN1YnNwYWNlOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3Vic3BhY2U6OmRpZENyZWF0ZUZpcnN0RGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6U3Vic3Bh
Y2U6OmRpZENyZWF0ZUZpcnN0QWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaERpcmVjdG9y
eSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQmxvY2spOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2spOgorICAgICAgICAo
SlNDOjpTdWJzcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0
ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmpl
Y3QpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAg
ICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVudGltZS9K
U1N0cmluZ0hlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxU
eXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSk6CisK
IDIwMTgtMDEtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAg
SklUTWF0aElDIGNvZGUgaW4gdGhlIEZUTCBpcyB3cm9uZyB3aGVuIGNvZGUgZ2V0cyBkdXBsaWNh
dGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ2
Niw3ICs0NjYsOCBAQCBmdGwvRlRMVGh1bmtzLmNwcAogZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwCiAK
IGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKLWhlYXAvQWxsb2NhdG9yQXR0cmlidXRl
cy5jcHAKK2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCitoZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAog
aGVhcC9DZWxsQ29udGFpbmVyLmNwcAogaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiBoZWFwL0NvbGxl
Y3Rpb25TY29wZS5jcHAKQEAgLTUwMiw3ICs1MDMsNiBAQCBoZWFwL0xhcmdlQWxsb2NhdGlvbi5j
cHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAotaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3Bw
CiBoZWFwL01hcmtlZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQAog
CQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3MEQ1MDA5
NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGN0RGMTQ2MUUy
QkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIg
LyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBCbG9ja0Rp
cmVjdG9yeUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBCbG9ja0RpcmVjdG9yeUlubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdG
OTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdGOTg4QTFE
OTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi87IH07
CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDM4LDcgKzQzOCw3
IEBACiAJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODYxQzU3RjQ3NTAw
NDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggKi87IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZC
RCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFC
NDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBU
cmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2
MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzMDNBMUQ0MTkyQzgw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1
dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NjMwM0MxRDQxOTJDRDAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzgxRDQxOTJDMzAwNTYw
OUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMg
LyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRo
SklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCQlDMjlFQ0IwMzE4MDREMEVEMDBEMkNCQjQgLyogQ3Vy
cmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjlFQ0IwMTE4MDREMEVEMDBEMkNCQjQgLyogQ3VycmVu
dFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gKi87IH07CiAJCUMyQTdGNjg4MTYwNDMyRDQw
MEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzJCNkQ3NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjZE
NzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJCOTE2QzIxNERBMDE0RTAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9j
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0RTAwQ0JB
Qzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRU
cmFuc2l0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICov
OyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2
RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMyREE3Nzgz
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTI0NTAsNyArMjQ1MCw3IEBACiAJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEz
RTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxNDUxRTJCRUY2ODAwOTU5NTFCIC8qIE1hcmtlZEFsbG9j
YXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQWxs
b2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjE0NTFF
MkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrRGlyZWN0b3J5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJD
bHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBC
QTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZh
bEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDQsOCArMjUwNCw4IEBA
CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJl
bmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5
IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxsb2NhdG9yQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJp
YnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2VsbEF0dHJpYnV0ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjMwMzcxRDQxOTJDMzAwNTYwOUQ5
IC8qIERlc3RydWN0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXN0cnVjdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk2MzAzODFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlc3RydWN0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQxOSw4ICs0NDE5LDggQEAKIAkJQzI5RUNCMDIxODA0
RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJU
ZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtl
ZEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzQxNERBMDQwQzAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tEaXJlY3RvcnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0
b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRGlyZWN0
b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDMEY3Q0IxN0JCRkM1QjAw
NDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOyBwYXRoID0gZGZnL0RG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
QzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7IHBhdGgg
PSBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3Qu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTQ2LDEwICs1NTQ2LDEzIEBACiAJ
CQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAq
LywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8s
CiAJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5o
ICovLAotCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVz
LmNwcCAqLywKLQkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmli
dXRlcy5oICovLAogCQkJCTBGMzBDQjVEMUZDRTQ2QjQwMDRCNTMyMyAvKiBBbGxvY2F0b3JGb3JN
b2RlLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmgg
Ki8sCisJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmNwcCAq
LywKKwkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCAqLywK
KwkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgg
Ki8sCisJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmNwcCAq
LywKKwkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLywK
IAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCiAJ
CQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENlbGxDb250YWluZXIuaCAqLywKIAkJCQkw
RjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lcklubGluZXMuaCAqLywKQEAg
LTU2NDcsOSArNTY1MCw2IEBACiAJCQkJMEYyMDhBRDYxREYwOTI1QTAwN0QzMjY5IC8qIExvY2tE
dXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIzM0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hp
bmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRCNzIzNDAxMkQ3RDBEQTAwM0JENUVEIC8qIE1h
Y2hpbmVTdGFja01hcmtlci5oICovLAotCQkJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuY3BwICovLAotCQkJCUMyQjkxNkMxMTREQTAxNEUwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTE0MkQ2RjA2MTM1MzlBMjgwMEIwMkU4NiAv
KiBNYXJrZWRCbG9jay5jcHAgKi8sCiAJCQkJMTQyRDZGMDcxMzUzOUEyODAwQjAyRTg2IC8qIE1h
cmtlZEJsb2NrLmggKi8sCiAJCQkJMEY3QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1hcmtlZEJs
b2NrSW5saW5lcy5oICovLApAQCAtODA4OSw3ICs4MDg5LDcgQEAKIAkJCQkwRkVDM0M1MzFGMzNB
NDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZBNzYyMEIxREI5NTlGOTAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIEFs
bG9jYXRvckF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzMDNBMUQ0MTkyQzgw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMENCNUUx
RkNFNEUzNzAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDczLDggKzkwNzMs
OCBAQAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMg
LyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkI5MTZDMjE0REEwMTRFMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjdERjE0NjFF
MkJFRjZBMDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjdERjE0NjFFMkJFRjZBMDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJFODYgLyog
TWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0M1RkI4MUQ4ODhBMEMwMDQ0RjVF
MiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNB
MTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lv
biAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAg
ICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9y
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgcG9zc2li
bGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUpOwogCi0gICAg
TWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGlu
Z3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4KKyAgICBCbG9ja0RpcmVjdG9yeSogbV9hbGxv
Y2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVk
IGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAgICAgdW5z
aWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5s
aW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogICAg
IEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0
eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOworICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKTsKIAogICAgIC8vIFRha2Ug
YWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUg
Y2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRl
UmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAK
ICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgewor
ICAgICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIApAQCAtMTI4LDcgKzEyOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVD
YXBhY2l0eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
Km1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKGFsbG9jYXRvclB0cikg
ewogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2so
dmVjdG9yTGVuZ3RoKTsKQEAgLTQyMDgsOSArNDIwOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIE1hcmtl
ZEFsbG9jYXRvciogbWFya2VkQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigq
bV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyks
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBlbWl0QWxs
b2NhdGVKU0NlbGwocmVzdWx0R1BSLCBtYXJrZWRBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgQmxvY2tE
aXJlY3RvcnkqIGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOworICAgIGVtaXRBbGxvY2F0
ZUpTQ2VsbChyZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICBt
X2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtT3BHUFJzOyArK2kpCkBAIC04MzgzLDcgKzgzODMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52
bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlmICgh
YWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CkBAIC04NDI4LDcgKzg0MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0
T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAg
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxs
b2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZp
b3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTE0NDgsNyArMTE0NDgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KE5vCiAKICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICBhdXRv
IGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5
LmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCkBAIC0zMTIwLDcgKzMxMjAsNyBAQCBw
dWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXplLgog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGNh
biBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0
cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRB
bGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1
cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxMjksNyArMzEyOSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUuCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0
eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5kLCBNYXNr
VHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0
b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiAjZGVm
aW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKEFy
cmF5U3RvcmFnZV92ZWN0b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSBcCi0gICAgbWFjcm8oQ29tcGxldGVTdWJzcGFjZV9hbGxv
Y2F0b3JGb3JTaXplU3RlcCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0b3JGb3JT
aXplU3RlcCgpLCBzaXplb2YoTWFya2VkQWxsb2NhdG9yKikpIFwKKyAgICBtYWNybyhDb21wbGV0
ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRP
ZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihCbG9ja0RpcmVjdG9yeSopKSBcCiAgICAg
bWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52
aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihX
cml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
ODM0LDcgKzU4MzQsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAg
ICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1Jv
cGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJp
bmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gYWxsb2NhdGVDZWxsKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9y
KSwgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCksIHNsb3dQYXRoKTsKQEAgLTk4NjIsNyArOTg2
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAg
ICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxK
U0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4aW5nSGVh
ZGVyU2l6ZSA9IDA7CkBAIC0xMDg5Myw3ICsxMDg5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRo
KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2Yo
SlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5
dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2Nh
dGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAg
ICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExOTI2LDkgKzExOTI2LDkgQEAg
cHJpdmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUhlYXBDZWxsKExWYWx1ZSBhbGxvY2F0b3Is
IExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
Y3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFs
QWxsb2NhdG9yID0gbnVsbHB0cjsKICAgICAgICAgaWYgKGFsbG9jYXRvci0+aGFzSW50UHRyKCkp
Ci0gICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBiaXR3aXNlX2Nhc3Q8TWFya2VkQWxsb2Nh
dG9yKj4oYWxsb2NhdG9yLT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRv
ciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IGVpdGhlciB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvciBpcyBu
dWxsIG9yIHdlIGRvbid0IGtub3cgd2hhdCB0aGUKQEAgLTEyMDU1LDcgKzEyMDU1LDcgQEAgcHJp
dmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCiAgICAgICAgIHNpemVfdCBzaXplLCBT
dHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTFZhbHVlIGluZGV4aW5n
TWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBl
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5j
b25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNr
LCBzbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtMTIwNzUsNyArMTIwNzUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNl
X2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAg
ICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJz
cGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFs
QWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0dWFs
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAgICAg
aWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CkBA
IC0xMjEzNSw3ICsxMjEzNSw3IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0
KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdl
dCgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmly
dHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEg
bm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGluc3RlYWQgb2YgcHV0
dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgogI2luY2x1ZGUgIlN1YnNwYWNl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyAKQEAgLTM5LDE2ICszOSwxNiBAQCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9CiAKLXZvaWQgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit2
b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KEJsb2NrRGlyZWN0
b3J5KiBkaXJlY3RvcnkpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
ZGlyZWN0b3J5LT5uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwogICAg
IAotICAgIGlmIChtX2FsbG9jYXRvcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZGlyZWN0b3Jp
ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlID0gbV9zdWJz
cGFjZXMuZmlyc3QoKTsgc3Vic3BhY2U7IHN1YnNwYWNlID0gc3Vic3BhY2UtPm5leHRTdWJzcGFj
ZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENy
ZWF0ZUZpcnN0QWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgICAgICAgICBzdWJzcGFjZS0+ZGlk
Q3JlYXRlRmlyc3REaXJlY3RvcnkoZGlyZWN0b3J5KTsKICAgICB9CiAgICAgCi0gICAgbV9hbGxv
Y2F0b3JzLmFwcGVuZChzdGQ6Om1lbV9mbigmTWFya2VkQWxsb2NhdG9yOjpzZXROZXh0QWxsb2Nh
dG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKSwgYWxsb2NhdG9yKTsKKyAgICBtX2RpcmVjdG9y
aWVzLmFwcGVuZChzdGQ6Om1lbV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNldE5leHREaXJlY3RvcnlJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IpLCBkaXJlY3RvcnkpOwogfQogCiB2b2lkIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGly
ZWN0b3J5OwogY2xhc3MgU3Vic3BhY2U7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
ewpAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3Io
TWFya2VkQWxsb2NhdG9yKik7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgdm9pZCByZWdpc3Rl
ckRpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSopOworICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERp
cmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0b3JpZXMuZmlyc3QoKTsgfQogCiAgICAg
dm9pZCByZWdpc3RlclN1YnNwYWNlKFN1YnNwYWNlKik7CiAKIHByaXZhdGU6Ci0gICAgU2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNp
bmdseUxpbmtlZExpc3RXaXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKICAg
ICBTaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWw8U3Vic3BhY2U+IG1fc3Vic3BhY2VzOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmli
dXRlcy5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRvckF0dHJpYnV0ZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgotCi0jaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEFsbG9jYXRvckF0
dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
InsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRy
aWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9yQXR0cmlidXRlcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJI
ZWFwQ2VsbC5oIgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotc3RydWN0IEFsbG9jYXRvckF0dHJpYnV0ZXMgewotICAgIEFsbG9jYXRvckF0dHJpYnV0
ZXMoKSB7IH0KLSAgICAKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKERlc3RydWN0aW9uTW9kZSBk
ZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQpCi0gICAgICAgIDogZGVzdHJ1Y3Rp
b24oZGVzdHJ1Y3Rpb24pCi0gICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0g
ICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uIHsgRG9lc05vdE5lZWREZXN0cnVjdGlvbiB9
OwotICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kIHsgSGVhcENlbGw6OkpTQ2VsbCB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoyMjY3ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9y
LmgiCisKKyNpbmNsdWRlICJBbGxvY2F0aW5nU2NvcGUuaCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2Vl
cGVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVz
dHJ1Y3RvckJsb2NrcyA9IHRydWU7CisKK01hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9y
KEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSkKKyAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUp
CisgICAgLCBtX2N1cnJlbnRCbG9jaygwKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKKyAg
ICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKKyAgICAsIG1f
aGVhcChoZWFwKQoreworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vi
c3BhY2UqIHN1YnNwYWNlKQoreworICAgIG1fYXR0cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1
dGVzKCk7CisgICAgbV9zdWJzcGFjZSA9IHN1YnNwYWNlOworfQorCitib29sIE1hcmtlZEFsbG9j
YXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCit7CisgICAgdW5zaWduZWQgaXRlcnNT
aW5jZUxhc3RUaW1lQ2hlY2sgPSAwOworICAgIGZvciAoYXV0byogYmxvY2sgOiBtX2Jsb2Nrcykg
eworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICBob2xkTG9jayhibG9jay0+YmxvY2so
KS5sb2NrKCkpOworICAgICAgICArK2l0ZXJzU2luY2VMYXN0VGltZUNoZWNrOworICAgICAgICBp
ZiAoaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPj0gSGVhcDo6c190aW1lQ2hlY2tSZXNvbHV0aW9u
KSB7CisgICAgICAgICAgICBkb3VibGUgY3VycmVudFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lID4gZGVhZGxpbmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpdGVyc1NpbmNlTGFz
dFRpbWVDaGVjayA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCgpCit7CisgICAgbV9lbXB0eUN1cnNvciA9IG1fZW1wdHkuZmluZEJpdChtX2VtcHR5Q3Vy
c29yLCB0cnVlKTsKKyAgICBpZiAobV9lbXB0eUN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29y
XTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7Cisg
ICAgaWYgKG1fY3VycmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3Vt
ZUZyZWVMaXN0KCk7CisgICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVu
dEJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZVdpdGhvdXRDb2xsZWN0aW5nKCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAg
QVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAgIGZvciAo
OzspIHsKKyAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RF
bXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAg
ICAgaWYgKG1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShO
b0xvY2tpbmdOZWNlc3NhcnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOworCisgICAgICAg
IGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1
cnNvcl0pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYg
KE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAgICAg
JiYgKHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAg
ICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1w
dHlCbG9ja1RvU3RlYWwoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJz
IGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBt
YXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBl
bXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9t
QWxsb2NhdG9yKCk7CisgICAgICAgICAgICBhZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVJbihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0
ZUluKGJsb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVCghYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3Qp
OworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkg
ZnVsbCBibG9jay4gTWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAorICAgIC8vIHRo
YXQgYWxnb3JpdGhtIGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgor
ICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CisgICAgICAgIEFTU0VS
VChibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05l
d2x5QWxsb2NhdGVkKCk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsK
KyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAg
ICAgICAgQVNTRVJUKCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCBibG9jaykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9j
dXJyZW50QmxvY2sgPSBibG9jazsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0
LmFsbG9jYXRlKAorICAgICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gbnVsbHB0cjsgfSk7CisgICAgc2V0SXNFZGVuKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOworICAgIG1hcmtlZFNwYWNlKCkuZGlk
QWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFP
cHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0
aW9uQ291bnQpIHsKKyAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAg
ICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRl
eHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1faGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAg
ICB9CisgICAgfQorICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0
aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKwor
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sK
KyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgQVNT
RVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJU
KCFtYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUo
bV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0
KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKCptX2hlYXApOworCisg
ICAgbV9oZWFwLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7Cisg
ICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBh
bmQgbm93IHRoaXMgYWxsb2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAg
Ly8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxs
YmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJy
ZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWls
dXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29s
bGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5
QWxsb2NhdGVCbG9jaygpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVN
b2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIGFkZEJsb2NrKGJsb2NrKTsKKyAgICByZXN1bHQgPSBhbGxv
Y2F0ZUluKGJsb2NrKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCit7CisgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRC
bG9jaykpOworfQorCitzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyhz
aXplX3QgYnl0ZXMpCit7CisgICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpi
bG9ja1NpemU7CisgICAgc2l6ZV90IG1pbkFsbG9jYXRpb25TaXplID0gYmxvY2tIZWFkZXJTaXpl
KCkgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRl
cyk7CisgICAgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RG
OjpwYWdlU2l6ZSgpLCBtaW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1p
bkJsb2NrU2l6ZSwgbWluQWxsb2NhdGlvblNpemUpOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxl
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soKQoreworICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBoYW5kbGUgPSBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHN1YnNwYWNl
KCktPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIG1hcmtlZFNwYWNlKCkuZGlkQWRkQmxvY2soaGFu
ZGxlKTsKKyAgICAKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6YWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgc2l6ZV90IGlu
ZGV4OworICAgIGlmIChtX2ZyZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlu
ZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOworCisgICAgICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IG1f
YmxvY2tzLmNhcGFjaXR5KCk7CisgICAgICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAg
ICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG9sZENhcGFjaXR5KSB7CisgICAgICAgICAg
ICBmb3JFYWNoQml0VmVjdG9yKAorICAgICAgICAgICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwK
KyAgICAgICAgICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZlY3RvciwgdmVjdG9yLm51bUJpdHMoKSA9PSBvbGRD
YXBhY2l0eSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAgICAg
ICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCisgICAgICAgICAgICAgICAgbG9ja2VyLAorICAg
ICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZlY3Rvci5yZXNpemUobV9ibG9ja3MuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IG1fZnJlZUJs
b2NrSW5kaWNlcy50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2tzW2luZGV4XSk7
CisgICAgICAgIG1fYmxvY2tzW2luZGV4XSA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICBmb3JF
YWNoQml0VmVjdG9yKAorICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAo
RmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZlY3Rv
ciwgIXZlY3RvcltpbmRleF0pOworICAgICAgICB9KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHBv
aW50IGF0IHdoaWNoIHRoZSBibG9jayBsZWFybnMgb2YgaXRzIGNlbGxTaXplKCkgYW5kIGF0dHJp
YnV0ZXMoKS4KKyAgICBibG9jay0+ZGlkQWRkVG9BbGxvY2F0b3IodGhpcywgaW5kZXgpOworICAg
IAorICAgIHNldElzTGl2ZShOb0xvY2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKKyAgICBz
ZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgaW5kZXgsIHRydWUpOworfQorCit2b2lkIE1h
cmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7
CisgICAgQVNTRVJUKGJsb2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQobV9i
bG9ja3NbYmxvY2stPmluZGV4KCldID09IGJsb2NrKTsKKyAgICAKKyAgICBzdWJzcGFjZSgpLT5k
aWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCisgICAgbV9ibG9ja3NbYmxvY2st
PmluZGV4KCldID0gbnVsbHB0cjsKKyAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2Nr
LT5pbmRleCgpKTsKKyAgICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAorICAgICAgICBob2xkTG9j
ayhtX2JpdHZlY3RvckxvY2spLAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3Rvcikg
eworICAgICAgICAgICAgdmVjdG9yW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOworICAgICAgICB9
KTsKKyAgICAKKyAgICBibG9jay0+ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpOworfQorCit2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQoreworICAgIGlmIChmYWxzZSkKKyAg
ICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BB
bGxvY2F0aW5nIVxuIik7CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYg
KCFtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9u
V2lsbEZhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50
QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
ID0gbV9jdXJyZW50QmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0
aW9uKCkKK3sKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50
QmxvY2sgPSBudWxscHRyOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKworICAgIG1fYWxsb2Nh
dGlvbkN1cnNvciA9IDA7CisgICAgbV9lbXB0eUN1cnNvciA9IDA7CisgICAgbV91bnN3ZXB0Q3Vy
c29yID0gMDsKKyAgICAKKyAgICBtX2VkZW4uY2xlYXJBbGwoKTsKKworICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp1c2VJbW1vcnRhbE9iamVjdHMoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1h
a2UgdGhpcyB3b3JrIGFnYWluLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMjk2CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQoreworICAgIGZvckVhY2hCbG9jaygKKyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jaykgeworICAgICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7
CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGlu
ZygpCit7CisgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKKyAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JG
dWxsQ29sbGVjdGlvbigpCit7CisgICAgLy8gTWFyayBiaXRzIGFyZSBzdGlja3kgYW5kIHNvIGlz
IG91ciBzdW1tYXJ5IG9mIG1hcmsgYml0cy4gV2Ugb25seSBjbGVhciB0aGVzZSBkdXJpbmcgZnVs
bAorICAgIC8vIGNvbGxlY3Rpb25zLCBzbyBpZiB5b3Ugc3Vydml2ZWQgdGhlIGxhc3QgY29sbGVj
dGlvbiB5b3Ugd2lsbCBzdXJ2aXZlIHRoZSBuZXh0IG9uZSBzbyBsb25nCisgICAgLy8gYXMgdGhl
IG5leHQgb25lIGlzIGVkZW4uCisgICAgbV9tYXJraW5nTm90RW1wdHkuY2xlYXJBbGwoKTsKKyAg
ICBtX21hcmtpbmdSZXRpcmVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9y
OjplbmRNYXJraW5nKCkKK3sKKyAgICBtX2FsbG9jYXRlZC5jbGVhckFsbCgpOworICAgIAorICAg
IC8vIEl0J3Mgc3VycHJpc2luZyBhbmQgZnJ1c3RyYXRpbmcgdG8gY29tcHJlaGVuZCwgYnV0IHRo
ZSBlbmQtb2YtbWFya2luZyBmbGlwIGRvZXMgbm90IG5lZWQgdG8KKyAgICAvLyBrbm93IHdoYXQg
a2luZCBvZiBjb2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29k
ZWQgaW4gdGhlIG1fbWFya2luZ1hZWgorICAgIC8vIHZlY3RvcnMuCisgICAgCisgICAgaWYgKCF0
cmFkZURlc3RydWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgICAgIEFT
U0VSVChtX2VtcHR5LmlzRW1wdHkoKSk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0
eSA9IG1fbGl2ZSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
ZW1wdHkgPSBtX2xpdmUgJiB+bV9tYXJraW5nTm90RW1wdHk7CisgICAgICAgIG1fY2FuQWxsb2Nh
dGVCdXROb3RFbXB0eSA9IG1fbGl2ZSAmIG1fbWFya2luZ05vdEVtcHR5ICYgfm1fbWFya2luZ1Jl
dGlyZWQ7CisgICAgfQorICAgIAorICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKCkpIHsKKyAgICAg
ICAgLy8gVGhlcmUgYXJlIHNvbWUgYmxvY2tzIHRoYXQgd2UgZGlkbid0IGFsbG9jYXRlIG91dCBv
ZiBpbiB0aGUgbGFzdCBjeWNsZSwgYnV0IHdlIHN3ZXB0IHRoZW0uIFRoaXMKKyAgICAgICAgLy8g
d2lsbCBmb3JnZXQgdGhhdCB3ZSBkaWQgdGhhdCBhbmQgd2Ugd2lsbCBlbmQgdXAgc3dlZXBpbmcg
dGhlbSBhZ2FpbiBhbmQgYXR0ZW1wdGluZyB0byBjYWxsIHRoZWlyCisgICAgICAgIC8vIGRlc3Ry
dWN0b3JzIGFnYWluLiBUaGF0J3MgZmluZSBiZWNhdXNlIG9mIHphcHBpbmcuIFRoZSBvbmx5IHRp
bWUgd2hlbiB3ZSBjYW5ub3QgZm9yZ2V0IGlzIHdoZW4KKyAgICAgICAgLy8gd2UganVzdCBhbGxv
Y2F0ZSBhIGJsb2NrIG9yIHdoZW4gd2UgbW92ZSBhIGJsb2NrIGZyb20gb25lIHNpemUgY2xhc3Mg
dG8gYW5vdGhlci4gVGhhdCBkb2Vzbid0CisgICAgICAgIC8vIGhhcHBlbiBoZXJlLgorICAgICAg
ICBtX2Rlc3RydWN0aWJsZSA9IG1fbGl2ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZhbHNlKSB7
CisgICAgICAgIGRhdGFMb2coIkJpdHMgZm9yICIsIG1fY2VsbFNpemUsICIsICIsIG1fYXR0cmli
dXRlcywgIiBhZnRlciBlbmRNYXJraW5nOlxuIik7CisgICAgICAgIGR1bXBCaXRzKFdURjo6ZGF0
YUZpbGUoKSk7CisgICAgfQorfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3
ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKQoreworICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47Cit9CisK
K3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigp
Cit7CisgICAgbV91bnN3ZXB0ID0gbV9saXZlOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBN
YXJrZWRBbGxvY2F0b3I6OmZpbmRCbG9ja1RvU3dlZXAoKQoreworICAgIG1fdW5zd2VwdEN1cnNv
ciA9IG1fdW5zd2VwdC5maW5kQml0KG1fdW5zd2VwdEN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1f
dW5zd2VwdEN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtX2Jsb2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOworfQorCit2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6c3dlZXAoKQoreworICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAorICAg
ICAgICBbJl0gKHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF07CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVs
bHB0cik7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkK
K3sKKyAgICAobV9lbXB0eSAmIH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNldEJpdCgKKyAgICAg
ICAgWyZdIChzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgIG1hcmtlZFNwYWNlKCkuZnJlZUJs
b2NrKG1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9j
YXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKK3sKKyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fdW5zd2VwdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBkYXRhTG9nKCJBc3NlcnRpb24gZmFpbGVkOiB1bnN3ZXB0IG5v
dCBlbXB0eSBpbiAiLCAqdGhpcywgIi5cbiIpOworICAgIGR1bXBCaXRzKCk7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5k
bGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7
CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3IpCisgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9kb25lKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5
LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2Fs
bG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9j
YXRvcjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2Nr
OworICAgICAgICBib29sIG1fZG9uZSB7IGZhbHNlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMpKTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRl
cih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQg
TWFya2VkQWxsb2NhdG9yOjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQoreworICAgIHVuc2ln
bmVkIG1heE5hbWVMZW5ndGggPSAwOworICAgIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKKyAg
ICAgICAgTm9Mb2NraW5nTmVjZXNzYXJ5LAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImLCBj
b25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4o
bmFtZSk7CisgICAgICAgICAgICBtYXhOYW1lTGVuZ3RoID0gc3RkOjptYXgobWF4TmFtZUxlbmd0
aCwgbGVuZ3RoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgZm9yRWFjaEJpdFZlY3RvcldpdGhO
YW1lKAorICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZl
Y3RvciYgdmVjdG9yLCBjb25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBuYW1lLCAiOiAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1heE5h
bWVMZW5ndGggLSBzdHJsZW4obmFtZSk7IGktLTspCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIgIik7CisgICAgICAgICAgICBvdXQucHJpbnQodmVjdG9yLCAiXG4iKTsKKyAgICAgICAgfSk7
Cit9CisKK01hcmtlZFNwYWNlJiBNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdWJzcGFjZS0+c3BhY2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9y
eS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwxNCBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgogCiAjaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgi
CiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2lu
Y2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3Rv
cnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3Mg
PSB0cnVlOwogCi1NYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBz
aXplX3QgY2VsbFNpemUpCitCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCogaGVh
cCwgc2l6ZV90IGNlbGxTaXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKICAgICAsIG1f
Y3VycmVudEJsb2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQpAQCAtNTAsMTMgKzUw
LDEzIEBAIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGgKIHsKIH0KIAot
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3Zv
aWQgQmxvY2tEaXJlY3Rvcnk6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKIHsKICAg
ICBtX2F0dHJpYnV0ZXMgPSBzdWJzcGFjZS0+YXR0cmlidXRlcygpOwogICAgIG1fc3Vic3BhY2Ug
PSBzdWJzcGFjZTsKIH0KIAotYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91Ymxl
IGRlYWRsaW5lKQorYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxp
bmUpCiB7CiAgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwogICAgIGZv
ciAoYXV0byogYmxvY2sgOiBtX2Jsb2NrcykgewpAQCAtNzMsNyArNzMsNyBAQCBib29sIE1hcmtl
ZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1N
YXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVh
bCgpCitNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEVtcHR5QmxvY2tU
b1N0ZWFsKCkKIHsKICAgICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlD
dXJzb3IsIHRydWUpOwogICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkK
QEAgLTgxLDcgKzgxLDcgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpm
aQogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkaWRD
b25zdW1lRnJlZUxpc3QoKQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwpAQCAtOTAsNyArOTAsNyBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoKQordm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3RpbmcoKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKICAgICAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFy
cyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAg
ICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sg
bWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAgICAvLyBhbmQg
ZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJv
bUFsbG9jYXRvcigpOworICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsK
ICAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
ZUluKGJsb2NrKTsKICAgICAgICAgfQpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2spCit2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKIHsKICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3ZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVJbihNYXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCitBTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdD
cygpKQogICAgICAgICByZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwog
fQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQordm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQog
ewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBB
U1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAg
LTE5NCw3ICsxOTQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uo
CiAKICAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0
KTsKICAgICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxi
YWNrIGFuZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkK
KyAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBu
b3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAvLyBo
YXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNr
IGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgogICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRC
bG9jaykpCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBzdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6ZSgp
CiAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KHNpemVvZihNYXJrZWRCbG9jaykpOwogfQogCi1zaXplX3QgTWFya2VkQWxsb2NhdG9yOjpi
bG9ja1NpemVGb3JCeXRlcyhzaXplX3QgYnl0ZXMpCitzaXplX3QgQmxvY2tEaXJlY3Rvcnk6OmJs
b2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXpl
ID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUg
PSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9j
azo6YXRvbVNpemU+KGJ5dGVzKTsKQEAgLTIzMCw3ICsyMzAsNyBAQCBzaXplX3QgTWFya2VkQWxs
b2NhdG9yOjpibG9ja1NpemVGb3JCeXRlCiAgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6
ZSwgbWluQWxsb2NhdGlvblNpemUpOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlQmxvY2soKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tE
aXJlY3Rvcnk6OnRyeUFsbG9jYXRlQmxvY2soKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKQEAgLTI0Myw3ICsyNDMsNyBAQCBNYXJrZWRC
bG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OnRyCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0K
IAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJs
b2NrKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6YWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2spCiB7CiAgICAgc2l6ZV90IGluZGV4OwogICAgIGlmIChtX2ZyZWVCbG9ja0luZGljZXMu
aXNFbXB0eSgpKSB7CkBAIC0yODEsMTUgKzI4MSwxNSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
YWRkQmxvY2soTWFya2VkQmxvCiAgICAgICAgIH0pOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgcG9p
bnQgYXQgd2hpY2ggdGhlIGJsb2NrIGxlYXJucyBvZiBpdHMgY2VsbFNpemUoKSBhbmQgYXR0cmli
dXRlcygpLgotICAgIGJsb2NrLT5kaWRBZGRUb0FsbG9jYXRvcih0aGlzLCBpbmRleCk7CisgICAg
YmxvY2stPmRpZEFkZFRvRGlyZWN0b3J5KHRoaXMsIGluZGV4KTsKICAgICAKICAgICBzZXRJc0xp
dmUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBpbmRleCwgdHJ1ZSk7CiAgICAgc2V0SXNFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OnJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQordm9pZCBCbG9ja0RpcmVj
dG9yeTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7Ci0gICAgQVNT
RVJUKGJsb2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoYmxvY2stPmRpcmVj
dG9yeSgpID09IHRoaXMpOwogICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPT0g
YmxvY2spOwogICAgIAogICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRl
eCgpKTsKQEAgLTMwMywxMyArMzAzLDEzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVC
bG9jayhNYXJrZWQKICAgICAgICAgICAgIHZlY3RvcltibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsK
ICAgICAgICAgfSk7CiAgICAgCi0gICAgYmxvY2stPmRpZFJlbW92ZUZyb21BbGxvY2F0b3IoKTsK
KyAgICBibG9jay0+ZGlkUmVtb3ZlRnJvbURpcmVjdG9yeSgpOwogfQogCi12b2lkIE1hcmtlZEFs
bG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9j
YXRpbmcoKQogewogICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CisgICAgICAgIGRh
dGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5n
IVxuIik7CiAgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jaykgewogICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwo
KSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0
aW5nKCkKICAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9y
OjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpwcmVwYXJlRm9y
QWxsb2NhdGlvbigpCiB7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1f
Y3VycmVudEJsb2NrID0gbnVsbHB0cjsKQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIE1hcmtlZEFs
bG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpCiAgICAgfQogfQogCi12b2lkIE1hcmtlZEFsbG9j
YXRvcjo6bGFzdENoYW5jZVRvRmluYWxpemUoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENo
YW5jZVRvRmluYWxpemUoKQogewogICAgIGZvckVhY2hCbG9jaygKICAgICAgICAgWyZdIChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykgewpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJl
c3VtZUFsbG9jYXRpbmcoKQogewogICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAg
IHJldHVybjsKQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1l
QWxsb2NhdGluZygpCiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQogCi12b2lk
IE1hcmtlZEFsbG9jYXRvcjo6YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQordm9pZCBC
bG9ja0RpcmVjdG9yeTo6YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQogewogICAgIC8v
IE1hcmsgYml0cyBhcmUgc3RpY2t5IGFuZCBzbyBpcyBvdXIgc3VtbWFyeSBvZiBtYXJrIGJpdHMu
IFdlIG9ubHkgY2xlYXIgdGhlc2UgZHVyaW5nIGZ1bGwKICAgICAvLyBjb2xsZWN0aW9ucywgc28g
aWYgeW91IHN1cnZpdmVkIHRoZSBsYXN0IGNvbGxlY3Rpb24geW91IHdpbGwgc3Vydml2ZSB0aGUg
bmV4dCBvbmUgc28gbG9uZwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9y
OjpiZWdpbk1hcmtpbmdGb3JGdWwKICAgICBtX21hcmtpbmdSZXRpcmVkLmNsZWFyQWxsKCk7CiB9
CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjplbmRNYXJraW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rv
cnk6OmVuZE1hcmtpbmcoKQogewogICAgIG1fYWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgCkBA
IC0zOTksMTcgKzM5OSwxNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZW5kTWFya2luZygpCiAg
ICAgfQogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNv
bGxlY3Rpb24oKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNv
bGxlY3Rpb24oKQogewogICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47CiB9CiAKLXZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit2b2lkIEJsb2Nr
RGlyZWN0b3J5OjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCiB7CiAgICAgbV91
bnN3ZXB0ID0gbV9saXZlOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0
b3I6OmZpbmRCbG9ja1RvU3dlZXAoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rv
cnk6OmZpbmRCbG9ja1RvU3dlZXAoKQogewogICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2Vw
dC5maW5kQml0KG1fdW5zd2VwdEN1cnNvciwgdHJ1ZSk7CiAgICAgaWYgKG1fdW5zd2VwdEN1cnNv
ciA+PSBtX2Jsb2Nrcy5zaXplKCkpCkBAIC00MTcsNyArNDE3LDcgQEAgTWFya2VkQmxvY2s6Okhh
bmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaQogICAgIHJldHVybiBtX2Jsb2Nrc1ttX3Vuc3dlcHRD
dXJzb3JdOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQordm9pZCBCbG9ja0Rp
cmVjdG9yeTo6c3dlZXAoKQogewogICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAg
ICBbJl0gKHNpemVfdCBpbmRleCkgewpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzd2VlcCgpCiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6
c2hyaW5rKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnNocmluaygpCiB7CiAgICAgKG1fZW1wdHkg
JiB+bV9kZXN0cnVjdGlibGUpLmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGlu
ZGV4KSB7CkBAIC00MzQsNyArNDM0LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNocmluaygp
CiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0
KCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OmFzc2VydE5vVW5zd2VwdCgpCiB7CiAgICAgaWYgKEFT
U0VSVF9ESVNBQkxFRCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLVJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBN
YXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCitSZWZQdHI8U2hh
cmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gQmxvY2tEaXJlY3Rvcnk6OnBhcmFsbGVs
Tm90RW1wdHlCbG9ja1NvdXJjZSgpCiB7CiAgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRU
YXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRhc2so
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCi0gICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFs
bG9jYXRvcikKKyAgICAgICAgVGFzayhCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KQorICAgICAg
ICAgICAgOiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTQ2MSwxNiArNDYxLDE2IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCkKICAgICAgICAgICAgIGlmIChtX2RvbmUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
Ci0gICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmlu
ZEJpdChtX2luZGV4LCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2Nh
dG9yLm1fYmxvY2tzLnNpemUoKSkgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fZGlyZWN0b3J5
Lm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBp
ZiAobV9pbmRleCA+PSBtX2RpcmVjdG9yeS5tX2Jsb2Nrcy5zaXplKCkpIHsKICAgICAgICAgICAg
ICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5k
ZXgrK107CisgICAgICAgICAgICByZXR1cm4gbV9kaXJlY3RvcnkubV9ibG9ja3NbbV9pbmRleCsr
XTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBNYXJrZWRBbGxv
Y2F0b3ImIG1fYWxsb2NhdG9yOworICAgICAgICBCbG9ja0RpcmVjdG9yeSYgbV9kaXJlY3Rvcnk7
CiAgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OwogICAgICAgICBMb2NrIG1fbG9jazsKICAg
ICAgICAgYm9vbCBtX2RvbmUgeyBmYWxzZSB9OwpAQCAtNDc5LDEyICs0NzksMTIgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGFzaygqdGhpcykpOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAordm9pZCBCbG9ja0RpcmVjdG9yeTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2Vs
bFNpemUsICIvIiwgbV9hdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1
bXBCaXRzKFByaW50U3RyZWFtJiBvdXQpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkdW1wQml0cyhQ
cmludFN0cmVhbSYgb3V0KQogewogICAgIHVuc2lnbmVkIG1heE5hbWVMZW5ndGggPSAwOwogICAg
IGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6ZHVtcEJpdHMoUHJpbnRTdHJlCiAgICAgICAgIH0pOwogfQogCi1NYXJrZWRT
cGFjZSYgTWFya2VkQWxsb2NhdG9yOjptYXJrZWRTcGFjZSgpIGNvbnN0CitNYXJrZWRTcGFjZSYg
QmxvY2tEaXJlY3Rvcnk6Om1hcmtlZFNwYWNlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdWJz
cGFjZS0+c3BhY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2Nr
RGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRl
ICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRl
ICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250
ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIElzb0NlbGxTZXQ7CitjbGFzcyBNYXJrZWRTcGFjZTsK
K2NsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworI2RlZmluZSBGT1JfRUFDSF9NQVJLRURf
QUxMT0NBVE9SX0JJVChtYWNybykgXAorICAgIG1hY3JvKGxpdmUsIExpdmUpIC8qIFRoZSBzZXQg
b2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9cCisgICAgbWFjcm8o
ZW1wdHksIEVtcHR5KSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5vIGxpdmUg
b2JqZWN0cy4gKi8gXAorICAgIG1hY3JvKGFsbG9jYXRlZCwgQWxsb2NhdGVkKSAvKiBUaGUgc2V0
IG9mIGFsbCBibG9ja3MgdGhhdCBhcmUgZnVsbCBvZiBsaXZlIG9iamVjdHMuICovXAorICAgIG1h
Y3JvKGNhbkFsbG9jYXRlQnV0Tm90RW1wdHksIENhbkFsbG9jYXRlQnV0Tm90RW1wdHkpIC8qIFRo
ZSBzZXQgb2YgYWxsIGJsb2NrcyBhcmUgbmVpdGhlciBlbXB0eSBub3IgcmV0aXJlZCAoaS5lLiBh
cmUgbW9yZSB0aGFuIG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRpb24gZnVsbCkuICovIFwKKyAgICBt
YWNybyhkZXN0cnVjdGlibGUsIERlc3RydWN0aWJsZSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tz
IHRoYXQgbWF5IGhhdmUgZGVzdHJ1Y3RvcnMgdG8gcnVuLiAqL1wKKyAgICBtYWNybyhlZGVuLCBF
ZGVuKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5ldyBvYmplY3RzIHNpbmNl
IHRoZSBsYXN0IEdDLiAqL1wKKyAgICBtYWNybyh1bnN3ZXB0LCBVbnN3ZXB0KSAvKiBUaGUgc2V0
IG9mIGFsbCBibG9ja3MgdGhhdCBjb3VsZCBiZSBzd2VwdCBieSB0aGUgaW5jcmVtZW50YWwgc3dl
ZXBlci4gKi9cCisgICAgXAorICAgIC8qIFRoZXNlIGFyZSBjb21wdXRlZCBkdXJpbmcgbWFya2lu
Zy4gKi9cCisgICAgbWFjcm8obWFya2luZ05vdEVtcHR5LCBNYXJraW5nTm90RW1wdHkpIC8qIFRo
ZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSBub3QgZW1wdHkuICovIFwKKyAgICBtYWNybyht
YXJraW5nUmV0aXJlZCwgTWFya2luZ1JldGlyZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0
aGF0IGFyZSByZXRpcmVkLiAqLworCisvLyBGSVhNRTogV2UgZGVmaW5lZCBjYW5BbGxvY2F0ZUJ1
dE5vdEVtcHR5IGFuZCBlbXB0eSB0byBiZSBleGNsdXNpdmU6CisvLworLy8gICAgIGNhbkFsbG9j
YXRlQnV0Tm90RW1wdHkgJiBlbXB0eSA9PSAwCisvLworLy8gSW5zdGVhZCBvZiBjYWxsaW5nIGl0
IGNhbkFsbG9jYXRlIGFuZCBtYWtpbmcgaXQgaW5jbHVzaXZlOgorLy8KKy8vICAgICBjYW5BbGxv
Y2F0ZSAmIGVtcHR5ID09IGVtcHR5CisvLworLy8gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBiZXR0
ZXIuIEknbGwgbGVhdmUgaXQgdG8gYSBmdXR1cmUgYnVnIHRvIGZpeCB0aGF0LCBzaW5jZSBicmVh
dGhpbmcgb24KKy8vIHRoaXMgY29kZSBsZWFkcyB0byByZWdyZXNzaW9ucyBmb3IgZGF5cywgYW5k
IGl0J3Mgbm90IGNsZWFyIHRoYXQgbWFraW5nIHRoaXMgY2hhbmdlIHdvdWxkCisvLyBpbXByb3Zl
IHBlcmYgc2luY2UgaXQgd291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZpb3Is
IGFuZCBlaXRoZXIgd2F5IHRoZSBhbGxvY2F0b3IKKy8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0
dmVjdG9ycy4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIx
MjEKKworY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
YXJrZWRBbGxvY2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ2VsbFNpemUoKTsKKworICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNl
bGxTaXplKTsKKyAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CisgICAgdm9pZCBsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOworICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAg
ICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7Cisg
ICAgdm9pZCBiZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIHZvaWQgZW5kTWFy
a2luZygpOworICAgIHZvaWQgc25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsKKyAg
ICB2b2lkIHNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgdm9pZCBzd2Vl
cCgpOworICAgIHZvaWQgc2hyaW5rKCk7CisgICAgdm9pZCBhc3NlcnROb1Vuc3dlcHQoKTsKKyAg
ICBzaXplX3QgY2VsbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTaXplOyB9CisgICAgY29u
c3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlczsgfQorICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CisgICAgRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3Ry
dWN0aW9uOyB9CisgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29u
dGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJu
IG1faGVhcDsgfQorCisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdl
dCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hC
bG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgCisgICAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9j
a1NvdXJjZSgpOworICAgIAorICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSop
OworICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOworCisgICAgYm9v
bCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBi
bG9ja1NpemVGb3JCeXRlcyhzaXplX3QpOworICAgIAorICAgIExvY2smIGJpdHZlY3RvckxvY2so
KSB7IHJldHVybiBtX2JpdHZlY3RvckxvY2s7IH0KKyAgIAorI2RlZmluZSBNQVJLRURfQUxMT0NB
VE9SX0JJVF9BQ0NFU1NPUlMobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgICAgIFwKKyAg
ICBib29sIGlzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtXyAjIyBsb3dlckJpdE5hbWVbaW5kZXhdOyB9IFwKKyAg
ICBib29sIGlzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKSBjb25zdCB7IHJldHVybiBpcyAjIyBjYXBpdGFs
Qml0TmFtZShsb2NrZXIsIGJsb2NrLT5pbmRleCgpKTsgfSBcCisgICAgdm9pZCBzZXRJcyAjIyBj
YXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCwgYm9vbCB2
YWx1ZSkgeyBtXyAjIyBsb3dlckJpdE5hbWVbaW5kZXhdID0gdmFsdWU7IH0gXAorICAgIHZvaWQg
c2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2ssIGJvb2wgdmFsdWUpIHsgc2V0SXMgIyMgY2FwaXRhbEJp
dE5hbWUobG9ja2VyLCBibG9jay0+aW5kZXgoKSwgdmFsdWUpOyB9CisgICAgRk9SX0VBQ0hfTUFS
S0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTKQorI3VuZGVm
IE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGZvckVhY2hCaXRWZWN0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBj
b25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FM
TEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgXAorICAgICAgICBmdW5jKG1fICMj
IGxvd2VyQml0TmFtZSk7CisgICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1B
UktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKTsKKyN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJ
VF9DQUxMQkFDSworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisjZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExC
QUNLKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyAgICAgICAgZnVuYyhtXyAjIyBs
b3dlckJpdE5hbWUsICNjYXBpdGFsQml0TmFtZSk7CisgICAgICAgIEZPUl9FQUNIX01BUktFRF9B
TExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKTsKKyN1bmRlZiBNQVJL
RURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSworICAgIH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0
b3IqIG5leHRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4
dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4
dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQorICAgIAorICAgIHZvaWQgc2V0
TmV4dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0
b3IgPSBhbGxvY2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBh
bGxvY2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CisgICAgCisgICAgTWFya2VkQmxvY2s6
OkhhbmRsZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7CisgICAgCisgICAgTWFya2VkQmxvY2s6
OkhhbmRsZSogZmluZEJsb2NrVG9Td2VlcCgpOworICAgIAorICAgIFN1YnNwYWNlKiBzdWJzcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KKyAgICBNYXJrZWRTcGFjZSYgbWFya2Vk
U3BhY2UoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QoKSBjb25z
dCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxl
KCkpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKKyAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICB2
b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2Vk
QmxvY2s6OkhhbmRsZSopOworICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSopOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdD
RGVmZXJyYWxDb250ZXh0Kik7CisgICAgCisgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICAK
KyAgICBWZWN0b3I8TWFya2VkQmxvY2s6OkhhbmRsZSo+IG1fYmxvY2tzOworICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9mcmVlQmxvY2tJbmRpY2VzOworCisgICAgLy8gTXV0YXRvciB1c2VzIHRoaXMg
dG8gZ3VhcmQgcmVzaXppbmcgdGhlIGJpdHZlY3RvcnMuIFRob3NlIHRoaW5ncyBpbiB0aGUgR0Mg
dGhhdCBtYXkgcnVuCisgICAgLy8gY29uY3VycmVudGx5IHRvIHRoZSBtdXRhdG9yIG11c3QgbG9j
ayB0aGlzIHdoZW4gYWNjZXNzaW5nIHRoZSBiaXR2ZWN0b3JzLgorICAgIExvY2sgbV9iaXR2ZWN0
b3JMb2NrOworI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTihsb3dlckJp
dE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCisgICAgRmFzdEJpdFZlY3RvciBtXyAjIyBsb3dlckJp
dE5hbWU7CisgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRP
Ul9CSVRfREVDTEFSQVRJT04pCisjdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJ
T04KKyAgICAKKyAgICAvLyBBZnRlciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQg
b24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8v
IGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdh
cy4KKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhl
IG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICBzaXpl
X3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQg
aXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkg
YmxvY2tzKS4KKyAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8g
dGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBp
bmcuCisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7CisgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7CisKKyAgICBMb2NrIG1fbG9j
azsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplOworICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOworICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJl
IHJlZmVyZW5jZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Njk4OAorICAgIEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFjZSog
bV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9j
YXRvciB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07Cit9OworCitpbmxpbmUgcHRy
ZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7CisgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxp
bmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCit7CisgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2VsbFNpemUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Js
b2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0j
aW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIElzb0NlbGxTZXQ7
CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotI2Rl
ZmluZSBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChtYWNybykgXAorI2RlZmluZSBGT1Jf
RUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKG1hY3JvKSBcCiAgICAgbWFjcm8obGl2ZSwgTGl2ZSkg
LyogVGhlIHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wK
ICAgICBtYWNybyhlbXB0eSwgRW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhh
dmUgbm8gbGl2ZSBvYmplY3RzLiAqLyBcCiAgICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0ZWQp
IC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0cy4g
Ki9cCkBAIC02NSwxMiArNjUsMTIgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogLy8K
IC8vIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgYmV0dGVyLiBJJ2xsIGxlYXZlIGl0IHRvIGEgZnV0
dXJlIGJ1ZyB0byBmaXggdGhhdCwgc2luY2UgYnJlYXRoaW5nIG9uCiAvLyB0aGlzIGNvZGUgbGVh
ZHMgdG8gcmVncmVzc2lvbnMgZm9yIGRheXMsIGFuZCBpdCdzIG5vdCBjbGVhciB0aGF0IG1ha2lu
ZyB0aGlzIGNoYW5nZSB3b3VsZAotLy8gaW1wcm92ZSBwZXJmIHNpbmNlIGl0IHdvdWxkIG5vdCBj
aGFuZ2UgdGhlIGNvbGxlY3RvcidzIGJlaGF2aW9yLCBhbmQgZWl0aGVyIHdheSB0aGUgYWxsb2Nh
dG9yCisvLyBpbXByb3ZlIHBlcmYgc2luY2UgaXQgd291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVj
dG9yJ3MgYmVoYXZpb3IsIGFuZCBlaXRoZXIgd2F5IHRoZSBkaXJlY3RvcnkKIC8vIGhhcyB0byBs
b29rIGF0IGJvdGggYml0dmVjdG9ycy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjIxMjEKIAotY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOworY2xhc3MgQmxvY2tEaXJlY3Rvcnkgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJsb2NrRGlyZWN0b3J5KTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkZyZWVMaXN0KCk7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7
CiAKLSAgICBNYXJrZWRBbGxvY2F0b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgQmxv
Y2tEaXJlY3RvcnkoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFj
ZShTdWJzcGFjZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lk
IHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNocmluaygpOwogICAgIHZvaWQgYXNzZXJ0Tm9VbnN3ZXB0KCk7CiAgICAgc2l6ZV90IGNl
bGxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQotICAgIGNvbnN0IEFsbG9jYXRv
ckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0K
KyAgICBjb25zdCBDZWxsQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlczsgfQogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVz
dHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRl
c3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KQEAgLTExNiwzOSArMTE2LDM5IEBAIHB1YmxpYzoK
ICAgICAKICAgICBMb2NrJiBiaXR2ZWN0b3JMb2NrKCkgeyByZXR1cm4gbV9iaXR2ZWN0b3JMb2Nr
OyB9CiAgICAKLSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTKGxvd2VyQml0
TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRf
QUNDRVNTT1JTKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCiAgICAgYm9vbCBp
cyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV8gIyMgbG93ZXJCaXROYW1lW2luZGV4XTsgfSBcCiAgICAgYm9vbCBp
cyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jaykgY29uc3QgeyByZXR1cm4gaXMgIyMgY2FwaXRhbEJpdE5hbWUo
bG9ja2VyLCBibG9jay0+aW5kZXgoKSk7IH0gXAogICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJp
dE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBzaXplX3QgaW5kZXgsIGJvb2wgdmFsdWUpIHsg
bV8gIyMgbG93ZXJCaXROYW1lW2luZGV4XSA9IHZhbHVlOyB9IFwKICAgICB2b2lkIHNldElzICMj
IGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrLCBib29sIHZhbHVlKSB7IHNldElzICMjIGNhcGl0YWxCaXROYW1lKGxv
Y2tlciwgYmxvY2stPmluZGV4KCksIHZhbHVlKTsgfQotICAgIEZPUl9FQUNIX01BUktFRF9BTExP
Q0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUykKLSN1bmRlZiBNQVJLRURf
QUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMKKyAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklU
KEJMT0NLX0RJUkVDVE9SWV9CSVRfQUNDRVNTT1JTKQorI3VuZGVmIEJMT0NLX0RJUkVDVE9SWV9C
SVRfQUNDRVNTT1JTCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9y
RWFjaEJpdFZlY3Rvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAg
ICAgewotI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUs
IGNhcGl0YWxCaXROYW1lKSBcCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0so
bG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxvd2Vy
Qml0TmFtZSk7Ci0gICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9B
TExPQ0FUT1JfQklUX0NBTExCQUNLKTsKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxM
QkFDSworICAgICAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9S
WV9CSVRfQ0FMTEJBQ0spOworI3VuZGVmIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hC
aXRWZWN0b3JXaXRoTmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMp
CiAgICAgewotI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5h
bWUsIGNhcGl0YWxCaXROYW1lKSBcCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJB
Q0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxv
d2VyQml0TmFtZSwgI2NhcGl0YWxCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FM
TE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktF
RF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCisgICAgICAgIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9S
WV9CSVQoQkxPQ0tfRElSRUNUT1JZX0JJVF9DQUxMQkFDSyk7CisjdW5kZWYgQkxPQ0tfRElSRUNU
T1JZX0JJVF9DQUxMQkFDSwogICAgIH0KICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRB
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KLSAgICBNYXJrZWRB
bGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0
QWxsb2NhdG9ySW5TdWJzcGFjZTsgfQotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRv
ckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRv
ckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQotICAgIAotICAgIHZvaWQgc2V0TmV4dEFsbG9j
YXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxv
Y2F0b3I7IH0KLSAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7
IH0KLSAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CisgICAgQmxvY2tEaXJlY3RvcnkqIG5leHREaXJlY3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3Rvcnk7IH0KKyAgICBCbG9ja0RpcmVjdG9y
eSogbmV4dERpcmVjdG9yeUluU3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3Rv
cnlJblN1YnNwYWNlOyB9CisgICAgQmxvY2tEaXJlY3RvcnkqIG5leHREaXJlY3RvcnlJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3RvcnlJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAgICAKKyAgICB2b2lkIHNldE5leHREaXJlY3RvcnkoQmxv
Y2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkgeyBtX25leHREaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0K
KyAgICB2b2lkIHNldE5leHREaXJlY3RvcnlJblN1YnNwYWNlKEJsb2NrRGlyZWN0b3J5KiBkaXJl
Y3RvcnkpIHsgbV9uZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSA9IGRpcmVjdG9yeTsgfQorICAgIHZv
aWQgc2V0TmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihCbG9ja0RpcmVjdG9y
eSogZGlyZWN0b3J5KSB7IG1fbmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9
IGRpcmVjdG9yeTsgfQogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJs
b2NrVG9TdGVhbCgpOwogICAgIApAQCAtMTgyLDEwICsxODIsMTAgQEAgcHJpdmF0ZToKICAgICAv
LyBNdXRhdG9yIHVzZXMgdGhpcyB0byBndWFyZCByZXNpemluZyB0aGUgYml0dmVjdG9ycy4gVGhv
c2UgdGhpbmdzIGluIHRoZSBHQyB0aGF0IG1heSBydW4KICAgICAvLyBjb25jdXJyZW50bHkgdG8g
dGhlIG11dGF0b3IgbXVzdCBsb2NrIHRoaXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMu
CiAgICAgTG9jayBtX2JpdHZlY3RvckxvY2s7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklU
X0RFQ0xBUkFUSU9OKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyNkZWZpbmUgQkxP
Q0tfRElSRUNUT1JZX0JJVF9ERUNMQVJBVElPTihsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1l
KSBcCiAgICAgRmFzdEJpdFZlY3RvciBtXyAjIyBsb3dlckJpdE5hbWU7Ci0gICAgRk9SX0VBQ0hf
TUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04pCi0j
dW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04KKyAgICBGT1JfRUFDSF9CTE9D
S19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9SWV9CSVRfREVDTEFSQVRJT04pCisjdW5kZWYg
QkxPQ0tfRElSRUNUT1JZX0JJVF9ERUNMQVJBVElPTgogICAgIAogICAgIC8vIEFmdGVyIHlvdSBk
byBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91
IGNsZWFyIHRoZSBiaXQgaW4gdGhlCiAgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5k
IGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgpAQCAtMTk4LDI0ICsxOTgsMjQgQEAgcHJp
dmF0ZToKIAogICAgIExvY2sgbV9sb2NrOwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAg
QWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgQ2VsbEF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOwogICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJl
IHJlZmVyZW5jZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Njk4OAogICAgIEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKICAgICBTdWJzcGFjZSog
bV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9j
YXRvciB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UgeyBudWxscHRyIH07Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgQmxvY2tEaXJlY3Rv
cnkqIG1fbmV4dERpcmVjdG9yeSB7IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9u
ZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSog
bV9uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsK
IAotaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQor
aW5saW5lIHB0cmRpZmZfdCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpCiB7Ci0g
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOwor
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1fZnJlZUxpc3QpOwog
fQogCi1pbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgp
CitpbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkKIHsK
LSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7
CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykJKGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOjIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVl
TGlzdElubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJW
TS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgp
IC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52
bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRl
U2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9saXZlLmZv
ckVhY2hTZXRCaXQoCisgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoTm90RW1w
dHlCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIG1fbWFya2luZ05vdEVtcHR5
LmZvckVhY2hTZXRCaXQoCisgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAg
ICBmdW5jdG9yKG1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3Rv
cnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxNyArMjYsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3Rv
cnkuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wg
TWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29u
c3QKK2lubGluZSBib29sIEJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZv
aWQqIHRhcmdldCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK0FMV0FZU19JTkxJTkUgdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CkBAIC00
NSw3ICs0NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGwKICAg
ICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JF
YWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNl
dEJpdCgKICAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKQEAgLTUzLDcgKzUzLDcgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIAogICAgICAgICB9KTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6Zm9yRWFjaE5vdEVt
cHR5QmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBtX21hcmtpbmdOb3RFbXB0
eS5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24g
MjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmli
dXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlv
biwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCShyZXZp
c2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTMgKzI0LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJDZWxs
QXR0cmlidXRlcy5oIgogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3ZvaWQgQ2VsbEF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQsICJ9
Iik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVz
LmgJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdG9yQXR0cmlidXRlcy5oOjIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NlbGxBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCisjaW5jbHVkZSAiSGVhcENlbGwuaCIK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVj
dCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHsKKyAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKCkgeyB9Cisg
ICAgCisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyhEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKQorICAgICAgICA6IGRlc3RydWN0aW9uKGRlc3RydWN0
aW9uKQorICAgICAgICAsIGNlbGxLaW5kKGNlbGxLaW5kKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbiB7IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gfTsKKyAgICBIZWFw
Q2VsbDo6S2luZCBjZWxsS2luZCB7IEhlYXBDZWxsOjpKU0NlbGwgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmli
dXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRy
aWJ1dGVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NlbGxBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMCArMzEsMTAgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHsKLSAgICBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKCkgeyB9CitzdHJ1Y3QgQ2VsbEF0dHJpYnV0ZXMgeworICAgIENlbGxB
dHRyaWJ1dGVzKCkgeyB9CiAgICAgCi0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyhEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKQorICAgIENlbGxBdHRy
aWJ1dGVzKERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiwgSGVhcENlbGw6OktpbmQgY2VsbEtp
bmQpCiAgICAgICAgIDogZGVzdHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24pCiAgICAgICAgICwgY2VsbEtp
bmQoY2VsbEtpbmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29t
cGxldGVTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5s
aW5lcy5oIgpAQCAtNDYsNyArNDYsNyBAQCBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJz
cGFjZSgpCiB7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCitCbG9ja0RpcmVjdG9y
eSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JG
b3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwg
bW9kZSk7CiB9CkBAIC01OSwxNCArNTksMTQgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdGUoc2l6ZV90IAogdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFs
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgdm9pZCAqcmVzdWx0OwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgIGlmIChCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpCiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgZWxzZQogICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJl
TW9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQorQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAg
c2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAg
c2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2lu
ZGV4XTsKQEAgLTc4LDM2ICs3OCwzNiBAQCBNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jCiAgICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVy
biBudWxsIGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAogICAg
IC8vIGFsbG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQs
IHRoYXQgY291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQogICAgIC8vIHN1cnByaXNlcyBhbmQgdGhl
IGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9s
ZCB0aGUgbG9jaywgdG8KLSAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9j
YXRvciBjcmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcwor
ICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgQmxvY2tEaXJlY3RvcnkgY3JlYXRpb25zIGZy
b20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKICAgICAvLyB0aGF0IGFueSAi
Zm9yRWFjaEFsbG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9y
IGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQKICAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAgICBp
ZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuZGlyZWN0b3J5TG9jaygp
KTsKKyAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXBbaW5kZXhdKQogICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwogCiAgICAgaWYgKGZhbHNl
KQogICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25h
bWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KLSAgICAgICAg
c3RkOjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xh
c3MpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdl
dCgpOwotICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3IpKTsK
LSAgICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOwotICAgIG1fc3BhY2UuYWRkTWFya2Vk
QWxsb2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tE
aXJlY3Rvcnk+IHVuaXF1ZURpcmVjdG9yeSA9CisgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Qmxv
Y2tEaXJlY3Rvcnk+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3MpOworICAgIEJsb2NrRGlyZWN0
b3J5KiBkaXJlY3RvcnkgPSB1bmlxdWVEaXJlY3RvcnkuZ2V0KCk7CisgICAgbV9kaXJlY3Rvcmll
cy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVEaXJlY3RvcnkpKTsKKyAgICBkaXJlY3RvcnktPnNldFN1
YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkQmxvY2tEaXJlY3RvcnkobG9ja2VyLCBkaXJl
Y3RvcnkpOwogICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNs
YXNzKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xh
c3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0b3I7CisgICAg
ICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gZGlyZWN0b3J5OwogICAgICAgICAK
ICAgICAgICAgaWYgKCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFs
bG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7Ci0g
ICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3Ip
OworICAgIGRpcmVjdG9yeS0+c2V0TmV4dERpcmVjdG9yeUluU3Vic3BhY2UobV9maXJzdERpcmVj
dG9yeSk7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShk
aXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9maXJzdEFsbG9j
YXRvciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9yOworICAgIG1fZmlyc3REaXJl
Y3RvcnkgPSBkaXJlY3Rvcnk7CisgICAgcmV0dXJuIGRpcmVjdG9yeTsKIH0KIAogdm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93
KAogewogICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CiAgICAg
Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCisgICAgaWYgKEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5z
dXJlQWxsb2NhdG9yKSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAg
IGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShyZXZpc2lvbiAy
MjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsMzEgKzM3LDMzIEBAIHB1YmxpYzoKICAgICAvLyBJbiBzb21lIGNv
ZGUgcGF0aHMsIHdlIG5lZWQgaXQgdG8gYmUgYSBjb21waWxlIGVycm9yIHRvIGNhbGwgdGhlIHZp
cnR1YWwgdmVyc2lvbiBvZiBvbmUgb2YKICAgICAvLyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyB3
aHkgd2UgZG8gZmluYWwgbWV0aG9kcyB0aGUgb2xkIHNjaG9vbCB3YXkuCiAgICAgCi0gICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVy
cmlkZTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90
LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5IHN1YnNwYWNlcyBz
cGVhayBvZiBCbG9ja0RpcmVjdG9yaWVzIGFzICJhbGxvY2F0b3JzIiwgYnV0IHRoYXQncyB0ZW1w
b3JhcnkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MTU1OQorICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JG
b3JNb2RlKSBvdmVycmlkZTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJy
aWRlOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXpl
X3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cCk7IH0KICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgp
IHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQmxvY2tEaXJlY3Rv
cnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVT
dGVwWzBdOyB9CiAKIHByaXZhdGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JT
bG93KHNpemVfdCk7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90
KTsKICAgICAKICAgICAvLyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJn
ZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9uLgogICAgIHZvaWQqIGFsbG9jYXRl
U2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsK
ICAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOwog
ICAgIAotICAgIHN0ZDo6YXJyYXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNp
emVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVTdGVwOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8TWFya2VkQWxsb2NhdG9yPj4gbV9hbGxvY2F0b3JzOworICAgIHN0ZDo6YXJyYXk8Qmxv
Y2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXA7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0RpcmVjdG9yeT4+IG1f
ZGlyZWN0b3JpZXM7CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZSBtb2RlKQorQUxXQVlTX0lOTElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewot
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBCbG9ja0RpcmVj
dG9yeSogcmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNs
YXNzVG9JbmRleChzaXplKV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNl
IEFsbG9jYXRvckZvck1vZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDExICsyOCwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7Ci1jbGFzcyBN
YXJrZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIAogY2xhc3MgR0NEZWZlcnJh
bENvbnRleHQgewogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwotICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRBbGxvY2F0b3I7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogcHVibGljOgog
ICAgIGlubGluZSBHQ0RlZmVycmFsQ29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVy
cmFsQ29udGV4dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUgIk1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5l
cy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAjaW5j
bHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgpAQCAtMjIwMCw3ICsyMjAwLDcgQEAgdm9p
ZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICBzaXplX3QgY3VycmVudEhlYXBT
aXplID0gMDsKIAogICAgIC8vIEZvciBtYXJrZWQgc3BhY2UsIHdlIHVzZSB0aGUgdG90YWwgbnVt
YmVyIG9mIGJ5dGVzIHZpc2l0ZWQuIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgZm9yCi0gICAgLy8g
TWFya2VkQWxsb2NhdG9yJ3MgY2FsbHMgdG8gZGlkQWxsb2NhdGUoKSwgd2hpY2ggZWZmZWN0aXZl
bHkgYWNjb3VudHMgZm9yIHRoZSB0b3RhbCBzaXplIG9mCisgICAgLy8gQmxvY2tEaXJlY3Rvcnkn
cyBjYWxscyB0byBkaWRBbGxvY2F0ZSgpLCB3aGljaCBlZmZlY3RpdmVseSBhY2NvdW50cyBmb3Ig
dGhlIHRvdGFsIHNpemUgb2YKICAgICAvLyBvYmplY3RzIGFsbG9jYXRlZCByYXRoZXIgdGhhbiBi
bG9ja3MgdXNlZC4gVGhpcyB3aWxsIHVuZGVyZXN0aW1hdGUgY2FwYWNpdHkoKSwgYW5kIGluIGNh
c2UKICAgICAvLyBvZiBmcmFnbWVudGF0aW9uLCB0aGlzIG1heSBiZSBzdWJzdGFudGlhbC4gRm9y
dHVuYXRlbHksIG1hcmtlZCBzcGFjZSByYXJlbHkgZnJhZ21lbnRzIGJlY2F1c2UKICAgICAvLyBj
ZWxscyB1c3VhbGx5IGhhdmUgYSBuYXJyb3cgcmFuZ2Ugb2Ygc2l6ZXMuIFNvLCB0aGUgdW5kZXJl
c3RpbWF0aW9uIGlzIHByb2JhYmx5IE9LLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFz
cyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKLWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2Ns
YXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CiBjbGFzcyBN
YXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OwpAQCAtMzkwLDcg
KzM5MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgUnVubmluZ1Njb3BlOwogICAgIGZyaWVuZCBjbGFz
cyBTbG90VmlzaXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBMYXJnZUFsbG9jYXRpb247
CiBjbGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFN1YnNwYWNlOwogY2xhc3MgVk07Ci1zdHJ1Y3Qg
QWxsb2NhdG9yQXR0cmlidXRlczsKK3N0cnVjdCBDZWxsQXR0cmlidXRlczsKIAogY2xhc3MgSGVh
cENlbGwgewogcHVibGljOgpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgVk0qIHZtKCkg
Y29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgY29uc3Q7Ci0gICAgQWxsb2NhdG9y
QXR0cmlidXRlcyBhbGxvY2F0b3JBdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgQ2VsbEF0dHJpYnV0
ZXMgY2VsbEF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rp
b25Nb2RlKCkgY29uc3Q7CiAgICAgS2luZCBjZWxsS2luZCgpIGNvbnN0OwogICAgIFN1YnNwYWNl
KiBzdWJzcGFjZSgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cENlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcENlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3
IEBAIEFMV0FZU19JTkxJTkUgc2l6ZV90IEhlYXBDZWxsOjpjZWxsU2l6ZSgKICAgICByZXR1cm4g
bWFya2VkQmxvY2soKS5jZWxsU2l6ZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEFsbG9jYXRvckF0
dHJpYnV0ZXMgSGVhcENlbGw6OmFsbG9jYXRvckF0dHJpYnV0ZXMoKSBjb25zdAorQUxXQVlTX0lO
TElORSBDZWxsQXR0cmlidXRlcyBIZWFwQ2VsbDo6Y2VsbEF0dHJpYnV0ZXMoKSBjb25zdAogewog
ICAgIGlmIChpc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbGFyZ2VBbGxvY2F0
aW9uKCkuYXR0cmlidXRlcygpOwpAQCAtODIsMTIgKzgyLDEyIEBAIEFMV0FZU19JTkxJTkUgQWxs
b2NhdG9yQXR0cmlidXRlcyBIZWFwQ2UKIAogQUxXQVlTX0lOTElORSBEZXN0cnVjdGlvbk1vZGUg
SGVhcENlbGw6OmRlc3RydWN0aW9uTW9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFsbG9jYXRv
ckF0dHJpYnV0ZXMoKS5kZXN0cnVjdGlvbjsKKyAgICByZXR1cm4gY2VsbEF0dHJpYnV0ZXMoKS5k
ZXN0cnVjdGlvbjsKIH0KIAogQUxXQVlTX0lOTElORSBIZWFwQ2VsbDo6S2luZCBIZWFwQ2VsbDo6
Y2VsbEtpbmQoKSBjb25zdAogewotICAgIHJldHVybiBhbGxvY2F0b3JBdHRyaWJ1dGVzKCkuY2Vs
bEtpbmQ7CisgICAgcmV0dXJuIGNlbGxBdHRyaWJ1dGVzKCkuY2VsbEtpbmQ7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgU3Vic3BhY2UqIEhlYXBDZWxsOjpzdWJzcGFjZSgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IERlZmF1bHREZXN0cm95RnVuYyB7CiAg
ICAgfQogfTsKIAotSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQorSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMg
YXR0cmlidXRlcykKICAgICA6IG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogewogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgY2xhc3MgSGVhcENlbGxUeXBlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIZWFwQ2VsbFR5cGUpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShBbGxvY2F0
b3JBdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUoQ2VsbEF0
dHJpYnV0ZXMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkhlYXBDZWxsVHlwZSgp
OwogCi0gICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAKICAgICAvLyBUaGUgcHVycG9z
ZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIg
ZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKICAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0
b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2UuCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopOwogCiBwcml2YXRlOgotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMg
bV9hdHRyaWJ1dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkK
IAogSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKICAg
ICA6IEJhc2UoaGVhcC0+dm0oKSkKLSAgICAsIG1fY3VycmVudEFsbG9jYXRvcihudWxscHRyKQor
ICAgICwgbV9jdXJyZW50RGlyZWN0b3J5KG51bGxwdHIpCiB7CiB9CiAKQEAgLTc5LDggKzc5LDgg
QEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKAogCiAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBudWxscHRyOwogICAgIAotICAgIGZvciAoOyBtX2N1cnJl
bnRBbGxvY2F0b3I7IG1fY3VycmVudEFsbG9jYXRvciA9IG1fY3VycmVudEFsbG9jYXRvci0+bmV4
dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIGJsb2NrID0gbV9jdXJyZW50QWxsb2NhdG9yLT5maW5k
QmxvY2tUb1N3ZWVwKCk7CisgICAgZm9yICg7IG1fY3VycmVudERpcmVjdG9yeTsgbV9jdXJyZW50
RGlyZWN0b3J5ID0gbV9jdXJyZW50RGlyZWN0b3J5LT5uZXh0RGlyZWN0b3J5KCkpIHsKKyAgICAg
ICAgYmxvY2sgPSBtX2N1cnJlbnREaXJlY3RvcnktPmZpbmRCbG9ja1RvU3dlZXAoKTsKICAgICAg
ICAgaWYgKGJsb2NrKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTgsMTIgKzk4LDEy
IEBAIGJvb2wgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKIHZvaWQgSW5jcmVt
ZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKCkKIHsKICAgICBzY2hlZHVsZVRpbWVyKCk7Ci0g
ICAgbV9jdXJyZW50QWxsb2NhdG9yID0gbV92bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZpcnN0QWxs
b2NhdG9yKCk7CisgICAgbV9jdXJyZW50RGlyZWN0b3J5ID0gbV92bS0+aGVhcC5vYmplY3RTcGFj
ZSgpLmZpcnN0RGlyZWN0b3J5KCk7CiB9CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdG9w
U3dlZXBpbmcoKQogewotICAgIG1fY3VycmVudEFsbG9jYXRvciA9IG51bGxwdHI7CisgICAgbV9j
dXJyZW50RGlyZWN0b3J5ID0gbnVsbHB0cjsKICAgICBpZiAobV92bSkKICAgICAgICAgY2FuY2Vs
VGltZXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFs
U3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7Ci1jbGFzcyBNYXJrZWRBbGxvY2F0
b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIAogY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDog
cHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRvU3dlZXAoTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQg
c2NoZWR1bGVUaW1lcigpOwogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogbV9jdXJyZW50QWxs
b2NhdG9yOworICAgIEJsb2NrRGlyZWN0b3J5KiBtX2N1cnJlbnREaXJlY3Rvcnk7CiAgICAgYm9v
bCBtX3Nob3VsZEZyZWVGYXN0TWFsbG9jTWVtb3J5QWZ0ZXJTd2VlcGluZyB7IGZhbHNlIH07CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkocmV2
aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIklzb0NlbGxTZXQuaCIKIAotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRC
bG9ja0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29TdWJzcGFjZSYgc3Vic3BhY2Up
CiAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQogewotICAgIHNpemVfdCBzaXplID0gc3Vic3Bh
Y2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gc3Vic3Bh
Y2UubV9kaXJlY3RvcnkubV9ibG9ja3Muc2l6ZSgpOwogICAgIG1fYmxvY2tzV2l0aEJpdHMucmVz
aXplKHNpemUpOwogICAgIG1fYml0cy5ncm93KHNpemUpOwogICAgIHN1YnNwYWNlLm1fY2VsbFNl
dHMuYXBwZW5kKHRoaXMpOwpAQCAtNTIsNyArNTIsNyBAQCBSZWZQdHI8U2hhcmVkVGFzazxNYXJr
ZWRCbG9jazo6SGFuZGxlKigpCiAgICAgcHVibGljOgogICAgICAgICBUYXNrKElzb0NlbGxTZXQm
IHNldCkKICAgICAgICAgICAgIDogbV9zZXQoc2V0KQotICAgICAgICAgICAgLCBtX2FsbG9jYXRv
cihzZXQubV9zdWJzcGFjZS5tX2FsbG9jYXRvcikKKyAgICAgICAgICAgICwgbV9kaXJlY3Rvcnko
c2V0Lm1fc3Vic3BhY2UubV9kaXJlY3RvcnkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTYxLDE4ICs2MSwxOCBAQCBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFu
ZGxlKigpCiAgICAgICAgICAgICBpZiAobV9kb25lKQogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAg
ICAgICAgICAgYXV0byBiaXRzID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkgJiBtX3Nl
dC5tX2Jsb2Nrc1dpdGhCaXRzOworICAgICAgICAgICAgYXV0byBiaXRzID0gbV9kaXJlY3Rvcnku
bV9tYXJraW5nTm90RW1wdHkgJiBtX3NldC5tX2Jsb2Nrc1dpdGhCaXRzOwogICAgICAgICAgICAg
bV9pbmRleCA9IGJpdHMuZmluZEJpdChtX2luZGV4LCB0cnVlKTsKLSAgICAgICAgICAgIGlmICht
X2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKSkgeworICAgICAgICAgICAgaWYg
KG1faW5kZXggPj0gbV9kaXJlY3RvcnkubV9ibG9ja3Muc2l6ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgbV9kb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4
KytdOworICAgICAgICAgICAgcmV0dXJuIG1fZGlyZWN0b3J5Lm1fYmxvY2tzW21faW5kZXgrK107
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSXNvQ2VsbFNldCYg
bV9zZXQ7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAgIEJs
b2NrRGlyZWN0b3J5JiBtX2RpcmVjdG9yeTsKICAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07
CiAgICAgICAgIExvY2sgbV9sb2NrOwogICAgICAgICBib29sIG1fZG9uZSB7IGZhbHNlIH07CkBA
IC04Myw3ICs4Myw3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkK
IAogTkVWRVJfSU5MSU5FIEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0Nl
bGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJsb2NrSW5kZXgpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX3N1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fZGlyZWN0b3J5Lm1fYml0dmVjdG9yTG9j
ayk7CiAgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1tibG9ja0luZGV4XTsKICAgICBhdXRv
KiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKICAgICBpZiAoIWJpdHMpIHsKQEAgLTEwNCw3ICsx
MDQsNyBAQCB2b2lkIElzb0NlbGxTZXQ6OmRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5lCiB2b2lkIElz
b0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KQogewogICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYml0
dmVjdG9yTG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5t
X2RpcmVjdG9yeS5tX2JpdHZlY3RvckxvY2spOwogICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Js
b2NrSW5kZXhdID0gZmFsc2U7CiAgICAgfQogICAgIG1fYml0c1tibG9ja0luZGV4XSA9IG51bGxw
dHI7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBJc29DZWxsU2V0Ojpzd2VlcFRvRnJlZUxpc3Qo
TWFya2VkQgogICAgICAgICB7CiAgICAgICAgICAgICAvLyBIb2xkaW5nIHRoZSBiaXR2ZWN0b3Ig
bG9jayBoYXBwZW5zIHRvIGJlIGVub3VnaCBiZWNhdXNlIHRoYXQncyB3aGF0IHdlIGFsc28gaG9s
ZCBpbgogICAgICAgICAgICAgLy8gb3RoZXIgcGxhY2VzIHdoZXJlIHdlIG1hbmlwdWxhdGUgdGhp
cyBiaXR2ZWN0b3IuCi0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3Vic3Bh
Y2UubV9hbGxvY2F0b3IubV9iaXR2ZWN0b3JMb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9zdWJzcGFjZS5tX2RpcmVjdG9yeS5tX2JpdHZlY3RvckxvY2spOwogICAg
ICAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBtX2JpdHNbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkocmV2aXNp
b24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTAgKzYzLDEwIEBAIGlubGluZSBib29sIElzb0Nl
bGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWwKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lkIElz
b0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNlLm1fYWxsb2NhdG9yOwotICAgIChh
bGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nrc1dpdGhCaXRzKS5mb3JFYWNoU2V0
Qml0KAorICAgIEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkgPSBtX3N1YnNwYWNlLm1fZGlyZWN0
b3J5OworICAgIChkaXJlY3RvcnkubV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nrc1dpdGhCaXRz
KS5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBibG9ja0luZGV4KSB7Ci0gICAg
ICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IGFsbG9jYXRvci5tX2Jsb2Nrc1ti
bG9ja0luZGV4XTsKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gZGly
ZWN0b3J5Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwogCiAgICAgICAgICAgICBhdXRvKiBiaXRzID0g
bV9iaXRzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgYmxvY2stPmZvckVhY2hNYXJr
ZWRDZWxsKApAQCAtMTE3LDEwICsxMTcsMTAgQEAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gSQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgSXNvQ2VsbFNldDo6
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNlLm1fYWxsb2NhdG9yOworICAgIEJsb2NrRGlyZWN0b3J5
JiBkaXJlY3RvcnkgPSBtX3N1YnNwYWNlLm1fZGlyZWN0b3J5OwogICAgIG1fYmxvY2tzV2l0aEJp
dHMuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZdIChzaXplX3QgYmxvY2tJbmRleCkgewotICAg
ICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBhbGxvY2F0b3IubV9ibG9ja3Nb
YmxvY2tJbmRleF07CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IGRp
cmVjdG9yeS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIG9wdGltaXplIHRoaXMgYnkgY2hlY2tpbmcgb3VyIGJpdHMgYmVmb3JlIHF1ZXJ5aW5n
IGlzTGl2ZS4KICAgICAgICAgICAgIC8vIE9PUFMhIChuZWVkIGJ1ZyBVUkwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjY3ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsMzAgKzI3LDMwIEBACiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKIAogI2luY2x1
ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCiBJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
JiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCiAgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2FsbG9jYXRv
cigmaGVhcCwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4o
c2l6ZSkpCisgICAgLCBtX2RpcmVjdG9yeSgmaGVhcCwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkpCiAgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQog
ewogICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuZ2V0KCkpOwogCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRv
ckxvY2soKSk7Ci0gICAgbV9hbGxvY2F0b3Iuc2V0U3Vic3BhY2UodGhpcyk7Ci0gICAgbV9zcGFj
ZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCAmbV9hbGxvY2F0b3IpOwotICAgIG1fYWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3IoJm1fYWxsb2NhdG9yKTsKLSAgICBt
X2ZpcnN0QWxsb2NhdG9yID0gJm1fYWxsb2NhdG9yOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOworICAgIG1fZGlyZWN0b3J5LnNldFN1YnNwYWNl
KHRoaXMpOworICAgIG1fc3BhY2UuYWRkQmxvY2tEaXJlY3RvcnkobG9ja2VyLCAmbV9kaXJlY3Rv
cnkpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJEaXJlY3RvcnkoJm1f
ZGlyZWN0b3J5KTsKKyAgICBtX2ZpcnN0RGlyZWN0b3J5ID0gJm1fZGlyZWN0b3J5OwogfQogCiBJ
c29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKIHsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBJc29T
dWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUp
CitCbG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIG1vZGUpOwogfQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkKiBJc29TdWJzcGFjZTo6
YWxsb2NhdGUoc2l6ZV90IHNpemUsCiB2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2l6
ZSA9PSB0aGlzLT5zaXplKCkpOwotICAgIHZvaWQqIHJlc3VsdCA9IG1fYWxsb2NhdG9yLmFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHJlc3VsdCA9IG1f
ZGlyZWN0b3J5LmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3Rv
cnkuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRM
aXN0V2l0aFRhaWwuaD4KIApAQCAtNDEsOCArNDEsOCBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRv
ckZvck1vZGUpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxv
Y2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSk7CiAKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KSBvdmVycmlkZTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CkBAIC01NSwxNSArNTUsMTUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5k
bGUqKSBvdmVycmlkZTsKICAgICAKICAgICBzaXplX3QgbV9zaXplOwotICAgIE1hcmtlZEFsbG9j
YXRvciBtX2FsbG9jYXRvcjsKKyAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKLWlubGluZSBNYXJr
ZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEJsb2NrRGlyZWN0b3J5KiBJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgcmV0dXJu
ICZtX2FsbG9jYXRvcjsKKyAgICByZXR1cm4gJm1fZGlyZWN0b3J5OwogfQogCiAjZGVmaW5lIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0
eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlwZSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNp
b24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhYm92ZUxvd2VyQm91bmQocmF3UHRyKSAmJiBiZWxvd1VwcGVyQm91bmQocmF3UHRyKTsK
ICAgICB9CiAgICAgCi0gICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVz
JiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAgICAgCiAgICAg
RGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbikgeyByZXR1cm4gRGVwZW5kZW5jeSgp
OyB9CiAgICAgCkBAIC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNOZXds
eUFsbG9jYXRlZDsKICAgICBib29sIG1faGFzVmFsaWRDZWxsOwogICAgIEF0b21pYzxib29sPiBt
X2lzTWFya2VkOwotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIENl
bGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKICAg
ICBXZWFrU2V0IG1fd2Vha1NldDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw1MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3Iu
aCIKLQotI2luY2x1ZGUgIkFsbG9jYXRpbmdTY29wZS5oIgotI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9y
SW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1
cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgY29uc3RleHByIGJvb2wgdHJhZGVEZXN0
cnVjdG9yQmxvY2tzID0gdHJ1ZTsKLQotTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3Io
SGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkK
LSAgICAsIG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQotICAg
ICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQotICAgICwgbV9o
ZWFwKGhlYXApCi17Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJz
cGFjZSogc3Vic3BhY2UpCi17Ci0gICAgbV9hdHRyaWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0
ZXMoKTsKLSAgICBtX3N1YnNwYWNlID0gc3Vic3BhY2U7Ci19Ci0KLWJvb2wgTWFya2VkQWxsb2Nh
dG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKLXsKLSAgICB1bnNpZ25lZCBpdGVyc1Np
bmNlTGFzdFRpbWVDaGVjayA9IDA7Ci0gICAgZm9yIChhdXRvKiBibG9jayA6IG1fYmxvY2tzKSB7
Ci0gICAgICAgIGlmIChibG9jaykKLSAgICAgICAgICAgIGhvbGRMb2NrKGJsb2NrLT5ibG9jaygp
LmxvY2soKSk7Ci0gICAgICAgICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7Ci0gICAgICAgIGlm
IChpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA+PSBIZWFwOjpzX3RpbWVDaGVja1Jlc29sdXRpb24p
IHsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPiBkZWFkbGluZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0
VGltZUNoZWNrID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6ZmluZEVtcHR5QmxvY2tUb1N0
ZWFsKCkKLXsKLSAgICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJz
b3IsIHRydWUpOwotICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fZW1wdHlDdXJzb3Jd
OwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKLXsKLSAg
ICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1l
RnJlZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50
QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
V2l0aG91dENvbGxlY3RpbmcoKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBB
U1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7
OykgewotICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAg
ICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAg
aWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vy
c29yXSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAo
T3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAm
JiAodHJhZGVEZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAg
ICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0
eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMg
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAg
ICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1h
eSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVt
cHR5IHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21B
bGxvY2F0b3IoKTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRl
SW4oYmxvY2spOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7
Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBm
dWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8gdGhh
dCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0g
ICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKLSAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwot
ICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAg
ICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IGJsb2NrKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAgICBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3Qu
YWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9KTsKLSAgICBzZXRJc0VkZW4oTm9Mb2NraW5n
TmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7Ci0gICAgbWFya2VkU3BhY2UoKS5kaWRB
bGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZO
ZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBpZiAoIU9w
dGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKLSAgICBpZiAoIWFsbG9jYXRp
b25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4
dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRo
QWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwotfQotCi12
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewot
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NF
UlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBk
b1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQo
IW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZSht
X2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3Qo
KTsKLSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAg
ICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAg
ICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFu
ZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAv
LyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxi
YWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlB
bGxvY2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1v
ZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9j
YXRlSW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKLXsKLSAgICByZXR1cm4gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJs
b2NrKSk7Ci19Ci0KLXNpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNp
emVfdCBieXRlcykKLXsKLSAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZTsKLSAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNpemUo
KSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVz
KTsKLSAgICBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6
OnBhZ2VTaXplKCksIG1pbkFsbG9jYXRpb25TaXplKTsKLSAgICByZXR1cm4gc3RkOjptYXgobWlu
QmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7Ci19Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jaygpCi17Ci0gICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGhhbmRsZSA9IE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUoKm1faGVhcCwgc3Vic3BhY2Uo
KS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgbWFya2VkU3BhY2UoKS5kaWRBZGRCbG9jayhoYW5k
bGUpOwotICAgIAotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9y
OjphZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsKLSAgICBzaXplX3QgaW5k
ZXg7Ci0gICAgaWYgKG1fZnJlZUJsb2NrSW5kaWNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW5k
ZXggPSBtX2Jsb2Nrcy5zaXplKCk7Ci0KLSAgICAgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gbV9i
bG9ja3MuY2FwYWNpdHkoKTsKLSAgICAgICAgbV9ibG9ja3MuYXBwZW5kKGJsb2NrKTsKLSAgICAg
ICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkgIT0gb2xkQ2FwYWNpdHkpIHsKLSAgICAgICAgICAg
IGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgICAgICAgICAgTm9Mb2NraW5nTmVjZXNzYXJ5LAot
ICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQodmVjdG9yLCB2ZWN0b3IubnVtQml0cygpID09IG9sZENh
cGFjaXR5KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG1fYmxvY2tzLmNhcGFjaXR5KCkgPiBvbGRDYXBhY2l0eSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYml0dmVjdG9yTG9jayk7Ci0gICAgICAg
ICAgICBzdWJzcGFjZSgpLT5kaWRSZXNpemVCaXRzKG1fYmxvY2tzLmNhcGFjaXR5KCkpOwotICAg
ICAgICAgICAgZm9yRWFjaEJpdFZlY3RvcigKLSAgICAgICAgICAgICAgICBsb2NrZXIsCi0gICAg
ICAgICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmVjdG9yLnJlc2l6ZShtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGluZGV4ID0gbV9mcmVlQmxv
Y2tJbmRpY2VzLnRha2VMYXN0KCk7Ci0gICAgICAgIEFTU0VSVCghbV9ibG9ja3NbaW5kZXhdKTsK
LSAgICAgICAgbV9ibG9ja3NbaW5kZXhdID0gYmxvY2s7Ci0gICAgfQotICAgIAotICAgIGZvckVh
Y2hCaXRWZWN0b3IoCi0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKLSAgICAgICAgWyZdIChG
YXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodmVjdG9y
LCAhdmVjdG9yW2luZGV4XSk7Ci0gICAgICAgIH0pOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgcG9p
bnQgYXQgd2hpY2ggdGhlIGJsb2NrIGxlYXJucyBvZiBpdHMgY2VsbFNpemUoKSBhbmQgYXR0cmli
dXRlcygpLgotICAgIGJsb2NrLT5kaWRBZGRUb0FsbG9jYXRvcih0aGlzLCBpbmRleCk7Ci0gICAg
Ci0gICAgc2V0SXNMaXZlKE5vTG9ja2luZ05lY2Vzc2FyeSwgaW5kZXgsIHRydWUpOwotICAgIHNl
dElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBpbmRleCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsK
LSAgICBBU1NFUlQoYmxvY2stPmFsbG9jYXRvcigpID09IHRoaXMpOwotICAgIEFTU0VSVChtX2Js
b2Nrc1tibG9jay0+aW5kZXgoKV0gPT0gYmxvY2spOwotICAgIAotICAgIHN1YnNwYWNlKCktPmRp
ZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsKLSAgICAKLSAgICBtX2Jsb2Nrc1tibG9jay0+
aW5kZXgoKV0gPSBudWxscHRyOwotICAgIG1fZnJlZUJsb2NrSW5kaWNlcy5hcHBlbmQoYmxvY2st
PmluZGV4KCkpOwotICAgIAotICAgIGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgIGhvbGRMb2Nr
KG1fYml0dmVjdG9yTG9jayksCi0gICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
Ci0gICAgICAgICAgICB2ZWN0b3JbYmxvY2stPmluZGV4KCldID0gZmFsc2U7Ci0gICAgICAgIH0p
OwotICAgIAotICAgIGJsb2NrLT5kaWRSZW1vdmVGcm9tQWxsb2NhdG9yKCk7Ci19Ci0KLXZvaWQg
TWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCi17Ci0gICAgaWYgKGZhbHNlKQotICAg
ICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFs
bG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKLSAgICBpZiAo
IW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25X
aWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRC
bG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sg
PSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlz
dC5jbGVhcigpOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRp
b24oKQotewotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRC
bG9jayA9IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotCi0gICAgbV9hbGxvY2F0
aW9uQ3Vyc29yID0gMDsKLSAgICBtX2VtcHR5Q3Vyc29yID0gMDsKLSAgICBtX3Vuc3dlcHRDdXJz
b3IgPSAwOwotICAgIAotICAgIG1fZWRlbi5jbGVhckFsbCgpOwotCi0gICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnVzZUltbW9ydGFsT2JqZWN0cygpKSkgewotICAgICAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIHdvcmsgYWdhaW4uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjIyOTYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpCi17Ci0gICAgZm9yRWFjaEJsb2NrKAotICAgICAgICBbJl0gKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrKSB7Ci0gICAgICAgICAgICBibG9jay0+bGFzdENoYW5jZVRvRmluYWxpemUoKTsK
LSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5n
KCkKLXsKLSAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBt
X2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwotICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmJlZ2luTWFya2luZ0ZvckZ1
bGxDb2xsZWN0aW9uKCkKLXsKLSAgICAvLyBNYXJrIGJpdHMgYXJlIHN0aWNreSBhbmQgc28gaXMg
b3VyIHN1bW1hcnkgb2YgbWFyayBiaXRzLiBXZSBvbmx5IGNsZWFyIHRoZXNlIGR1cmluZyBmdWxs
Ci0gICAgLy8gY29sbGVjdGlvbnMsIHNvIGlmIHlvdSBzdXJ2aXZlZCB0aGUgbGFzdCBjb2xsZWN0
aW9uIHlvdSB3aWxsIHN1cnZpdmUgdGhlIG5leHQgb25lIHNvIGxvbmcKLSAgICAvLyBhcyB0aGUg
bmV4dCBvbmUgaXMgZWRlbi4KLSAgICBtX21hcmtpbmdOb3RFbXB0eS5jbGVhckFsbCgpOwotICAg
IG1fbWFya2luZ1JldGlyZWQuY2xlYXJBbGwoKTsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmVuZE1hcmtpbmcoKQotewotICAgIG1fYWxsb2NhdGVkLmNsZWFyQWxsKCk7Ci0gICAgCi0gICAg
Ly8gSXQncyBzdXJwcmlzaW5nIGFuZCBmcnVzdHJhdGluZyB0byBjb21wcmVoZW5kLCBidXQgdGhl
IGVuZC1vZi1tYXJraW5nIGZsaXAgZG9lcyBub3QgbmVlZCB0bwotICAgIC8vIGtub3cgd2hhdCBr
aW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQga25vd2xlZGdlIGlzIGFscmVhZHkgZW5jb2Rl
ZCBpbiB0aGUgbV9tYXJraW5nWFlaCi0gICAgLy8gdmVjdG9ycy4KLSAgICAKLSAgICBpZiAoIXRy
YWRlRGVzdHJ1Y3RvckJsb2NrcyAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5
ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9l
bXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtpbmdOb3RFbXB0eTsKLSAgICAgICAgbV9jYW5BbGxvY2F0
ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgbV9tYXJraW5nTm90RW1wdHkgJiB+bV9tYXJraW5nUmV0
aXJlZDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24oKSkgewotICAgICAg
ICAvLyBUaGVyZSBhcmUgc29tZSBibG9ja3MgdGhhdCB3ZSBkaWRuJ3QgYWxsb2NhdGUgb3V0IG9m
IGluIHRoZSBsYXN0IGN5Y2xlLCBidXQgd2Ugc3dlcHQgdGhlbS4gVGhpcwotICAgICAgICAvLyB3
aWxsIGZvcmdldCB0aGF0IHdlIGRpZCB0aGF0IGFuZCB3ZSB3aWxsIGVuZCB1cCBzd2VlcGluZyB0
aGVtIGFnYWluIGFuZCBhdHRlbXB0aW5nIHRvIGNhbGwgdGhlaXIKLSAgICAgICAgLy8gZGVzdHJ1
Y3RvcnMgYWdhaW4uIFRoYXQncyBmaW5lIGJlY2F1c2Ugb2YgemFwcGluZy4gVGhlIG9ubHkgdGlt
ZSB3aGVuIHdlIGNhbm5vdCBmb3JnZXQgaXMgd2hlbgotICAgICAgICAvLyB3ZSBqdXN0IGFsbG9j
YXRlIGEgYmxvY2sgb3Igd2hlbiB3ZSBtb3ZlIGEgYmxvY2sgZnJvbSBvbmUgc2l6ZSBjbGFzcyB0
byBhbm90aGVyLiBUaGF0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGFwcGVuIGhlcmUuCi0gICAgICAg
IG1fZGVzdHJ1Y3RpYmxlID0gbV9saXZlOwotICAgIH0KLSAgICAKLSAgICBpZiAoZmFsc2UpIHsK
LSAgICAgICAgZGF0YUxvZygiQml0cyBmb3IgIiwgbV9jZWxsU2l6ZSwgIiwgIiwgbV9hdHRyaWJ1
dGVzLCAiIGFmdGVyIGVuZE1hcmtpbmc6XG4iKTsKLSAgICAgICAgZHVtcEJpdHMoV1RGOjpkYXRh
RmlsZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzbmFwc2hvdFVuc3dl
cHRGb3JFZGVuQ29sbGVjdGlvbigpCi17Ci0gICAgbV91bnN3ZXB0IHw9IG1fZWRlbjsKLX0KLQot
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKCkK
LXsKLSAgICBtX3Vuc3dlcHQgPSBtX2xpdmU7Ci19Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1h
cmtlZEFsbG9jYXRvcjo6ZmluZEJsb2NrVG9Td2VlcCgpCi17Ci0gICAgbV91bnN3ZXB0Q3Vyc29y
ID0gbV91bnN3ZXB0LmZpbmRCaXQobV91bnN3ZXB0Q3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV91
bnN3ZXB0Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fdW5zd2VwdEN1cnNvcl07Ci19Ci0KLXZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpzd2VlcCgpCi17Ci0gICAgbV91bnN3ZXB0LmZvckVhY2hTZXRCaXQoCi0gICAg
ICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jayA9IG1fYmxvY2tzW2luZGV4XTsKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxs
cHRyKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzaHJpbmsoKQot
ewotICAgIChtX2VtcHR5ICYgfm1fZGVzdHJ1Y3RpYmxlKS5mb3JFYWNoU2V0Qml0KAotICAgICAg
ICBbJl0gKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgbWFya2VkU3BhY2UoKS5mcmVlQmxv
Y2sobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2Nh
dG9yOjphc3NlcnROb1Vuc3dlcHQoKQotewotICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV91bnN3ZXB0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGRhdGFMb2coIkFzc2VydGlvbiBmYWlsZWQ6IHVuc3dlcHQgbm90
IGVtcHR5IGluICIsICp0aGlzLCAiLlxuIik7Ci0gICAgZHVtcEJpdHMoKTsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKLXsK
LSAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRv
cikKLSAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJy
aWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2RvbmUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHku
ZmluZEJpdChtX2luZGV4LCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxs
b2NhdG9yLm1fYmxvY2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2Nh
dG9yOwotICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKLSAgICAgICAgTG9jayBtX2xvY2s7
Ci0gICAgICAgIGJvb2wgbV9kb25lIHsgZmFsc2UgfTsKLSAgICB9OwotICAgIAotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludChSYXdQb2ludGVy
KHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1dGVzKTsKLX0KLQotdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmR1bXBCaXRzKFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgdW5zaWdu
ZWQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKAotICAg
ICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCi0gICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYsIGNv
bnN0IGNoYXIqIG5hbWUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihu
YW1lKTsKLSAgICAgICAgICAgIG1heE5hbWVMZW5ndGggPSBzdGQ6Om1heChtYXhOYW1lTGVuZ3Ro
LCBsZW5ndGgpOwotICAgICAgICB9KTsKLSAgICAKLSAgICBmb3JFYWNoQml0VmVjdG9yV2l0aE5h
bWUoCi0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVj
dG9yJiB2ZWN0b3IsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIG5hbWUsICI6ICIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF4TmFt
ZUxlbmd0aCAtIHN0cmxlbihuYW1lKTsgaS0tOykKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAiKTsKLSAgICAgICAgICAgIG91dC5wcmludCh2ZWN0b3IsICJcbiIpOwotICAgICAgICB9KTsK
LX0KLQotTWFya2VkU3BhY2UmIE1hcmtlZEFsbG9jYXRvcjo6bWFya2VkU3BhY2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgotI2luY2x1ZGUgIkFsbG9jYXRvckF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7Ci1jbGFzcyBI
ZWFwOwotY2xhc3MgSXNvQ2VsbFNldDsKLWNsYXNzIE1hcmtlZFNwYWNlOwotY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwotCi0jZGVmaW5lIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklU
KG1hY3JvKSBcCi0gICAgbWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRp
Y2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wKLSAgICBtYWNybyhlbXB0eSwgRW1wdHkp
IC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbm8gbGl2ZSBvYmplY3RzLiAqLyBc
Ci0gICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0ZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2Nr
cyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0cy4gKi9cCi0gICAgbWFjcm8oY2FuQWxsb2Nh
dGVCdXROb3RFbXB0eSwgQ2FuQWxsb2NhdGVCdXROb3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwg
YmxvY2tzIGFyZSBuZWl0aGVyIGVtcHR5IG5vciByZXRpcmVkIChpLmUuIGFyZSBtb3JlIHRoYW4g
bWluTWFya2VkQmxvY2tVdGlsaXphdGlvbiBmdWxsKS4gKi8gXAotICAgIG1hY3JvKGRlc3RydWN0
aWJsZSwgRGVzdHJ1Y3RpYmxlKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBtYXkgaGF2
ZSBkZXN0cnVjdG9ycyB0byBydW4uICovXAotICAgIG1hY3JvKGVkZW4sIEVkZW4pIC8qIFRoZSBz
ZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbmV3IG9iamVjdHMgc2luY2UgdGhlIGxhc3QgR0Mu
ICovXAotICAgIG1hY3JvKHVuc3dlcHQsIFVuc3dlcHQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2Nr
cyB0aGF0IGNvdWxkIGJlIHN3ZXB0IGJ5IHRoZSBpbmNyZW1lbnRhbCBzd2VlcGVyLiAqL1wKLSAg
ICBcCi0gICAgLyogVGhlc2UgYXJlIGNvbXB1dGVkIGR1cmluZyBtYXJraW5nLiAqL1wKLSAgICBt
YWNybyhtYXJraW5nTm90RW1wdHksIE1hcmtpbmdOb3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwg
YmxvY2tzIHRoYXQgYXJlIG5vdCBlbXB0eS4gKi8gXAotICAgIG1hY3JvKG1hcmtpbmdSZXRpcmVk
LCBNYXJraW5nUmV0aXJlZCkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgYXJlIHJldGly
ZWQuICovCi0KLS8vIEZJWE1FOiBXZSBkZWZpbmVkIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYW5k
IGVtcHR5IHRvIGJlIGV4Y2x1c2l2ZToKLS8vCi0vLyAgICAgY2FuQWxsb2NhdGVCdXROb3RFbXB0
eSAmIGVtcHR5ID09IDAKLS8vCi0vLyBJbnN0ZWFkIG9mIGNhbGxpbmcgaXQgY2FuQWxsb2NhdGUg
YW5kIG1ha2luZyBpdCBpbmNsdXNpdmU6Ci0vLwotLy8gICAgIGNhbkFsbG9jYXRlICYgZW1wdHkg
PT0gZW1wdHkKLS8vCi0vLyBUaGUgbGF0dGVyIGlzIHByb2JhYmx5IGJldHRlci4gSSdsbCBsZWF2
ZSBpdCB0byBhIGZ1dHVyZSBidWcgdG8gZml4IHRoYXQsIHNpbmNlIGJyZWF0aGluZyBvbgotLy8g
dGhpcyBjb2RlIGxlYWRzIHRvIHJlZ3Jlc3Npb25zIGZvciBkYXlzLCBhbmQgaXQncyBub3QgY2xl
YXIgdGhhdCBtYWtpbmcgdGhpcyBjaGFuZ2Ugd291bGQKLS8vIGltcHJvdmUgcGVyZiBzaW5jZSBp
dCB3b3VsZCBub3QgY2hhbmdlIHRoZSBjb2xsZWN0b3IncyBiZWhhdmlvciwgYW5kIGVpdGhlciB3
YXkgdGhlIGFsbG9jYXRvcgotLy8gaGFzIHRvIGxvb2sgYXQgYm90aCBiaXR2ZWN0b3JzLgotLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjEyMQotCi1jbGFzcyBN
YXJrZWRBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEFsbG9jYXRv
cik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotcHVibGljOgotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGcmVlTGlzdCgpOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6
ZSgpOwotCi0gICAgTWFya2VkQWxsb2NhdG9yKEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOwotICAg
IHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKLSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwotICAgIHZvaWQgc3RvcEFs
bG9jYXRpbmcoKTsKLSAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKLSAgICB2b2lkIGJlZ2lu
TWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7Ci0gICAgdm9pZCBlbmRNYXJraW5nKCk7Ci0gICAg
dm9pZCBzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpOwotICAgIHZvaWQgc25hcHNo
b3RVbnN3ZXB0Rm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICB2b2lkIHN3ZWVwKCk7Ci0gICAgdm9p
ZCBzaHJpbmsoKTsKLSAgICB2b2lkIGFzc2VydE5vVW5zd2VwdCgpOwotICAgIHNpemVfdCBjZWxs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KLSAgICBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0g
ICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRl
c3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KLSAgICBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KLSAg
ICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5j
ZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKTsKLSAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9Ci0K
LSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1
bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RF
bXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICAKLSAgICBSZWZQdHI8U2hhcmVkVGFzazxN
YXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7Ci0g
ICAgCi0gICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCBy
ZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0KLSAgICBib29sIGlzUGFnZWRPdXQo
ZG91YmxlIGRlYWRsaW5lKTsKLSAgICAKLSAgICBzdGF0aWMgc2l6ZV90IGJsb2NrU2l6ZUZvckJ5
dGVzKHNpemVfdCk7Ci0gICAgCi0gICAgTG9jayYgYml0dmVjdG9yTG9jaygpIHsgcmV0dXJuIG1f
Yml0dmVjdG9yTG9jazsgfQotICAgCi0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VT
U09SUyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSAgICAgXAotICAgIGJvb2wgaXMgIyMg
Y2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fICMjIGxvd2VyQml0TmFtZVtpbmRleF07IH0gXAotICAgIGJvb2wgaXMgIyMg
Y2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spIGNvbnN0IHsgcmV0dXJuIGlzICMjIGNhcGl0YWxCaXROYW1lKGxvY2tl
ciwgYmxvY2stPmluZGV4KCkpOyB9IFwKLSAgICB2b2lkIHNldElzICMjIGNhcGl0YWxCaXROYW1l
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90IGluZGV4LCBib29sIHZhbHVlKSB7IG1fICMj
IGxvd2VyQml0TmFtZVtpbmRleF0gPSB2YWx1ZTsgfSBcCi0gICAgdm9pZCBzZXRJcyAjIyBjYXBp
dGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jaywgYm9vbCB2YWx1ZSkgeyBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIs
IGJsb2NrLT5pbmRleCgpLCB2YWx1ZSk7IH0KLSAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9S
X0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMpCi0jdW5kZWYgTUFSS0VEX0FMTE9D
QVRPUl9CSVRfQUNDRVNTT1JTCi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZv
aWQgZm9yRWFjaEJpdFZlY3Rvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1
bmMpCi0gICAgewotI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJp
dE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCi0gICAgICAgIGZ1bmMobV8gIyMgbG93ZXJCaXROYW1l
KTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRP
Ul9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCi0g
ICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
Qml0VmVjdG9yV2l0aE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBjb25zdCBGdW5jJiBmdW5j
KQotICAgIHsKLSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sobG93ZXJCaXRO
YW1lLCBjYXBpdGFsQml0TmFtZSkgXAotICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSwg
I2NhcGl0YWxCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQo
TUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1Jf
QklUX0NBTExCQUNLCi0gICAgfQotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQotICAgIE1hcmtlZEFsbG9j
YXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxv
Y2F0b3JJblN1YnNwYWNlOyB9Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9Ci0gICAgCi0gICAgdm9pZCBzZXROZXh0QWxsb2NhdG9y
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvciA9IGFsbG9jYXRv
cjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSA9IGFsbG9jYXRvcjsgfQot
ICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7IH0KLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5k
RW1wdHlCbG9ja1RvU3RlYWwoKTsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5k
QmxvY2tUb1N3ZWVwKCk7Ci0gICAgCi0gICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWJzcGFjZTsgfQotICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0
OwotICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJlZUxpc3Q7IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAg
ICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgCi1w
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwotICAgIGZyaWVuZCBjbGFzcyBN
YXJrZWRCbG9jazsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNs
b3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRl
eHQqKTsKLSAgICAKLSAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwotICAgIAotICAgIFZlY3RvcjxN
YXJrZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX2Zy
ZWVCbG9ja0luZGljZXM7Ci0KLSAgICAvLyBNdXRhdG9yIHVzZXMgdGhpcyB0byBndWFyZCByZXNp
emluZyB0aGUgYml0dmVjdG9ycy4gVGhvc2UgdGhpbmdzIGluIHRoZSBHQyB0aGF0IG1heSBydW4K
LSAgICAvLyBjb25jdXJyZW50bHkgdG8gdGhlIG11dGF0b3IgbXVzdCBsb2NrIHRoaXMgd2hlbiBh
Y2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMuCi0gICAgTG9jayBtX2JpdHZlY3RvckxvY2s7Ci0jZGVm
aW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xBUkFUSU9OKGxvd2VyQml0TmFtZSwgY2FwaXRh
bEJpdE5hbWUpIFwKLSAgICBGYXN0Qml0VmVjdG9yIG1fICMjIGxvd2VyQml0TmFtZTsKLSAgICBG
T1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJB
VElPTikKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTgotICAgIAotICAg
IC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhl
c2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCi0gICAgLy8gY29ycmVzcG9uZGlu
ZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgotICAgIHNpemVf
dCBtX2FsbG9jYXRpb25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0
aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBhbGxvY2F0aW9uLgotICAgIHNpemVfdCBtX2VtcHR5Q3Vy
c29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0
ZSBmb3IgZW1wdHkgYWxsb2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgotICAg
IHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9j
ayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRhbCBzd2VlcGluZy4KLSAgICAKLSAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jazsKLSAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jazsKLQotICAgIExvY2sgbV9sb2NrOwotICAgIHVuc2ln
bmVkIG1fY2VsbFNpemU7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0g
ICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0g
ICAgSGVhcCogbV9oZWFwIHsgbnVsbHB0ciB9OwotICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsg
bnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0
ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51
bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKLX07Ci0KLWlubGluZSBwdHJkaWZmX3QgTWFya2Vk
QWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1hcmtlZEFsbG9jYXRvciwgbV9mcmVlTGlzdCk7Ci19Ci0KLWlubGluZSBwdHJkaWZmX3Qg
TWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKQEAgLTEs
NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgotI2luY2x1ZGUg
Ik1hcmtlZEFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlZNLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1pbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9p
ZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdp
c2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBtX2Zy
ZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAg
ICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoQmxvY2soY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKLXsKLSAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKLSAgICAgICAgWyZd
IChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhdKTsK
LSAgICAgICAgfSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCi17Ci0gICAgbV9tYXJraW5nTm90RW1wdHkuZm9yRWFjaFNldEJpdCgKLSAgICAgICAg
WyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhd
KTsKLSAgICAgICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
TWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5l
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2Ft
cGxlci5oIgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKQEAgLTc5LDcgKzc5LDcgQEAgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6fkhhbmRsZSgpCiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkp
CiAgICAgICAgICAgICBkYXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAi
XG4iKTsKICAgICB9Ci0gICAgcmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAgIHJlbW92ZUZyb21E
aXJlY3RvcnkoKTsKICAgICBtX2Jsb2NrLT5+TWFya2VkQmxvY2soKTsKICAgICBtX2FsaWduZWRN
ZW1vcnlBbGxvY2F0b3ItPmZyZWVBbGlnbmVkTWVtb3J5KG1fYmxvY2spOwogICAgIGhlYXAuZGlk
RnJlZUJsb2NrKGJsb2NrU2l6ZSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjp1bnN3ZWVwV2l0aE5vTgogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNl
dElzRnJlZUxpc3RlZCgpCiB7Ci0gICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkoTm9Mb2NraW5n
TmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9M
b2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0cnVl
OwogfQogCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9w
QWxsb2NhdGluZwogICAgIAogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2lu
dGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyFcbiIpOwot
ICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwg
dGhpcykpOworICAgIEFTU0VSVCghZGlyZWN0b3J5KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcykpOwogCiAgICAgaWYgKCFpc0ZyZWVMaXN0ZWQoKSkgewogICAgICAgICBp
ZiAoZmFsc2UpCkBAIC0xNTMsOCArMTUzLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0Zp
bmFsaXplKCkKIHsKLSAgICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB0aGlzLCBmYWxzZSk7Ci0gICAgYWxsb2NhdG9yKCktPnNldElzRGVzdHJ1Y3RpYmxl
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgZGlyZWN0b3J5KCktPnNldElz
QWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIGRpcmVjdG9y
eSgpLT5zZXRJc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwog
ICAgIG1fYmxvY2stPm1fbWFya3MuY2xlYXJBbGwoKTsKICAgICBtX2Jsb2NrLT5jbGVhckhhc0Fu
eU1hcmtlZCgpOwogICAgIG1fYmxvY2stPm1fbWFya2luZ1ZlcnNpb24gPSBoZWFwKCktPm9iamVj
dFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpCiAgICAgICAgIAogICAgICAgICBpZiAoZmFs
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKLSAgICAgICAgQVNTRVJUKCFhbGxvY2F0
b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgICAgIEFT
U0VSVCghZGlyZWN0b3J5KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykp
OwogICAgICAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICghaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkgewpAQCAtMjA1LDkgKzIwNSw5IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUo
bWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBoYW5kbGUoKS5hbGxvY2F0b3IoKTsKKyAgICBCbG9ja0RpcmVjdG9y
eSogZGlyZWN0b3J5ID0gaGFuZGxlKCkuZGlyZWN0b3J5KCk7CiAKLSAgICBpZiAoaGFuZGxlKCku
YWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9j
aygpKSwgJmhhbmRsZSgpKQorICAgIGlmIChoYW5kbGUoKS5kaXJlY3RvcnkoKS0+aXNBbGxvY2F0
ZWQoaG9sZExvY2soZGlyZWN0b3J5LT5iaXR2ZWN0b3JMb2NrKCkpLCAmaGFuZGxlKCkpCiAgICAg
ICAgIHx8ICFtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikp
IHsKICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBDbGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsK
QEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVh
cFZlCiAgICAgbV9tYXJraW5nVmVyc2lvbiA9IG1hcmtpbmdWZXJzaW9uOwogICAgIAogICAgIC8v
IFRoaXMgbWVhbnMgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gbWFyayBhbnkgb2JqZWN0IGluIHRo
aXMgYmxvY2suCi0gICAgYWxsb2NhdG9yLT5zZXRJc01hcmtpbmdOb3RFbXB0eShob2xkTG9jayhh
bGxvY2F0b3ItPmJpdHZlY3RvckxvY2soKSksICZoYW5kbGUoKSwgdHJ1ZSk7CisgICAgZGlyZWN0
b3J5LT5zZXRJc01hcmtpbmdOb3RFbXB0eShob2xkTG9jayhkaXJlY3RvcnktPmJpdHZlY3Rvckxv
Y2soKSksICZoYW5kbGUoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
cmVzZXRBbGxvY2F0ZWQoKQpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6ZGlkQ29uc3VtZUZyZWUKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAgICBBU1NF
UlQoaXNGcmVlTGlzdGVkKCkpOwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7Ci0gICAgYWxs
b2NhdG9yKCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7
CisgICAgZGlyZWN0b3J5KCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cywgdHJ1ZSk7CiB9CiAKIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKQEAgLTMwOCwz
NCArMzA4LDM0IEBAIHZvaWQgTWFya2VkQmxvY2s6OmNsZWFySGFzQW55TWFya2VkKCkKIAogdm9p
ZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZFNsb3coKQogewotICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gaGFuZGxlKCkuYWxsb2NhdG9yKCk7Ci0gICAgYWxsb2NhdG9yLT5zZXRJc01h
cmtpbmdSZXRpcmVkKGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRs
ZSgpLCB0cnVlKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5ID0gaGFuZGxlKCkuZGly
ZWN0b3J5KCk7CisgICAgZGlyZWN0b3J5LT5zZXRJc01hcmtpbmdSZXRpcmVkKGhvbGRMb2NrKGRp
cmVjdG9yeS0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpLCB0cnVlKTsKIH0KIAotdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpyZW1vdmVGcm9tQWxsb2NhdG9yKCkKK3ZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6cmVtb3ZlRnJvbURpcmVjdG9yeSgpCiB7Ci0gICAgaWYgKCFtX2FsbG9jYXRv
cikKKyAgICBpZiAoIW1fZGlyZWN0b3J5KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9h
bGxvY2F0b3ItPnJlbW92ZUJsb2NrKHRoaXMpOworICAgIG1fZGlyZWN0b3J5LT5yZW1vdmVCbG9j
ayh0aGlzKTsKIH0KIAotdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0FsbG9jYXRv
cihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGluZGV4KQordm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRBZGRUb0RpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5
LCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKG1faW5kZXggPT0gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSk7Ci0gICAgQVNTRVJUKCFtX2FsbG9jYXRvcik7CisgICAgQVNT
RVJUKCFtX2RpcmVjdG9yeSk7CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yLT5z
dWJzcGFjZSgpLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9hbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKTsKKyAgICBSRUxFQVNFX0FTU0VSVChkaXJlY3RvcnktPnN1YnNwYWNlKCktPmFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoKSA9PSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOwogICAgIAog
ICAgIG1faW5kZXggPSBpbmRleDsKLSAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICBt
X2Jsb2NrLT5tX3N1YnNwYWNlID0gYWxsb2NhdG9yLT5zdWJzcGFjZSgpOworICAgIG1fZGlyZWN0
b3J5ID0gZGlyZWN0b3J5OworICAgIG1fYmxvY2stPm1fc3Vic3BhY2UgPSBkaXJlY3RvcnktPnN1
YnNwYWNlKCk7CiAgICAgCi0gICAgc2l6ZV90IGNlbGxTaXplID0gYWxsb2NhdG9yLT5jZWxsU2l6
ZSgpOworICAgIHNpemVfdCBjZWxsU2l6ZSA9IGRpcmVjdG9yeS0+Y2VsbFNpemUoKTsKICAgICBt
X2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6ZTsKICAg
ICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOwogICAgIAot
ICAgIG1fYXR0cmlidXRlcyA9IGFsbG9jYXRvci0+YXR0cmlidXRlcygpOworICAgIG1fYXR0cmli
dXRlcyA9IGRpcmVjdG9yeS0+YXR0cmlidXRlcygpOwogCiAgICAgaWYgKG1fYXR0cmlidXRlcy5j
ZWxsS2luZCAhPSBIZWFwQ2VsbDo6SlNDZWxsKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2F0
dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbik7CkBAIC0zNTAs
MTMgKzM1MCwxMyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZEFkZFRvQWxsb2NhCiAg
ICAgYmxvY2soKS5tX2JpYXNlZE1hcmtDb3VudCA9IGJsb2NrKCkubV9tYXJrQ291bnRCaWFzID0g
c3RhdGljX2Nhc3Q8aW50MTZfdD4obWFya0NvdW50Qmlhcyk7CiB9CiAKLXZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpCit2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmRpZFJlbW92ZUZyb21EaXJlY3RvcnkoKQogewogICAgIEFTU0VSVChtX2luZGV4ICE9
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIEFTU0VSVChtX2FsbG9j
YXRvcik7CisgICAgQVNTRVJUKG1fZGlyZWN0b3J5KTsKICAgICAKICAgICBtX2luZGV4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKLSAgICBtX2FsbG9jYXRvciA9IG51bGxw
dHI7CisgICAgbV9kaXJlY3RvcnkgPSBudWxscHRyOwogICAgIG1fYmxvY2stPm1fc3Vic3BhY2Ug
PSBudWxscHRyOwogfQogCkBAIC0zNzEsOCArMzcxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YXNz
ZXJ0VmFsaWRDZWxsKFZNJiB2bQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkdW1wU3RhdGUo
UHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgYWxsb2Nh
dG9yKCktPmZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKLSAgICAgICAgaG9sZExvY2soYWxsb2Nh
dG9yKCktPmJpdHZlY3RvckxvY2soKSksCisgICAgZGlyZWN0b3J5KCktPmZvckVhY2hCaXRWZWN0
b3JXaXRoTmFtZSgKKyAgICAgICAgaG9sZExvY2soZGlyZWN0b3J5KCktPmJpdHZlY3RvckxvY2so
KSksCiAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgYml0dmVjdG9yLCBjb25zdCBjaGFyKiBu
YW1lKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5hbWUsICI6IiwgYml0dmVjdG9y
W2luZGV4KCldID8gIllFUyIgOiAibm8iKTsKICAgICAgICAgfSk7CkBAIC0zODAsNyArMzgwLDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkdW1wU3RhdGUoUHJpbgogCiBTdWJzcGFjZSog
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3Vic3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBhbGxv
Y2F0b3IoKS0+c3Vic3BhY2UoKTsKKyAgICByZXR1cm4gZGlyZWN0b3J5KCktPnN1YnNwYWNlKCk7
CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0
KQpAQCAtMzg5LDEyICszODksMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChG
cmVlTGlzdAogICAgIAogICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVw
VG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICAKLSAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3
ZXB0KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIG1fZGlyZWN0b3J5LT5z
ZXRJc1Vuc3dlcHQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgCiAgICAg
bV93ZWFrU2V0LnN3ZWVwKCk7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gbV9h
dHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24KLSAgICAgICAgJiYgbV9h
bGxvY2F0b3ItPmlzRGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CisgICAg
ICAgICYmIG1fZGlyZWN0b3J5LT5pc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRo
aXMpOwogCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgIW5lZWRzRGVzdHJ1Y3Rp
b24pCiAgICAgICAgIHJldHVybjsKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0CiBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRnJl
ZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAogewogICAgIEFTU0VSVChpc0Zy
ZWVMaXN0ZWQoKSk7Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRDZWxsKHRh
cmdldCk7CisgICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMSw3ICsyMSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENl
bGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKQEAgLTM4LDcgKzM4LDcgQEAgY2xh
c3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgICAgCiBjbGFzcyBGcmVlTGlzdDsKIGNsYXNzIEhl
YXA7CiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0Rp
cmVjdG9yeTsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBT
dWJzcGFjZTsKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdm9pZCBsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
KCkgY29uc3Q7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkoKSBjb25zdDsKICAg
ICAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Q7CiAgICAgICAgIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgSGVhcCog
aGVhcCgpIGNvbnN0OwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90
IGNlbGxTaXplKCk7CiAgICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CiAg
ICAgICAgIAotICAgICAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkg
Y29uc3Q7CisgICAgICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7
CiAgICAgICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0OwogICAgICAgICBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdDsKICAgICAgICAgSGVhcENlbGw6OktpbmQgY2Vs
bEtpbmQoKSBjb25zdDsKQEAgLTE5NywxMCArMTk3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgcmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAgICAgICB2b2lkIHJlbW92
ZUZyb21EaXJlY3RvcnkoKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgZGlkQWRkVG9BbGxvY2F0
b3IoTWFya2VkQWxsb2NhdG9yKiwgc2l6ZV90IGluZGV4KTsKLSAgICAgICAgdm9pZCBkaWRSZW1v
dmVGcm9tQWxsb2NhdG9yKCk7CisgICAgICAgIHZvaWQgZGlkQWRkVG9EaXJlY3RvcnkoQmxvY2tE
aXJlY3RvcnkqLCBzaXplX3QgaW5kZXgpOworICAgICAgICB2b2lkIGRpZFJlbW92ZUZyb21EaXJl
Y3RvcnkoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7
CiAgICAgICAgIApAQCAtMjMyLDExICsyMzIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgCiAg
ICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOwogICAgICAgICAg
ICAgCi0gICAgICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgICAgICBD
ZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQg
eyBmYWxzZSB9OwogCiAgICAgICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2Fs
bG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5
IHsgbnVsbHB0ciB9OwogICAgICAgICBzaXplX3QgbV9pbmRleCB7IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkgfTsKICAgICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CiAgICAgICAg
IApAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTWFya2VkKGNvbnN0
IHZvaWQqKTsKICAgICAKICAgICBzaXplX3QgY2VsbFNpemUoKTsKLSAgICBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3QgQ2VsbEF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICAKICAgICBib29sIGhhc0FueU1hcmtlZCgpIGNv
bnN0OwogICAgIHZvaWQgbm90ZU1hcmtlZCgpOwpAQCAtMzk3LDkgKzM5Nyw5IEBAIGlubGluZSBN
YXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmJsb2NrRm8KICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9ja01hc2sp
OwogfQogCi1pbmxpbmUgTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6SGFuZGxlOjphbGxv
Y2F0b3IoKSBjb25zdAoraW5saW5lIEJsb2NrRGlyZWN0b3J5KiBNYXJrZWRCbG9jazo6SGFuZGxl
OjpkaXJlY3RvcnkoKSBjb25zdAogewotICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICByZXR1
cm4gbV9kaXJlY3Rvcnk7CiB9CiAKIGlubGluZSBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBNYXJr
ZWRCbG9jazo6SGFuZGxlOjphbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QKQEAgLTQ1Nywx
MiArNDU3LDEyIEBAIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6OmNlbGxTaXplKCkKICAgICBy
ZXR1cm4gbV9oYW5kbGUuY2VsbFNpemUoKTsKIH0KIAotaW5saW5lIGNvbnN0IEFsbG9jYXRvckF0
dHJpYnV0ZXMmIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmF0dHJpYnV0ZXMoKSBjb25zdAoraW5saW5l
IGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwogfQogCi1pbmxpbmUgY29uc3QgQWxs
b2NhdG9yQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMoKSBjb25zdAoraW5saW5l
IGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6YXR0cmlidXRlcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faGFuZGxlLmF0dHJpYnV0ZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtOTMsMTIgKzkzLDEyIEBAIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmUKIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNBbGxvY2F0ZWQoKQogewotICAgIHJldHVybiBtX2FsbG9jYXRv
ci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKKyAgICByZXR1cm4gbV9k
aXJlY3RvcnktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBp
c01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewotICAgIGlmIChhbGxvY2F0b3IoKS0+
aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKKyAgICBpZiAoZGlyZWN0b3J5
KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAogICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRo
ZSBsb2NrIGJlY2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwgbmV3bHkK
QEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVk
U3dlCiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAgIG1fYWxsb2NhdG9yLT5zZXRJc0Rlc3Ry
dWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKKyAgICBtX2RpcmVjdG9y
eS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0
eU1vZGUgPT0gSXNFbXB0eQpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KGhl
YWQsIHNlY3JldCwgY291bnQgKiBjZWxsU2l6ZSk7CiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgp
OwogICAgIH0gZWxzZSBpZiAoaXNFbXB0eSkKLSAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1w
dHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKKyAgICAgICAgbV9kaXJlY3Rvcnkt
PnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICBpZiAoZmFs
c2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZi
bG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0ZXMgIiwg
bV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwogfQpAQCAt
NDQxLDcgKzQ0MSw3IEBAIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWMK
IAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSgpCiB7Ci0gICAgcmV0
dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CisgICAg
cmV0dXJuIG1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CiB9
CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgTWFya2VkQmxvY2s6Okhh
bmRsZTo6ZW1wdHlNb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIApAQCAtMjE2LDkgKzIxNiw5IEBAIHZvaWQgTWFya2VkU3Bh
Y2U6OmZyZWVNZW1vcnkoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpCiB7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgIGFsbG9jYXRv
ci5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAg
IFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAg
ICAgICAgICAgIGRpcmVjdG9yeS5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogICAgIGZvciAo
TGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uIDogbV9sYXJnZUFsbG9jYXRpb25zKQpAQCAtMjI4
LDkgKzIyOCw5IEBAIHZvaWQgTWFya2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIHZv
aWQgTWFya2VkU3BhY2U6OnN3ZWVwKCkKIHsKICAgICBtX2hlYXAtPnN3ZWVwZXIoKS5zdG9wU3dl
ZXBpbmcoKTsKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgYWxsb2Nh
dG9yLnN3ZWVwKCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0Rp
cmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZGly
ZWN0b3J5LnN3ZWVwKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICAgICAgfSk7CiB9CkBAIC0yOTUsOSArMjk1LDkgQEAgdm9pZCBNYXJrZWRTcGFj
ZTo6cmVhcFdlYWtTZXRzKCkKIHZvaWQgTWFya2VkU3BhY2U6OnN0b3BBbGxvY2F0aW5nKCkKIHsK
ICAgICBBU1NFUlQoIWlzSXRlcmF0aW5nKCkpOwotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAg
ICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7
Ci0gICAgICAgICAgICBhbGxvY2F0b3Iuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICBmb3JFYWNoRGly
ZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3Rvcnkuc3RvcEFsbG9jYXRpbmcoKTsKICAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsK
IH0KQEAgLTMyNiw5ICszMjYsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yTWFya2lu
ZygpCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewotICAgIGZvckVh
Y2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGlu
ZygpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3Rvcnkm
IGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5y
ZXN1bWVBbGxvY2F0aW5nKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKICAgICAgICAgfSk7CiAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgTGFyZ2VBbGxv
Y2F0aW9ucy4KQEAgLTMzNyw5ICszMzcsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxv
Y2F0aW5nKCkKIGJvb2wgTWFya2VkU3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQog
ewogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAg
ICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsK
LSAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuaXNQYWdlZE91dChkZWFkbGluZSkpIHsKKyAgICBm
b3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3Rvcnkp
IC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBpZiAoZGlyZWN0b3J5LmlzUGFnZWRP
dXQoZGVhZGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwogICAgICAgICAgICAgfQpAQCAt
MzUxLDcgKzM1MSw3IEBAIGJvb2wgTWFya2VkU3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWQK
IAogdm9pZCBNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
KQogewotICAgIGJsb2NrLT5hbGxvY2F0b3IoKS0+cmVtb3ZlQmxvY2soYmxvY2spOworICAgIGJs
b2NrLT5kaXJlY3RvcnkoKS0+cmVtb3ZlQmxvY2soYmxvY2spOwogICAgIG1fY2FwYWNpdHkgLT0g
TWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICBtX2Jsb2Nrcy5yZW1vdmUoJmJsb2NrLT5ibG9j
aygpKTsKICAgICBkZWxldGUgYmxvY2s7CkBAIC0zNjksOSArMzY5LDkgQEAgdm9pZCBNYXJrZWRT
cGFjZTo6ZnJlZU9yU2hyaW5rQmxvY2soTWFyawogCiB2b2lkIE1hcmtlZFNwYWNlOjpzaHJpbmso
KQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3Iu
c2hyaW5rKCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVj
dG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZGlyZWN0
b3J5LnNocmluaygpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CiAgICAgICAgIH0pOwogfQpAQCAtMzc5LDkgKzM3OSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6
OnNocmluaygpCiB2b2lkIE1hcmtlZFNwYWNlOjpiZWdpbk1hcmtpbmcoKQogewogICAgIGlmICht
X2hlYXAtPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAg
ICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICBhbGxvY2F0
b3IuYmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICAgICAgZm9yRWFjaERpcmVj
dG9yeSgKKyAgICAgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRl
cmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuYmVnaW5NYXJraW5nRm9y
RnVsbENvbGxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgICAgIH0pOwogCkBAIC00MjksOSArNDI5LDkgQEAgdm9pZCBN
YXJrZWRTcGFjZTo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFsbG9j
YXRpb24sICFhbGxvY2F0aW9uLT5pc05ld2x5QWxsb2NhdGVkKCkpOwogICAgIH0KIAotICAgIGZv
ckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3IuZW5kTWFya2luZygp
OworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRp
cmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5lbmRN
YXJraW5nKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
ICAgICAgICAgfSk7CiAgICAgCkBAIC01MTQsMTUgKzUxNCwxNSBAQCB2b2lkIE1hcmtlZFNwYWNl
OjpkaWRBbGxvY2F0ZUluQmxvY2soTWFyCiB2b2lkIE1hcmtlZFNwYWNlOjpzbmFwc2hvdFVuc3dl
cHQoKQogewogICAgIGlmIChtX2hlYXAtPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25T
Y29wZTo6RWRlbikgewotICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICAgICAgWyZd
IChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAg
ICAgICAgICAgICBhbGxvY2F0b3Iuc25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsK
KyAgICAgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgICAgIFsmXSAoQmxvY2tEaXJlY3Rv
cnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICBkaXJl
Y3Rvcnkuc25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgICAgIH0pOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgICAgICBbJl0gKE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci5zbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpOworICAg
ICAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYg
ZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgIGRpcmVjdG9y
eS5zbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICAgICAgfSk7CiAgICAgfQpA
QCAtNTMyLDMwICs1MzIsMzAgQEAgdm9pZCBNYXJrZWRTcGFjZTo6YXNzZXJ0Tm9VbnN3ZXB0KCkK
IHsKICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yRWFj
aEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5hc3NlcnROb1Vuc3dlcHQo
KTsKKyAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBk
aXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3RvcnkuYXNz
ZXJ0Tm9VbnN3ZXB0KCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6OmR1bXBCaXRzKFByaW50
U3RyZWFtJiBvdXQpCiB7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJr
ZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAg
IG91dC5wcmludCgiQml0cyBmb3IgIiwgYWxsb2NhdG9yLCAiOlxuIik7Ci0gICAgICAgICAgICBh
bGxvY2F0b3IuZHVtcEJpdHMob3V0KTsKKyAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBb
Jl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIkJpdHMgZm9yICIsIGRpcmVjdG9yeSwgIjpcbiIpOworICAgICAg
ICAgICAgZGlyZWN0b3J5LmR1bXBCaXRzKG91dCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFya2VkU3BhY2U6
OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yKQordm9pZCBNYXJrZWRTcGFjZTo6YWRkQmxvY2tEaXJlY3RvcnkoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQogewotICAgIGFsbG9j
YXRvci0+c2V0TmV4dEFsbG9jYXRvcihudWxscHRyKTsKKyAgICBkaXJlY3RvcnktPnNldE5leHRE
aXJlY3RvcnkobnVsbHB0cik7CiAgICAgCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKIAot
ICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoc3RkOjptZW1fZm4oJk1hcmtlZEFsbG9jYXRvcjo6c2V0
TmV4dEFsbG9jYXRvciksIGFsbG9jYXRvcik7CisgICAgbV9kaXJlY3Rvcmllcy5hcHBlbmQoc3Rk
OjptZW1fZm4oJkJsb2NrRGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5KSwgZGlyZWN0b3J5KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkl0
ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkxhcmdlQWxsb2NhdGlvbi5oIgotI2luY2x1ZGUg
Ik1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUg
PGFycmF5PgpAQCAtMTU3LDEwICsxNTcsMTAgQEAgcHVibGljOgogICAgIExhcmdlQWxsb2NhdGlv
bioqIGxhcmdlQWxsb2NhdGlvbnNGb3JUaGlzQ29sbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFyZ2VBbGxvY2F0aW9uc0ZvclRoaXNDb2xsZWN0aW9uRW5kOyB9CiAgICAgdW5zaWduZWQg
bGFyZ2VBbGxvY2F0aW9uc0ZvclRoaXNDb2xsZWN0aW9uU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFyZ2VBbGxvY2F0aW9uc0ZvclRoaXNDb2xsZWN0aW9uU2l6ZTsgfQogICAgIAotICAgIE1hcmtl
ZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvcnMu
Zmlyc3QoKTsgfQorICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERpcmVjdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlyZWN0b3JpZXMuZmlyc3QoKTsgfQogICAgIAotICAgIExvY2smIGFsbG9jYXRv
ckxvY2soKSB7IHJldHVybiBtX2FsbG9jYXRvckxvY2s7IH0KLSAgICB2b2lkIGFkZE1hcmtlZEFs
bG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOworICAgIExv
Y2smIGRpcmVjdG9yeUxvY2soKSB7IHJldHVybiBtX2RpcmVjdG9yeUxvY2s7IH0KKyAgICB2b2lk
IGFkZEJsb2NrRGlyZWN0b3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQmxvY2tEaXJlY3Rvcnkq
KTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUg
ZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9v
bCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQpAQCAtMTgxLDcgKzE4
MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CiAgICAgZnJpZW5kIGNs
YXNzIFN1YnNwYWNlOwogICAgIAotICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5n
IGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvcnMKKyAg
ICAvLyBVc2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2FsbGluZyBmcm9tIHdpdGhpbiB0aGUgR0Mgd2hl
cmUgd2Uga25vdyB0aGF0IHRoZSBkaXJlY3RvcmllcwogICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVu
IHN0b3BwZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2
ZUNlbGwoY29uc3QgRnVuY3RvciYpOwogCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGluaXRpYWxpemVTdWJzcGFjZShTdWJzcGFjZSYpOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBG
dW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9y
RWFjaERpcmVjdG9yeShjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBhZGRBY3RpdmVX
ZWFrU2V0KFdlYWtTZXQqKTsKIApAQCAtMjE0LDI2ICsyMTQsMjYgQEAgcHJpdmF0ZToKICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8V2Vha1NldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8V2Vha1NldD4+
IG1fYWN0aXZlV2Vha1NldHM7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2lj
UmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+PiBtX25ld0FjdGl2ZVdlYWtTZXRzOwogCi0gICAgTG9j
ayBtX2FsbG9jYXRvckxvY2s7Ci0gICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsPE1hcmtlZEFs
bG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIExvY2sgbV9kaXJlY3RvcnlMb2NrOworICAgIFNp
bmdseUxpbmtlZExpc3RXaXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKIAog
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFy
a2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICBhbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIGZvckVhY2hEaXJlY3Rvcnko
CisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3Rh
dHVzIHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFj
aEFsbG9jYXRvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordm9pZCBNYXJrZWRTcGFjZTo6Zm9y
RWFjaERpcmVjdG9yeShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvciAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgYWxsb2NhdG9yOyBh
bGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBpZiAoZnVu
Y3RvcigqYWxsb2NhdG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgZm9yIChCbG9j
a0RpcmVjdG9yeSogZGlyZWN0b3J5ID0gbV9kaXJlY3Rvcmllcy5maXJzdCgpOyBkaXJlY3Rvcnk7
IGRpcmVjdG9yeSA9IGRpcmVjdG9yeS0+bmV4dERpcmVjdG9yeSgpKSB7CisgICAgICAgIGlmIChm
dW5jdG9yKCpkaXJlY3RvcnkpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjY3ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5s
aW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcmFs
bGVsU291cmNlQWRhcHRlci5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
QEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBTdWJzcGFjZTo6aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUq
IAogICAgIG1fYXR0cmlidXRlcyA9IGhlYXBDZWxsVHlwZS0+YXR0cmlidXRlcygpOwogICAgIG1f
aGVhcENlbGxUeXBlID0gaGVhcENlbGxUeXBlOwogICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciA9IGFsaWduZWRNZW1vcnlBbGxvY2F0b3I7Ci0gICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CisgICAg
bV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0RGlyZWN0b3J5KCk7CiAKICAgICBIZWFwJiBoZWFwID0gKm1fc3BhY2UuaGVhcCgpOwog
ICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZShoZWFwKTsK
QEAgLTcyLDY1ICs3Miw2NSBAQCB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxs
KiBjCiAKIHZvaWQgU3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBmb3JF
YWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7
Ci0gICAgICAgICAgICBhbGxvY2F0b3IucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICBmb3JF
YWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIHsK
KyAgICAgICAgICAgIGRpcmVjdG9yeS5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9
KTsKIAotICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOworICAgIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxv
Y2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdERpcmVjdG9yeSgpOwogfQog
CiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkK
IHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewotICAgICAgICBpZiAoTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkpCisgICAgZm9yICg7IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxv
Y2F0aW9uOyBtX2RpcmVjdG9yeUZvckVtcHR5QWxsb2NhdGlvbiA9IG1fZGlyZWN0b3J5Rm9yRW1w
dHlBbGxvY2F0aW9uLT5uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsK
KyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnlGb3JF
bXB0eUFsbG9jYXRpb24tPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKQogICAgICAgICAgICAgcmV0
dXJuIGJsb2NrOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291
cmNlKCkKK1JlZlB0cjxTaGFyZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPj4gU3Vic3BhY2U6OnBh
cmFsbGVsRGlyZWN0b3J5U291cmNlKCkKIHsKLSAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJl
ZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFy
ZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPiB7CiAgICAgcHVibGljOgotICAgICAgICBUYXNrKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxv
Y2F0b3IpCisgICAgICAgIFRhc2soQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICAgICAg
ICAgIDogbV9kaXJlY3RvcnkoZGlyZWN0b3J5KQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgQmxv
Y2tEaXJlY3RvcnkqIHJ1bigpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogcmVzdWx0
ID0gbV9kaXJlY3Rvcnk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpOworICAgICAg
ICAgICAgICAgIG1fZGlyZWN0b3J5ID0gcmVzdWx0LT5uZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSgp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKICAgICBw
cml2YXRlOgotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAgICBC
bG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7CiAgICAgICAgIExvY2sgbV9sb2NrOwogICAgIH07
CiAgICAgCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdERpcmVjdG9yeSkpOwogfQogCiBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFs
bGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVBhcmFs
bGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4o
Ci0gICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCi0gICAgICAgIFtdIChNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6Okhh
bmRsZSooKT4+IHsKLSAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQorICAgIHJldHVybiBjcmVh
dGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRCbG9jazo6SGFu
ZGxlKj4oCisgICAgICAgIHBhcmFsbGVsRGlyZWN0b3J5U291cmNlKCksCisgICAgICAgIFtdIChC
bG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSAtPiBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4geworICAgICAgICAgICAgaWYgKCFkaXJlY3RvcnkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5wYXJh
bGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBkaXJlY3Rvcnkt
PnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOwogICAgICAgICB9KTsKIH0KIAogdm9pZCBT
dWJzcGFjZTo6c3dlZXAoKQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAo
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5zd2Vl
cCgpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3Rvcnkm
IGRpcmVjdG9yeSkgeworICAgICAgICAgICAgZGlyZWN0b3J5LnN3ZWVwKCk7CiAgICAgICAgIH0p
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDksMjcgKzQ5LDI3IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQogICAgIE1hcmtlZFNwYWNlJiBzcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BhY2U7IH0KICAgICAKLSAgICBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAg
Y29uc3QgQ2VsbEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXM7IH0KICAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGVhcENlbGxUeXBlOyB9CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAw
OworICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9j
YXRvckZvck1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2
b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBkaWRDcmVhdGVGaXJz
dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX2FsbG9jYXRvckZvckVt
cHR5QWxsb2NhdGlvbiA9IGFsbG9jYXRvcjsgfQorICAgIHZvaWQgZGlkQ3JlYXRlRmlyc3REaXJl
Y3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkgeyBtX2RpcmVjdG9yeUZvckVtcHR5QWxs
b2NhdGlvbiA9IGRpcmVjdG9yeTsgfQogICAgIAogICAgIC8vIEZpbmRzIGFuIGVtcHR5IGJsb2Nr
IGZyb20gYW55IFN1YnNwYWNlIHRoYXQgYWdyZWVzIHRvIHRyYWRlIGJsb2NrcyB3aXRoIHVzLgog
ICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNv
bnN0IEZ1bmMmKTsKKyAgICB2b2lkIGZvckVhY2hEaXJlY3RvcnkoY29uc3QgRnVuYyYpOwogICAg
IAotICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IHBhcmFsbGVsQWxs
b2NhdG9yU291cmNlKCk7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8QmxvY2tEaXJlY3RvcnkqKCk+
PiBwYXJhbGxlbERpcmVjdG9yeVNvdXJjZSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwpAQCAtMTA2
LDEzICsxMDYsMTMgQEAgcHJvdGVjdGVkOgogICAgIE1hcmtlZFNwYWNlJiBtX3NwYWNlOwogICAg
IAogICAgIENTdHJpbmcgbV9uYW1lOwotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1
dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIAogICAgIEhlYXBDZWxsVHlw
ZSogbV9oZWFwQ2VsbFR5cGUgeyBudWxscHRyIH07CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2Vz
IHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCisgICAgQmxvY2tEaXJlY3Rv
cnkqIG1fZmlyc3REaXJlY3RvcnkgeyBudWxscHRyIH07CisgICAgQmxvY2tEaXJlY3RvcnkqIG1f
ZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2VzIHRoZSBNYXJr
ZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExh
cmdlQWxsb2NhdGlvbiwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TGFyZ2VBbGxvY2F0aW9uPj4gbV9s
YXJnZUFsbG9jYXRpb25zOwogICAgIFN1YnNwYWNlKiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5o
IgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkBAIC0zNCwyNyArMzQsMjcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaEFs
bG9jYXRvcihjb25zdCBGdW5jJiBmdW5jKQordm9pZCBTdWJzcGFjZTo6Zm9yRWFjaERpcmVjdG9y
eShjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGZvciAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBtX2ZpcnN0QWxsb2NhdG9yOyBhbGxvY2F0b3I7IGFsbG9jYXRvciA9IGFsbG9jYXRvci0+
bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSkKLSAgICAgICAgZnVuYygqYWxsb2NhdG9yKTsKKyAg
ICBmb3IgKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkgPSBtX2ZpcnN0RGlyZWN0b3J5OyBkaXJl
Y3Rvcnk7IGRpcmVjdG9yeSA9IGRpcmVjdG9yeS0+bmV4dERpcmVjdG9yeUluU3Vic3BhY2UoKSkK
KyAgICAgICAgZnVuYygqZGlyZWN0b3J5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
IHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJiBmdW5jKQogewot
ICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuYyk7CisgICAg
Zm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5
KSB7CisgICAgICAgICAgICBkaXJlY3RvcnkuZm9yRWFjaEJsb2NrKGZ1bmMpOwogICAgICAgICB9
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hO
b3RFbXB0eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgZm9yRWFjaEFsbG9j
YXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgewotICAgICAg
ICAgICAgYWxsb2NhdG9yLmZvckVhY2hOb3RFbXB0eUJsb2NrKGZ1bmMpOworICAgIGZvckVhY2hE
aXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgeworICAg
ICAgICAgICAgZGlyZWN0b3J5LmZvckVhY2hOb3RFbXB0eUJsb2NrKGZ1bmMpOwogICAgICAgICB9
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBwdWJsaWM6
CiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIHZhbHVlIGhlbGQgaW4gYWxs
b2NhdG9yR1BSIGlzIG5vbi1udWxsLiBUaGlzIERPRVMgTk9UIG1lYW4KICAgICAvLyB0aGF0IGFs
bG9jYXRvciBpcyBub24tbnVsbDsgYWxsb2NhdG9yIGNhbiBiZSBudWxsIGFzIGEgc2lnbmFsIHRo
YXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQogICAgIC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBp
cy4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1
bHRHUFIsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9j
YXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3Rvcnkq
IGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBM
aXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5
IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNo
CiAgICAgICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgpAQCAtMTUwNSwyMiArMTUwNSwyMiBAQCBwdWJs
aWM6CiAgICAgICAgIEp1bXAgcG9wUGF0aDsKICAgICAgICAgSnVtcCBkb25lOwogICAgICAgICAK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQ
Uik7CiAgICAgICAgIGlmIChhbGxvY2F0b3IpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgICAgICAgICBt
b3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJs
b2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6
Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIHN1YjMy
KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKLSAgICAgICAgQWRkcmVz
cyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7Cisg
ICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmco
KSkpOworICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZQYXlsb2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgICAgIGFkZFB0
cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNTMyLDEx
ICsxNTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBvcFBhdGgubGluayh0aGlz
KTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1i
bGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGlmIChpc1g4NigpKQot
ICAgICAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgp
ICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
IHhvclB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwpAQCAtMTU0NCwxMiAr
MTU0NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0
ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKICAgICAgICAg
Ly8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCiAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQ
UiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CisgICAgICAgIHN0b3Jl
UHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQ
YXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBK
dW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvckdQUikp
OwpAQCAtMTU1NywxNCArMTU1NywxNCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwo
R1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyByZXN1
bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0
cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQ
YXRoKQogICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBh
bGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3Ry
dWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUg
U3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNP
YmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tE
aXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBz
dHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3Jh
dGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBlbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKHN0b3JhZ2UsIEFkZHJlc3MocmVz
dWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTE1NzYsNyArMTU3Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVn
IHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93
UGF0aCwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQmxv
Y2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIEpJVDsKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEludGVycHJldGVy
OwotICAgIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKyAgICBjbGFzcyBCbG9ja0RpcmVjdG9yeTsK
ICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKICAgICBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyAr
NzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7CiAg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgSlNEZXN0cnVjdGlibGVPYmplY3REZXN0cm95RnVu
YyB7CiB9OwogCiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6SlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJp
YnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBIZWFwQ2Vs
bFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdERlc3Ryb3lG
CiB9OwogCiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKLSAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQorICAgIDog
SGVhcENlbGxUeXBlKENlbGxBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IEpTU3RyaW5nRGVzdHJveUZ1bmMg
ewogfTsKIAogSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKLSAg
ICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpKQorICAgIDogSGVhcENlbGxUeXBlKENlbGxBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw5ICsyMjgsOSBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBmYXN0TWFs
bG9jQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5p
cXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkp
CiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKLSAgICAsIGF1eGls
aWFyeUhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9y
QXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSkp
Ci0gICAgLCBjZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihB
bGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0Nl
bGwpKSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1
ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVh
cENlbGw6OkpTQ2VsbCkpKQorICAgICwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91
bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9u
LCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSkpCisgICAgLCBjZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxU
eXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0cmlidXRlcyhOZWVkc0Rl
c3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCiAgICAgLCBzdHJpbmdIZWFwQ2VsbFR5cGUo
c3RkOjptYWtlX3VuaXF1ZTxKU1N0cmluZ0hlYXBDZWxsVHlwZT4oKSkKICAgICAsIGRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlPigpKQogICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlPigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHJl
dmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHN0cnVjdCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrRGVzdHJveUZ1bmMKIH07CiAKIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBIZWFwQ2VsbFR5cGUoQ2Vs
bEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAK
</data>
<flag name="review"
          id="350110"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331121</attachid>
            <date>2018-01-11 14:35:12 -0800</date>
            <delta_ts>2018-01-11 14:54:19 -0800</delta_ts>
            <desc>fix style issues</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>210174</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2ODA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxOC0wMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBNYXJrZWRBbGxvY2F0b3IgdG8gQmxvY2tEaXJlY3RvcnkgYW5kIEFsbG9jYXRvckF0
dHJpYnV0ZXMgdG8gQ2VsbEF0dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MTU0MworCisgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE1p
Y2hhZWwgU2Fib2ZmLgorICAgICAgICAKKyAgICAgICAgSW4gYSB3b3JsZCB0aGF0IGhhcyB0aHJl
YWQtbG9jYWwgY2FjaGVzLCB0aGUgdGhpbmcgd2Ugbm93IGNhbGwgdGhlICJNYXJrZWRBbGxvY2F0
b3IiIGRvZXNuJ3QKKyAgICAgICAgcmVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBhbGxv
Y2F0aW9uIGFueW1vcmUuIFRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZG9uZSBieSBzb21ldGhpbmcK
KyAgICAgICAgaW4gdGhlIFRMQy4gV2hlbiB5b3UgbW92ZSB0aGUgYWxsb2NhdGlvbiBsb2dpYyBv
dXQgb2YgTWFya2VkQWxsb2NhdG9yLCBpdCBiZWNvbWVzIGp1c3QgYQorICAgICAgICBwbGFjZSB0
byBmaW5kIGJsb2NrcyAoYSAiYmxvY2sgZGlyZWN0b3J5IikuCisKKyAgICAgICAgT25jZSB3ZSBk
byB0aGF0IHJlbmFtaW5nLCB0aGUgdGVybSAiYWxsb2NhdG9yIGF0dHJpYnV0ZXMiIGJlY29tZXMg
d2VpcmQuIFRob3NlIGFyZSByZWFsbHkgdGhlCisgICAgICAgIGF0dHJpYnV0ZXMgb2YgdGhlIEhl
YXBDZWxsVHlwZS4gU28gbGV0J3MgY2FsbCB0aGVtIENlbGxBdHRyaWJ1dGVzLgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBT
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9w
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpT
T2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXpl
SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlSGVh
cENlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRvckZv
clNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KToKKyAg
ICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOgorICAgICAg
ICAoSlNDOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmaXJzdERpcmVjdG9yeSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwLgorICAgICAgICAoSlNDOjpCbG9ja0Rp
cmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6
c2V0U3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dCk6
CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAg
ICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCbG9ja0Rp
cmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5
OjpibG9ja1NpemVGb3JCeXRlcyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojp0cnlB
bGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFkZEJsb2NrKToK
KyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6QmxvY2tE
aXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YmVn
aW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpzbmFwc2hvdFVu
c3dlcHRGb3JFZGVuQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpz
bmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGly
ZWN0b3J5OjpmaW5kQmxvY2tUb1N3ZWVwKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnNocmluayk6CisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojphc3NlcnROb1Vuc3dlcHQpOgorICAgICAgICAoSlNDOjpC
bG9ja0RpcmVjdG9yeTo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVj
dG9yeTo6ZHVtcEJpdHMpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3Vt
ZUZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JG
dWxsQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZW5kTWFya2luZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c25h
cHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmaW5kQmxvY2tUb1N3ZWVwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJpdHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oLgorICAgICAgICAoSlNDOjpCbG9j
a0RpcmVjdG9yeTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5Ojpmb3JFYWNoQml0VmVjdG9yKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZv
ckVhY2hCaXRWZWN0b3JXaXRoTmFtZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpu
ZXh0RGlyZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om5leHRE
aXJlY3RvcnlJblN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
Om5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAgICAgICAo
SlNDOjpCbG9ja0RpcmVjdG9yeTo6c2V0TmV4dERpcmVjdG9yeSk6CisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QpOgorICAg
ICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6Y2VsbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmF0dHJpYnV0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmRlc3RydWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpjZWxsS2luZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Yml0dmVjdG9yTG9jayk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3RvcldpdGhOYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxsb2NhdG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxs
b2NhdG9ySW5TdWJzcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnNl
dE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN1YnNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVlTGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oLgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGly
ZWN0b3J5Ojpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6Zm9y
RWFjaE5vdEVtcHR5QmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJl
ZUxpc3RlZENlbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpm
b3JFYWNoQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZv
ckVhY2hOb3RFbXB0eUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NlbGxBdHRyaWJ1
dGVzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9y
QXR0cmlidXRlcy5jcHAuCisgICAgICAgIChKU0M6OkNlbGxBdHRyaWJ1dGVzOjpkdW1wIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yQXR0cmlidXRlczo6ZHVtcCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9DZWxsQXR0cmlidXRlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmguCisgICAgICAgIChKU0M6
OkNlbGxBdHRyaWJ1dGVzOjpDZWxsQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OkFsbG9jYXRv
ckF0dHJpYnV0ZXM6OkFsbG9jYXRvckF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGhl
YXAvQ29tcGxldGVTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvcik6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRl
Tm9uVmlydHVhbCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
clNsb3cpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3cp
OgorICAgICAgICAqIGhlYXAvQ29tcGxldGVTdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcENlbGw6OmNlbGxBdHRyaWJ1dGVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcENlbGw6OmRlc3RydWN0aW9uTW9kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkhlYXBDZWxsOjpjZWxsS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsOjph
bGxvY2F0b3JBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBD
ZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToK
KyAgICAgICAgKiBoZWFwL0hlYXBDZWxsVHlwZS5oOgorICAgICAgICAoSlNDOjpIZWFwQ2VsbFR5
cGU6OmF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVw
ZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKToKKyAgICAg
ICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdG9wU3dlZXBpbmcpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6SXNvQ2VsbFNldDo6SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklz
b0NlbGxTZXQ6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSk6CisgICAgICAgIChK
U0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRS
ZW1vdmVCbG9jayk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OnN3ZWVwVG9GcmVlTGlzdCk6
CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmZv
ckVhY2hMaXZlQ2VsbCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Oklzb1N1YnNwYWNlOjpJc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNw
YWNlOjphbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgIChKU0M6
Oklzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0xh
cmdlQWxsb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmF0dHJpYnV0
ZXMgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp+SGFuZGxl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6Om5vdGVNYXJrZWRTbG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmRpZEFkZFRvRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OmR1bXBTdGF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRD
ZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVtb3ZlRnJv
bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmRpZEFkZFRvQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpkaXJl
Y3RvcnkgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1
dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphbGxvY2F0b3IgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OmlzRW1wdHkpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZyk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzaHJpbmsp
OgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
c25hcHNob3RVbnN3ZXB0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFzc2VydE5vVW5z
d2VwdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkdW1wQml0cyk6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjphZGRCbG9ja0RpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZpcnN0RGlyZWN0b3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRpcmVjdG9yeUxvY2spOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmZvckVhY2hEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Zmly
c3RBbGxvY2F0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
YWxsb2NhdG9yTG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmb3JF
YWNoQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlSW5saW5l
cy5oOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2Nh
dGlvbik6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxEaXJlY3RvcnlTb3VyY2UpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToKKyAg
ICAgICAgKEpTQzo6U3Vic3BhY2U6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OnBh
cmFsbGVsQWxsb2NhdG9yU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1N1YnNwYWNl
Lmg6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmRpZENyZWF0ZUZpcnN0RGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6
U3Vic3BhY2U6OmRpZENyZWF0ZUZpcnN0QWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBo
ZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaERp
cmVjdG9yeSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQmxvY2spOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2spOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1p
dEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
d19vYmplY3QpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6
CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSGVh
cENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZSk6CisKIDIwMTgtMDEtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgSklUTWF0aElDIGNvZGUgaW4gdGhlIEZUTCBpcyB3cm9uZyB3aGVuIGNvZGUgZ2V0cyBk
dXBsaWNhdGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQ2Niw3ICs0NjYsOCBAQCBmdGwvRlRMVGh1bmtzLmNwcAogZnRsL0ZUTFZhbHVlUmFuZ2Uu
Y3BwCiAKIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKLWhlYXAvQWxsb2NhdG9yQXR0
cmlidXRlcy5jcHAKK2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCitoZWFwL0NlbGxBdHRyaWJ1dGVz
LmNwcAogaGVhcC9DZWxsQ29udGFpbmVyLmNwcAogaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiBoZWFw
L0NvbGxlY3Rpb25TY29wZS5jcHAKQEAgLTUwMiw3ICs1MDMsNiBAQCBoZWFwL0xhcmdlQWxsb2Nh
dGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3Bw
CiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAotaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCiBoZWFwL01hcmtlZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDks
NyBAQAogCQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3
MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGN0RG
MTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFFMkJFRjY4MDA5
NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBC
bG9ja0RpcmVjdG9yeUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBCbG9ja0RpcmVjdG9yeUlu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdG
OTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgg
Ki87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDM4LDcg
KzQzOCw3IEBACiAJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODYxQzU3
RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggKi87IH07CiAJCTBGOTUyQUExMURGNzg2MDkw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1
MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdD
NSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBBbGxvY2F0b3JB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzMDNBMUQ0
MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxB
dHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0MxRDQxOTJDRDAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzgxRDQxOTJD
MzAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4
QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCQlDMjlFQ0IwMzE4MDREMEVEMDBEMkNCQjQg
LyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjlFQ0IwMTE4MDREMEVEMDBEMkNCQjQgLyog
Q3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gKi87IH07CiAJCUMyQTdGNjg4MTYw
NDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJCNkQ3NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmll
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJCOTE2QzIxNERB
MDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtl
ZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0
RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNG
MzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMy
REE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8q
IEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI0NTAsNyArMjQ1MCw3IEBACiAJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxNDUxRTJCRUY2ODAwOTU5NTFCIC8qIE1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdE
RjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrRGlyZWN0b3J5SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMy
MzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDQsOCArMjUw
NCw4IEBACiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2Vk
UmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWxsb2NhdG9yQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbEF0dHJpYnV0ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2Vs
bEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2VsbEF0dHJp
YnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjMwMzcxRDQxOTJDMzAw
NTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXN0cnVjdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk2MzAzODFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlc3RydWN0aW9uTW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQxOSw4ICs0NDE5LDggQEAKIAkJQzI5RUNC
MDIxODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tH
ZXR0ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRl
clRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBN0Y2ODcxNjA0MzJENDAw
Rjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8q
IE1hcmtlZEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
ZWRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzQxNERB
MDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tEaXJlY3RvcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2Nr
RGlyZWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2Nr
RGlyZWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDMEY3Q0IxN0JC
RkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOyBwYXRoID0g
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7
IHBhdGggPSBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJP
YmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTQ2LDEwICs1NTQ2LDEz
IEBACiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3Bl
LmggKi8sCiAJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovLAotCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRy
aWJ1dGVzLmNwcCAqLywKLQkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9y
QXR0cmlidXRlcy5oICovLAogCQkJCTBGMzBDQjVEMUZDRTQ2QjQwMDRCNTMyMyAvKiBBbGxvY2F0
b3JGb3JNb2RlLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRp
Y2VzLmggKi8sCisJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5
LmNwcCAqLywKKwkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3Rvcnku
aCAqLywKKwkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmggKi8sCisJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVz
LmNwcCAqLywKKwkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMu
aCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAg
Ki8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENlbGxDb250YWluZXIuaCAqLywK
IAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lcklubGluZXMuaCAq
LywKQEAgLTU2NDcsOSArNTY1MCw2IEBACiAJCQkJMEYyMDhBRDYxREYwOTI1QTAwN0QzMjY5IC8q
IExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIzM0YxMkQ3RDBEQTAwM0JENUVEIC8q
IE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRCNzIzNDAxMkQ3RDBEQTAwM0JENUVE
IC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLAotCQkJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwICovLAotCQkJCUMyQjkxNkMxMTREQTAxNEUwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIg
LyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTE0MkQ2RjA2MTM1MzlBMjgwMEIw
MkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgKi8sCiAJCQkJMTQyRDZGMDcxMzUzOUEyODAwQjAyRTg2
IC8qIE1hcmtlZEJsb2NrLmggKi8sCiAJCQkJMEY3QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1h
cmtlZEJsb2NrSW5saW5lcy5oICovLApAQCAtODA4OSw3ICs4MDg5LDcgQEAKIAkJCQkwRkVDM0M1
MzFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBNzYyMEIxREI5NTlGOTAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25G
YWlsdXJlTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5
IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzMDNBMUQ0
MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
MENCNUUxRkNFNEUzNzAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAv
KiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDczLDgg
KzkwNzMsOCBAQAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0
ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBD
M0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkI5MTZDMjE0REEw
MTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjdE
RjE0NjFFMkJFRjZBMDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjdERjE0NjFFMkJFRjZBMDA5NTk1MUIgLyogQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJF
ODYgLyogTWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0M1RkI4MUQ4ODhBMEMw
MDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0
OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKKyAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxs
b2NhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBz
dWNrIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUpOwog
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFr
ZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4KKyAgICBCbG9ja0RpcmVjdG9yeSog
bV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2Vu
ZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAg
ICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9m
aQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVD
YXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOworICAgIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKTsKIAogICAgIC8v
IFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhl
IHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNjc4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQ
Uik7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KSkgeworICAgICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCkt
PmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIApAQCAtMTI4LDcgKzEyOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShp
bmxpbmVDYXBhY2l0eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9i
amVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKGFsbG9jYXRv
clB0cikgewogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwg
c2NyYXRjaEdQUik7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGlu
Z01hc2sodmVjdG9yTGVuZ3RoKTsKQEAgLTQyMDgsOSArNDIwOCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAg
IE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3Ry
aW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0
cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBl
bWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBtYXJrZWRBbGxvY2F0b3IsIGFsbG9jYXRvckdQ
UiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAg
QmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5n
PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmlu
ZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOworICAgIGVtaXRB
bGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRy
dXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAK
ICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtT3BHUFJzOyArK2kpCkBAIC04MzgzLDcgKzgzODMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNp
emUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBt
X2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAg
IGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC04NDI4LDcgKzg0MjgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXpl
ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7
CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCkt
PnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTE0NDgsNyArMTE0
NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KE5vCiAKICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8
SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9j
YXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisj
aW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiREZHR2VuZXJhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oIgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgIkRGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJK
SVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
UHV0S2luZC5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCkBAIC0zMTIwLDcgKzMxMjAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGNhbiBiZSBHUFIgb3IgSW1t
UHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3Ry
dWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIs
IHNsb3dQYXRoKTsKQEAgLTMxMjksNyArMzEyOSw3IEBAIHB1YmxpYzoKICAgICAvLyBBbGxvY2F0
b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUuCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlw
ZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5kLCBNYXNrVHlwZSBjYW4gYmUgR1BS
IG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KAotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRv
ckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIs
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiAjZGVmaW5lIEZPUl9FQUNIX0lO
REVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKEFycmF5U3RvcmFnZV92ZWN0
b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSBcCi0gICAgbWFjcm8oQ29tcGxldGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3Rl
cCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpLCBzaXpl
b2YoTWFya2VkQWxsb2NhdG9yKikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihCbG9ja0RpcmVjdG9yeSopKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFi
bGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNT
dHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODM0LDcgKzU4MzQsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkp
LT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxs
KAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgdm0oKS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCksIHNsb3dQYXRoKTsKQEAgLTk4NjIsNyArOTg2Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICAg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmlu
YWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQmxv
Y2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4aW5nSGVhZGVyU2l6ZSA9IDA7CkBA
IC0xMDg5Myw3ICsxMDg5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291
dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQo
bV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
c3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExOTI2LDkgKzExOTI2LDkgQEAgcHJpdmF0ZToKIAogICAg
IExWYWx1ZSBhbGxvY2F0ZUhlYXBDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQogICAgIHsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3Ig
PSBudWxscHRyOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKGFsbG9jYXRvci0+aGFzSW50UHRyKCkpCi0gICAgICAgICAgICBh
Y3R1YWxBbGxvY2F0b3IgPSBiaXR3aXNlX2Nhc3Q8TWFya2VkQWxsb2NhdG9yKj4oYWxsb2NhdG9y
LT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2Fz
dDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IGVpdGhlciB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvciBpcyBudWxsIG9yIHdlIGRvbid0
IGtub3cgd2hhdCB0aGUKQEAgLTEyMDU1LDcgKzEyMDU1LDcgQEAgcHJpdmF0ZToKICAgICBMVmFs
dWUgYWxsb2NhdGVPYmplY3QoCiAgICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTFZhbHVlIGluZGV4aW5nTWFzaywgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5jb25zdEludFB0cihhbGxv
Y2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIApAQCAtMTIwNzUsNyArMTIwNzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Q29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVT
dWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1
YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gYWN0
dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAgICAgaWYgKCFhY3R1YWxBbGxv
Y2F0b3IpIHsKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CkBAIC0xMjEzNSw3ICsxMjEz
NSw3IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUg
YWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0
byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUg
c2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJCbG9ja0RpcmVjdG9yeS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyAKQEAgLTM5LDE2ICszOSwxNiBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxp
Z25lZE1lbW9yeUFsCiB7CiB9CiAKLXZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0
ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit2b2lkIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rvcnkp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZGlyZWN0b3J5LT5uZXh0
RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwogICAgIAotICAgIGlmIChtX2Fs
bG9jYXRvcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZGlyZWN0b3JpZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlID0gbV9zdWJzcGFjZXMuZmlyc3QoKTsg
c3Vic3BhY2U7IHN1YnNwYWNlID0gc3Vic3BhY2UtPm5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0QWxsb2Nh
dG9yKGFsbG9jYXRvcik7CisgICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3REaXJl
Y3RvcnkoZGlyZWN0b3J5KTsKICAgICB9CiAgICAgCi0gICAgbV9hbGxvY2F0b3JzLmFwcGVuZChz
dGQ6Om1lbV9mbigmTWFya2VkQWxsb2NhdG9yOjpzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKSwgYWxsb2NhdG9yKTsKKyAgICBtX2RpcmVjdG9yaWVzLmFwcGVuZChzdGQ6
Om1lbV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNldE5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IpLCBkaXJlY3RvcnkpOwogfQogCiB2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNp
b24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3Mg
U3Vic3BhY2U7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewpAQCAtNDUsMTMgKzQ1
LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKIAotICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9y
Kik7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgdm9pZCByZWdpc3RlckRpcmVjdG9yeShCbG9j
a0RpcmVjdG9yeSopOworICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERpcmVjdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0b3JpZXMuZmlyc3QoKTsgfQogCiAgICAgdm9pZCByZWdpc3RlclN1
YnNwYWNlKFN1YnNwYWNlKik7CiAKIHByaXZhdGU6Ci0gICAgU2luZ2x5TGlua2VkTGlzdFdpdGhU
YWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNpbmdseUxpbmtlZExpc3RX
aXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKICAgICBTaW5nbHlMaW5rZWRM
aXN0V2l0aFRhaWw8U3Vic3BhY2U+IG1fc3Vic3BhY2VzOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAJKHJldmlz
aW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJp
YnV0ZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgotCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlv
biwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5o
CShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
b3JBdHRyaWJ1dGVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJIZWFwQ2VsbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMgewotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMoKSB7IH0KLSAgICAK
LSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiwgSGVh
cENlbGw6OktpbmQgY2VsbEtpbmQpCi0gICAgICAgIDogZGVzdHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24p
Ci0gICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0gICAgRGVzdHJ1Y3Rpb25N
b2RlIGRlc3RydWN0aW9uIHsgRG9lc05vdE5lZWREZXN0cnVjdGlvbiB9OwotICAgIEhlYXBDZWxs
OjpLaW5kIGNlbGxLaW5kIHsgSGVhcENlbGw6OkpTQ2VsbCB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5jcHAJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmNwcDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRl
ICJBbGxvY2F0aW5nU2NvcGUuaCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNp
bmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
KyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9
IHRydWU7CisKK01hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIHNp
emVfdCBjZWxsU2l6ZSkKKyAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJl
bnRCbG9jaygwKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKKyAgICAsIG1fY2VsbFNpemUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKKyAgICAsIG1faGVhcChoZWFwKQorewor
fQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNl
KQoreworICAgIG1fYXR0cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9z
dWJzcGFjZSA9IHN1YnNwYWNlOworfQorCitib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91
dChkb3VibGUgZGVhZGxpbmUpCit7CisgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hl
Y2sgPSAwOworICAgIGZvciAoYXV0byogYmxvY2sgOiBtX2Jsb2NrcykgeworICAgICAgICBpZiAo
YmxvY2spCisgICAgICAgICAgICBob2xkTG9jayhibG9jay0+YmxvY2soKS5sb2NrKCkpOworICAg
ICAgICArK2l0ZXJzU2luY2VMYXN0VGltZUNoZWNrOworICAgICAgICBpZiAoaXRlcnNTaW5jZUxh
c3RUaW1lQ2hlY2sgPj0gSGVhcDo6c190aW1lQ2hlY2tSZXNvbHV0aW9uKSB7CisgICAgICAgICAg
ICBkb3VibGUgY3VycmVudFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lID4gZGVhZGxpbmUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitNYXJrZWRCbG9jazo6
SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCit7CisgICAg
bV9lbXB0eUN1cnNvciA9IG1fZW1wdHkuZmluZEJpdChtX2VtcHR5Q3Vyc29yLCB0cnVlKTsKKyAg
ICBpZiAobV9lbXB0eUN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKK30KKwordm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVu
dEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Cisg
ICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgQVNTRVJUKG1fZnJlZUxp
c3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAg
bV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkp
LmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKG1fYWxsb2Nh
dGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOworCisgICAgICAgIGlmICh2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl0pKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnN0ZWFs
RW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAgICAgJiYgKHRyYWRlRGVzdHJ1
Y3RvckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAgICAgICBpZiAoTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwo
KSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1
c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNh
bkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhl
IHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tQWxsb2NhdG9yKCk7Cisg
ICAgICAgICAgICBhZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJ
bihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3sKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3Rl
ZCgpKTsKKyAgICAKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOworICAgIAorICAgIC8v
IEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFy
a2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAorICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlz
IHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgorICAgIGlmIChtX2ZyZWVM
aXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVl
TGlzdGVkKCkpOworICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7
CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgQVNTRVJU
KCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFp
c0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2sgPSBi
bG9jazsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAg
ICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gbnVsbHB0cjsgfSk7CisgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9j
dXJyZW50QmxvY2ssIHRydWUpOworICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2Nr
KG1fY3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0
aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKKyAg
ICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVy
cmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0Mg
PSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVj
dE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICB9CisgICAgfQorICAg
IGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5H
Q3MoKSkKKyAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKwordm9pZCogTWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgQVNTRVJUKG1faGVhcC0+dm0o
KS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFtYXJrZWRTcGFjZSgp
LmlzSXRlcmF0aW5nKCkpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmln
aW5hbFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAg
QWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKCptX2hlYXApOworCisgICAgbV9oZWFwLT5jb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29v
ZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgYWxs
b2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVu
IHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBH
QydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAg
CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAg
IAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jaygp
OworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIGFkZEJsb2NrKGJsb2NrKTsKKyAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsK
KyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6
ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCit7CisgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpOworfQorCitz
aXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyhzaXplX3QgYnl0ZXMpCit7
CisgICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CisgICAg
c2l6ZV90IG1pbkFsbG9jYXRpb25TaXplID0gYmxvY2tIZWFkZXJTaXplKCkgKyBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CisgICAgbWluQWxs
b2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6ZSgpLCBt
aW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWlu
QWxsb2NhdGlvblNpemUpOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlQmxvY2soKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUg
PSBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHN1YnNwYWNlKCktPmFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIG1hcmtlZFNwYWNlKCkuZGlkQWRkQmxvY2soaGFuZGxlKTsKKyAgICAKKyAg
ICByZXR1cm4gaGFuZGxlOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgc2l6ZV90IGluZGV4OworICAgIGlmICht
X2ZyZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGluZGV4ID0gbV9ibG9ja3Mu
c2l6ZSgpOworCisgICAgICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IG1fYmxvY2tzLmNhcGFjaXR5
KCk7CisgICAgICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgICAgIGlmIChtX2Jsb2Nr
cy5jYXBhY2l0eSgpICE9IG9sZENhcGFjaXR5KSB7CisgICAgICAgICAgICBmb3JFYWNoQml0VmVj
dG9yKAorICAgICAgICAgICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKKyAgICAgICAgICAgICAg
ICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKHZlY3RvciwgdmVjdG9yLm51bUJpdHMoKSA9PSBvbGRDYXBhY2l0eSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nr
cy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2Uo
KS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGZvckVh
Y2hCaXRWZWN0b3IoCisgICAgICAgICAgICAgICAgbG9ja2VyLAorICAgICAgICAgICAgICAgIFsm
XSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5y
ZXNpemUobV9ibG9ja3MuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IG1fZnJlZUJsb2NrSW5kaWNlcy50YWtl
TGFzdCgpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIG1fYmxv
Y2tzW2luZGV4XSA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAor
ICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYg
dmVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZlY3RvciwgIXZlY3RvcltpbmRl
eF0pOworICAgICAgICB9KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHBvaW50IGF0IHdoaWNoIHRo
ZSBibG9jayBsZWFybnMgb2YgaXRzIGNlbGxTaXplKCkgYW5kIGF0dHJpYnV0ZXMoKS4KKyAgICBi
bG9jay0+ZGlkQWRkVG9BbGxvY2F0b3IodGhpcywgaW5kZXgpOworICAgIAorICAgIHNldElzTGl2
ZShOb0xvY2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKKyAgICBzZXRJc0VtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgaW5kZXgsIHRydWUpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgQVNTRVJUKGJs
b2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2stPmlu
ZGV4KCldID09IGJsb2NrKTsKKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRSZW1vdmVCbG9jayhi
bG9jay0+aW5kZXgoKSk7CisgICAgCisgICAgbV9ibG9ja3NbYmxvY2stPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5pbmRleCgpKTsKKyAg
ICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAorICAgICAgICBob2xkTG9jayhtX2JpdHZlY3Rvckxv
Y2spLAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAg
dmVjdG9yW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAKKyAgICBi
bG9jay0+ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6c3RvcEFsbG9jYXRpbmcoKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhS
YXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7
CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9j
aykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxv
Y2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50Qmxv
Y2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30K
Kwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRy
OworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7
CisgICAgbV9lbXB0eUN1cnNvciA9IDA7CisgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKKyAgICAK
KyAgICBtX2VkZW4uY2xlYXJBbGwoKTsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VJ
bW1vcnRhbE9iamVjdHMoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGFn
YWluLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMjk2CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxpemUoKQoreworICAgIGZv
ckVhY2hCbG9jaygKKyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykgewor
ICAgICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisgICAgICAgIH0pOwor
fQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYg
KCFtX2xhc3RBY3RpdmVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZl
QmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2xhc3RBY3RpdmVCbG9jazsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigp
Cit7CisgICAgLy8gTWFyayBiaXRzIGFyZSBzdGlja3kgYW5kIHNvIGlzIG91ciBzdW1tYXJ5IG9m
IG1hcmsgYml0cy4gV2Ugb25seSBjbGVhciB0aGVzZSBkdXJpbmcgZnVsbAorICAgIC8vIGNvbGxl
Y3Rpb25zLCBzbyBpZiB5b3Ugc3Vydml2ZWQgdGhlIGxhc3QgY29sbGVjdGlvbiB5b3Ugd2lsbCBz
dXJ2aXZlIHRoZSBuZXh0IG9uZSBzbyBsb25nCisgICAgLy8gYXMgdGhlIG5leHQgb25lIGlzIGVk
ZW4uCisgICAgbV9tYXJraW5nTm90RW1wdHkuY2xlYXJBbGwoKTsKKyAgICBtX21hcmtpbmdSZXRp
cmVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjplbmRNYXJraW5nKCkK
K3sKKyAgICBtX2FsbG9jYXRlZC5jbGVhckFsbCgpOworICAgIAorICAgIC8vIEl0J3Mgc3VycHJp
c2luZyBhbmQgZnJ1c3RyYXRpbmcgdG8gY29tcHJlaGVuZCwgYnV0IHRoZSBlbmQtb2YtbWFya2lu
ZyBmbGlwIGRvZXMgbm90IG5lZWQgdG8KKyAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0
aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFy
a2luZ1hZWgorICAgIC8vIHZlY3RvcnMuCisgICAgCisgICAgaWYgKCF0cmFkZURlc3RydWN0b3JC
bG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChtX2VtcHR5Lmlz
RW1wdHkoKSk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9IG1fbGl2ZSAmIH5t
X21hcmtpbmdSZXRpcmVkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW1wdHkgPSBtX2xpdmUg
JiB+bV9tYXJraW5nTm90RW1wdHk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9
IG1fbGl2ZSAmIG1fbWFya2luZ05vdEVtcHR5ICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfQor
ICAgIAorICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJl
IHNvbWUgYmxvY2tzIHRoYXQgd2UgZGlkbid0IGFsbG9jYXRlIG91dCBvZiBpbiB0aGUgbGFzdCBj
eWNsZSwgYnV0IHdlIHN3ZXB0IHRoZW0uIFRoaXMKKyAgICAgICAgLy8gd2lsbCBmb3JnZXQgdGhh
dCB3ZSBkaWQgdGhhdCBhbmQgd2Ugd2lsbCBlbmQgdXAgc3dlZXBpbmcgdGhlbSBhZ2FpbiBhbmQg
YXR0ZW1wdGluZyB0byBjYWxsIHRoZWlyCisgICAgICAgIC8vIGRlc3RydWN0b3JzIGFnYWluLiBU
aGF0J3MgZmluZSBiZWNhdXNlIG9mIHphcHBpbmcuIFRoZSBvbmx5IHRpbWUgd2hlbiB3ZSBjYW5u
b3QgZm9yZ2V0IGlzIHdoZW4KKyAgICAgICAgLy8gd2UganVzdCBhbGxvY2F0ZSBhIGJsb2NrIG9y
IHdoZW4gd2UgbW92ZSBhIGJsb2NrIGZyb20gb25lIHNpemUgY2xhc3MgdG8gYW5vdGhlci4gVGhh
dCBkb2Vzbid0CisgICAgICAgIC8vIGhhcHBlbiBoZXJlLgorICAgICAgICBtX2Rlc3RydWN0aWJs
ZSA9IG1fbGl2ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFM
b2coIkJpdHMgZm9yICIsIG1fY2VsbFNpemUsICIsICIsIG1fYXR0cmlidXRlcywgIiBhZnRlciBl
bmRNYXJraW5nOlxuIik7CisgICAgICAgIGR1bXBCaXRzKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
fQorfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxl
Y3Rpb24oKQoreworICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47Cit9CisKK3ZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit7CisgICAgbV91bnN3
ZXB0ID0gbV9saXZlOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6
OmZpbmRCbG9ja1RvU3dlZXAoKQoreworICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2VwdC5m
aW5kQml0KG1fdW5zd2VwdEN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fdW5zd2VwdEN1cnNvciA+
PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
X2Jsb2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dl
ZXAoKQoreworICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAorICAgICAgICBbJl0gKHNpemVf
dCBpbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Js
b2Nrc1tpbmRleF07CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAg
IH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKK3sKKyAgICAobV9lbXB0
eSAmIH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3Qg
aW5kZXgpIHsKKyAgICAgICAgICAgIG1hcmtlZFNwYWNlKCkuZnJlZUJsb2NrKG1fYmxvY2tzW2lu
ZGV4XSk7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9V
bnN3ZXB0KCkKK3sKKyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKG1fdW5zd2VwdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBkYXRhTG9nKCJBc3NlcnRpb24gZmFpbGVkOiB1bnN3ZXB0IG5vdCBlbXB0eSBpbiAiLCAq
dGhpcywgIi5cbiIpOworICAgIGR1bXBCaXRzKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRB
bGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAg
ICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV9kb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAg
ICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRl
eCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nr
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1f
YWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAg
c2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29s
IG1fZG9uZSB7IGZhbHNlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRhc2soKnRoaXMpKTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBt
X2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9y
OjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQoreworICAgIHVuc2lnbmVkIG1heE5hbWVMZW5n
dGggPSAwOworICAgIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKKyAgICAgICAgTm9Mb2NraW5n
TmVjZXNzYXJ5LAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImLCBjb25zdCBjaGFyKiBuYW1l
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
ICAgICBtYXhOYW1lTGVuZ3RoID0gc3RkOjptYXgobWF4TmFtZUxlbmd0aCwgbGVuZ3RoKTsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKAorICAgICAgICBO
b0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yLCBj
b25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBuYW1lLCAi
OiAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1heE5hbWVMZW5ndGggLSBzdHJs
ZW4obmFtZSk7IGktLTspCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQodmVjdG9yLCAiXG4iKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtlZFNw
YWNlJiBNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdWJzcGFjZS0+c3BhY2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeS5oIgogCiAjaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwogCi1NYXJr
ZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUp
CitCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxT
aXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKICAgICAsIG1fY3VycmVudEJsb2NrKDAp
CiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQpAQCAtNTAsMTMgKzUwLDEzIEBAIE1hcmtlZEFs
bG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGgKIHsKIH0KIAotdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3ZvaWQgQmxvY2tEaXJlY3Rv
cnk6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKIHsKICAgICBtX2F0dHJpYnV0ZXMg
PSBzdWJzcGFjZS0+YXR0cmlidXRlcygpOwogICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKIH0K
IAotYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQorYm9v
bCBCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7CiAgICAgdW5z
aWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwogICAgIGZvciAoYXV0byogYmxvY2sg
OiBtX2Jsb2NrcykgewpAQCAtNzMsNyArNzMsNyBAQCBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQ
YWdlZE91dChkb3VibGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1NYXJrZWRCbG9jazo6SGFu
ZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCitNYXJrZWRCbG9j
azo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKIHsKICAg
ICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwog
ICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKQEAgLTgxLDcgKzgxLDcg
QEAgTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaQogICAgIHJldHVybiBt
X2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENv
bnN1bWVGcmVlTGlzdCgpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkaWRDb25zdW1lRnJlZUxpc3Qo
KQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRp
ZENvbnN1bWVGcmVlTGlzdCgpOwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogfQog
Ci12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQor
dm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQogewog
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKQEAg
LTExOCw3ICsxMTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91
CiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1
dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBj
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAgICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRo
ZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbUFsbG9jYXRvcigpOwor
ICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKICAgICAgICAgICAgIGFk
ZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAg
ICAgICAgfQpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit2b2lkKiBCbG9j
a0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKIHsKICAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3ZvaWQqIEJsb2Nr
RGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewog
ICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwpA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihN
YXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQpCitBTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsK
ICAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9j
YXRvcjo6ZG9UZQogICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQmxvY2tE
aXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBBU1NFUlQobV9oZWFwLT52
bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAgLTE5NCw3ICsxOTQsNyBA
QCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAKICAgICBtX2hlYXAt
PmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKLSAgICAv
LyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhp
cyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKKyAgICAvLyBHb29meSBj
b3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBkaXJlY3Rv
cnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAvLyBoYXBwZW5zIHdoZW4gcnVu
bmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdDJ3Mg
ZmluYWxpemF0aW9uLgogICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKQEAgLTIyMiw3
ICsyMjIsNyBAQCBzdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCiAgICAgcmV0dXJuIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJr
ZWRCbG9jaykpOwogfQogCi1zaXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRl
cyhzaXplX3QgYnl0ZXMpCitzaXplX3QgQmxvY2tEaXJlY3Rvcnk6OmJsb2NrU2l6ZUZvckJ5dGVz
KHNpemVfdCBieXRlcykKIHsKICAgICBzaXplX3QgbWluQmxvY2tTaXplID0gTWFya2VkQmxvY2s6
OmJsb2NrU2l6ZTsKICAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUgPSBibG9ja0hlYWRlclNp
emUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5
dGVzKTsKQEAgLTIzMCw3ICsyMzAsNyBAQCBzaXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1Np
emVGb3JCeXRlCiAgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWluQWxsb2NhdGlv
blNpemUpOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlQmxvY2soKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRyeUFs
bG9jYXRlQmxvY2soKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKICAgICAKQEAgLTI0Myw3ICsyNDMsNyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBN
YXJrZWRBbGxvY2F0b3I6OnRyCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQordm9pZCBCbG9j
a0RpcmVjdG9yeTo6YWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7CiAgICAg
c2l6ZV90IGluZGV4OwogICAgIGlmIChtX2ZyZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CkBA
IC0yODEsMTUgKzI4MSwxNSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2Vk
QmxvCiAgICAgICAgIH0pOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhl
IGJsb2NrIGxlYXJucyBvZiBpdHMgY2VsbFNpemUoKSBhbmQgYXR0cmlidXRlcygpLgotICAgIGJs
b2NrLT5kaWRBZGRUb0FsbG9jYXRvcih0aGlzLCBpbmRleCk7CisgICAgYmxvY2stPmRpZEFkZFRv
RGlyZWN0b3J5KHRoaXMsIGluZGV4KTsKICAgICAKICAgICBzZXRJc0xpdmUoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCBpbmRleCwgdHJ1ZSk7CiAgICAgc2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IGluZGV4LCB0cnVlKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVtb3ZlQmxv
Y2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7Ci0gICAgQVNTRVJUKGJsb2NrLT5hbGxv
Y2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoYmxvY2stPmRpcmVjdG9yeSgpID09IHRoaXMp
OwogICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPT0gYmxvY2spOwogICAgIAog
ICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsKQEAgLTMwMywx
MyArMzAzLDEzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWQKICAg
ICAgICAgICAgIHZlY3RvcltibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsKICAgICAgICAgfSk7CiAg
ICAgCi0gICAgYmxvY2stPmRpZFJlbW92ZUZyb21BbGxvY2F0b3IoKTsKKyAgICBibG9jay0+ZGlk
UmVtb3ZlRnJvbURpcmVjdG9yeSgpOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFs
bG9jYXRpbmcoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmcoKQogewogICAg
IGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRB
bGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRl
cih0aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7CiAgICAgQVNT
RVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewogICAg
ICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CkBAIC0zMjIsNyAr
MzIyLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAgICBtX2Zy
ZWVMaXN0LmNsZWFyKCk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxs
b2NhdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7
CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1fY3VycmVudEJsb2NrID0g
bnVsbHB0cjsKQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cHJlcGFy
ZUZvckFsbG9jYXRpCiAgICAgfQogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5j
ZVRvRmluYWxpemUoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUo
KQogewogICAgIGZvckVhY2hCbG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykgewpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpsYXN0
Q2hhbmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpy
ZXN1bWVBbGxvY2F0aW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmco
KQogewogICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsKQEAgLTM1
OSw3ICszNTksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCiAg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRv
cjo6YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6
YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQogewogICAgIC8vIE1hcmsgYml0cyBhcmUg
c3RpY2t5IGFuZCBzbyBpcyBvdXIgc3VtbWFyeSBvZiBtYXJrIGJpdHMuIFdlIG9ubHkgY2xlYXIg
dGhlc2UgZHVyaW5nIGZ1bGwKICAgICAvLyBjb2xsZWN0aW9ucywgc28gaWYgeW91IHN1cnZpdmVk
IHRoZSBsYXN0IGNvbGxlY3Rpb24geW91IHdpbGwgc3Vydml2ZSB0aGUgbmV4dCBvbmUgc28gbG9u
ZwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdG
b3JGdWwKICAgICBtX21hcmtpbmdSZXRpcmVkLmNsZWFyQWxsKCk7CiB9CiAKLXZvaWQgTWFya2Vk
QWxsb2NhdG9yOjplbmRNYXJraW5nKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OmVuZE1hcmtpbmco
KQogewogICAgIG1fYWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgCkBAIC0zOTksMTcgKzM5OSwx
NyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZW5kTWFya2luZygpCiAgICAgfQogfQogCi12b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKQordm9p
ZCBCbG9ja0RpcmVjdG9yeTo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKQogewog
ICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzbmFw
c2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpzbmFw
c2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCiB7CiAgICAgbV91bnN3ZXB0ID0gbV9saXZl
OwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRCbG9ja1Rv
U3dlZXAoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja1Rv
U3dlZXAoKQogewogICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2VwdC5maW5kQml0KG1fdW5z
d2VwdEN1cnNvciwgdHJ1ZSk7CiAgICAgaWYgKG1fdW5zd2VwdEN1cnNvciA+PSBtX2Jsb2Nrcy5z
aXplKCkpCkBAIC00MTcsNyArNDE3LDcgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxs
b2NhdG9yOjpmaQogICAgIHJldHVybiBtX2Jsb2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOwogfQogCi12
b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6c3dlZXAo
KQogewogICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBp
bmRleCkgewpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgp
CiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKK3ZvaWQg
QmxvY2tEaXJlY3Rvcnk6OnNocmluaygpCiB7CiAgICAgKG1fZW1wdHkgJiB+bV9kZXN0cnVjdGli
bGUpLmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CkBAIC00MzQs
NyArNDM0LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNocmluaygpCiAgICAgICAgIH0pOwog
fQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKK3ZvaWQgQmxvY2tE
aXJlY3Rvcnk6OmFzc2VydE5vVW5zd2VwdCgpCiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJl
ZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6
OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRC
bG9jazo6SGFuZGxlKigpPj4gQmxvY2tEaXJlY3Rvcnk6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1Nv
dXJjZSgpCiB7CiAgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IpCi0gICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAg
ICAgVGFzayhCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KQorICAgICAgICAgICAgOiBtX2RpcmVj
dG9yeShkaXJlY3RvcnkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ2MSwx
NiArNDYxLDE2IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAg
ICAgICAgICAgIGlmIChtX2RvbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBt
X2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0
cnVlKTsKLSAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNp
emUoKSkgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fZGlyZWN0b3J5Lm1fbWFya2luZ05vdEVt
cHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBt
X2RpcmVjdG9yeS5tX2Jsb2Nrcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBtX2RvbmUgPSB0
cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAg
ICAgICByZXR1cm4gbV9kaXJlY3RvcnkubV9ibG9ja3NbbV9pbmRleCsrXTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2Nh
dG9yOworICAgICAgICBCbG9ja0RpcmVjdG9yeSYgbV9kaXJlY3Rvcnk7CiAgICAgICAgIHNpemVf
dCBtX2luZGV4IHsgMCB9OwogICAgICAgICBMb2NrIG1fbG9jazsKICAgICAgICAgYm9vbCBtX2Rv
bmUgeyBmYWxzZSB9OwpAQCAtNDc5LDEyICs0NzksMTIgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFy
a2VkQmxvY2s6OkhhbmRsZSooKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykp
OwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAordm9pZCBCbG9ja0RpcmVjdG9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9h
dHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXBCaXRzKFByaW50U3Ry
ZWFtJiBvdXQpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0
KQogewogICAgIHVuc2lnbmVkIG1heE5hbWVMZW5ndGggPSAwOwogICAgIGZvckVhY2hCaXRWZWN0
b3JXaXRoTmFtZSgKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVt
cEJpdHMoUHJpbnRTdHJlCiAgICAgICAgIH0pOwogfQogCi1NYXJrZWRTcGFjZSYgTWFya2VkQWxs
b2NhdG9yOjptYXJrZWRTcGFjZSgpIGNvbnN0CitNYXJrZWRTcGFjZSYgQmxvY2tEaXJlY3Rvcnk6
Om1hcmtlZFNwYWNlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdWJzcGFjZS0+c3BhY2UoKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAko
cmV2aXNpb24gMjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0Rp
cmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3JBdHRy
aWJ1dGVzLmgiCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5o
IgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVh
cDsKK2NsYXNzIElzb0NlbGxTZXQ7CitjbGFzcyBNYXJrZWRTcGFjZTsKK2NsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKKworI2RlZmluZSBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVCht
YWNybykgXAorICAgIG1hY3JvKGxpdmUsIExpdmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNl
cyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9cCisgICAgbWFjcm8oZW1wdHksIEVtcHR5KSAv
KiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5vIGxpdmUgb2JqZWN0cy4gKi8gXAor
ICAgIG1hY3JvKGFsbG9jYXRlZCwgQWxsb2NhdGVkKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3Mg
dGhhdCBhcmUgZnVsbCBvZiBsaXZlIG9iamVjdHMuICovXAorICAgIG1hY3JvKGNhbkFsbG9jYXRl
QnV0Tm90RW1wdHksIENhbkFsbG9jYXRlQnV0Tm90RW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJs
b2NrcyBhcmUgbmVpdGhlciBlbXB0eSBub3IgcmV0aXJlZCAoaS5lLiBhcmUgbW9yZSB0aGFuIG1p
bk1hcmtlZEJsb2NrVXRpbGl6YXRpb24gZnVsbCkuICovIFwKKyAgICBtYWNybyhkZXN0cnVjdGli
bGUsIERlc3RydWN0aWJsZSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgbWF5IGhhdmUg
ZGVzdHJ1Y3RvcnMgdG8gcnVuLiAqL1wKKyAgICBtYWNybyhlZGVuLCBFZGVuKSAvKiBUaGUgc2V0
IG9mIGFsbCBibG9ja3MgdGhhdCBoYXZlIG5ldyBvYmplY3RzIHNpbmNlIHRoZSBsYXN0IEdDLiAq
L1wKKyAgICBtYWNybyh1bnN3ZXB0LCBVbnN3ZXB0KSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3Mg
dGhhdCBjb3VsZCBiZSBzd2VwdCBieSB0aGUgaW5jcmVtZW50YWwgc3dlZXBlci4gKi9cCisgICAg
XAorICAgIC8qIFRoZXNlIGFyZSBjb21wdXRlZCBkdXJpbmcgbWFya2luZy4gKi9cCisgICAgbWFj
cm8obWFya2luZ05vdEVtcHR5LCBNYXJraW5nTm90RW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJs
b2NrcyB0aGF0IGFyZSBub3QgZW1wdHkuICovIFwKKyAgICBtYWNybyhtYXJraW5nUmV0aXJlZCwg
TWFya2luZ1JldGlyZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSByZXRpcmVk
LiAqLworCisvLyBGSVhNRTogV2UgZGVmaW5lZCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFuZCBl
bXB0eSB0byBiZSBleGNsdXNpdmU6CisvLworLy8gICAgIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
JiBlbXB0eSA9PSAwCisvLworLy8gSW5zdGVhZCBvZiBjYWxsaW5nIGl0IGNhbkFsbG9jYXRlIGFu
ZCBtYWtpbmcgaXQgaW5jbHVzaXZlOgorLy8KKy8vICAgICBjYW5BbGxvY2F0ZSAmIGVtcHR5ID09
IGVtcHR5CisvLworLy8gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBiZXR0ZXIuIEknbGwgbGVhdmUg
aXQgdG8gYSBmdXR1cmUgYnVnIHRvIGZpeCB0aGF0LCBzaW5jZSBicmVhdGhpbmcgb24KKy8vIHRo
aXMgY29kZSBsZWFkcyB0byByZWdyZXNzaW9ucyBmb3IgZGF5cywgYW5kIGl0J3Mgbm90IGNsZWFy
IHRoYXQgbWFraW5nIHRoaXMgY2hhbmdlIHdvdWxkCisvLyBpbXByb3ZlIHBlcmYgc2luY2UgaXQg
d291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZpb3IsIGFuZCBlaXRoZXIgd2F5
IHRoZSBhbGxvY2F0b3IKKy8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0dmVjdG9ycy4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKKworY2xhc3MgTWFy
a2VkQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3Ip
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUo
KTsKKworICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2
b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpOworICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICB2b2lkIHN0b3BBbGxv
Y2F0aW5nKCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgdm9pZCBiZWdpbk1h
cmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIHZvaWQgZW5kTWFya2luZygpOworICAgIHZv
aWQgc25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24oKTsKKyAgICB2b2lkIHNuYXBzaG90
VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgdm9pZCBzd2VlcCgpOworICAgIHZvaWQg
c2hyaW5rKCk7CisgICAgdm9pZCBhc3NlcnROb1Vuc3dlcHQoKTsKKyAgICBzaXplX3QgY2VsbFNp
emUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTaXplOyB9CisgICAgY29uc3QgQWxsb2NhdG9yQXR0
cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAg
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CisgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CisgICAg
SGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2Vs
bEtpbmQ7IH0KKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSk7CisgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQorCisg
ICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1w
dHlCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFy
a2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAg
IAorICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAgIHZvaWQgcmVt
b3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRv
dWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBibG9ja1NpemVGb3JCeXRl
cyhzaXplX3QpOworICAgIAorICAgIExvY2smIGJpdHZlY3RvckxvY2soKSB7IHJldHVybiBtX2Jp
dHZlY3RvckxvY2s7IH0KKyAgIAorI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NFU1NP
UlMobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgICAgIFwKKyAgICBib29sIGlzICMjIGNh
cGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtXyAjIyBsb3dlckJpdE5hbWVbaW5kZXhdOyB9IFwKKyAgICBib29sIGlzICMjIGNh
cGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrKSBjb25zdCB7IHJldHVybiBpcyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIs
IGJsb2NrLT5pbmRleCgpKTsgfSBcCisgICAgdm9pZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShj
b25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCwgYm9vbCB2YWx1ZSkgeyBtXyAjIyBs
b3dlckJpdE5hbWVbaW5kZXhdID0gdmFsdWU7IH0gXAorICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRh
bEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2ssIGJvb2wgdmFsdWUpIHsgc2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUobG9ja2VyLCBi
bG9jay0+aW5kZXgoKSwgdmFsdWUpOyB9CisgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9C
SVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTKQorI3VuZGVmIE1BUktFRF9BTExPQ0FU
T1JfQklUX0FDQ0VTU09SUworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lk
IGZvckVhY2hCaXRWZWN0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBjb25zdCBGdW5jJiBmdW5j
KQorICAgIHsKKyNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sobG93ZXJCaXRO
YW1lLCBjYXBpdGFsQml0TmFtZSkgXAorICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSk7
CisgICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1Jf
QklUX0NBTExCQUNLKTsKKyN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaEJp
dFZlY3RvcldpdGhOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuYyYgZnVuYykK
KyAgICB7CisjZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKGxvd2VyQml0TmFt
ZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyAgICAgICAgZnVuYyhtXyAjIyBsb3dlckJpdE5hbWUsICNj
YXBpdGFsQml0TmFtZSk7CisgICAgICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1B
UktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKTsKKyN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJ
VF9DQUxMQkFDSworICAgIH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KKyAgICBNYXJrZWRBbGxvY2F0
b3IqIG5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2Nh
dG9ySW5TdWJzcGFjZTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjsgfQorICAgIAorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7
IH0KKyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KKyAg
ICB2b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yID0gYWxsb2NhdG9yOyB9CisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVt
cHR5QmxvY2tUb1N0ZWFsKCk7CisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJs
b2NrVG9Td2VlcCgpOworICAgIAorICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Vic3BhY2U7IH0KKyAgICBNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsK
KyAgICAKKyAgICBjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Zy
ZWVMaXN0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOworICAgIAorcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgTWFy
a2VkQmxvY2s7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93
Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2Nh
dGVCbG9jaygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSop
OworICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0
Kik7CisgICAgCisgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICAKKyAgICBWZWN0b3I8TWFy
a2VkQmxvY2s6OkhhbmRsZSo+IG1fYmxvY2tzOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mcmVl
QmxvY2tJbmRpY2VzOworCisgICAgLy8gTXV0YXRvciB1c2VzIHRoaXMgdG8gZ3VhcmQgcmVzaXpp
bmcgdGhlIGJpdHZlY3RvcnMuIFRob3NlIHRoaW5ncyBpbiB0aGUgR0MgdGhhdCBtYXkgcnVuCisg
ICAgLy8gY29uY3VycmVudGx5IHRvIHRoZSBtdXRhdG9yIG11c3QgbG9jayB0aGlzIHdoZW4gYWNj
ZXNzaW5nIHRoZSBiaXR2ZWN0b3JzLgorICAgIExvY2sgbV9iaXR2ZWN0b3JMb2NrOworI2RlZmlu
ZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTihsb3dlckJpdE5hbWUsIGNhcGl0YWxC
aXROYW1lKSBcCisgICAgRmFzdEJpdFZlY3RvciBtXyAjIyBsb3dlckJpdE5hbWU7CisgICAgRk9S
X0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJ
T04pCisjdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04KKyAgICAKKyAgICAv
LyBBZnRlciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNl
IGN1cnNvcnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcg
Yml0dmVjdG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3Qg
bV9hbGxvY2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhh
dCBpcyBhIGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICBzaXplX3QgbV9lbXB0eUN1cnNv
ciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUg
Zm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KKyAgICBz
aXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sg
dGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCisgICAgCisgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7CisgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7CisKKyAgICBMb2NrIG1fbG9jazsKKyAgICB1bnNpZ25l
ZCBtX2NlbGxTaXplOworICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAg
IC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAorICAg
IEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51
bGxwdHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIg
fTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxs
cHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1v
cnlBbGxvY2F0b3IgeyBudWxscHRyIH07Cit9OworCitpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFs
bG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihNYXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90IE1h
cmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihNYXJrZWRBbGxvY2F0b3IsIG1fY2VsbFNpemUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3Rvcnku
aAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tE
aXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0jaW5jbHVkZSAiQWxsb2Nh
dG9yQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
RnJlZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRT
cGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotI2RlZmluZSBGT1JfRUFDSF9N
QVJLRURfQUxMT0NBVE9SX0JJVChtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJF
Q1RPUllfQklUKG1hY3JvKSBcCiAgICAgbWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBi
bG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wKICAgICBtYWNybyhlbXB0
eSwgRW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbm8gbGl2ZSBvYmpl
Y3RzLiAqLyBcCiAgICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0ZWQpIC8qIFRoZSBzZXQgb2Yg
YWxsIGJsb2NrcyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0cy4gKi9cCkBAIC02NSwxMiAr
NjUsMTIgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogLy8KIC8vIFRoZSBsYXR0ZXIg
aXMgcHJvYmFibHkgYmV0dGVyLiBJJ2xsIGxlYXZlIGl0IHRvIGEgZnV0dXJlIGJ1ZyB0byBmaXgg
dGhhdCwgc2luY2UgYnJlYXRoaW5nIG9uCiAvLyB0aGlzIGNvZGUgbGVhZHMgdG8gcmVncmVzc2lv
bnMgZm9yIGRheXMsIGFuZCBpdCdzIG5vdCBjbGVhciB0aGF0IG1ha2luZyB0aGlzIGNoYW5nZSB3
b3VsZAotLy8gaW1wcm92ZSBwZXJmIHNpbmNlIGl0IHdvdWxkIG5vdCBjaGFuZ2UgdGhlIGNvbGxl
Y3RvcidzIGJlaGF2aW9yLCBhbmQgZWl0aGVyIHdheSB0aGUgYWxsb2NhdG9yCisvLyBpbXByb3Zl
IHBlcmYgc2luY2UgaXQgd291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZpb3Is
IGFuZCBlaXRoZXIgd2F5IHRoZSBkaXJlY3RvcnkKIC8vIGhhcyB0byBsb29rIGF0IGJvdGggYml0
dmVjdG9ycy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIx
MjEKIAotY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
YXJrZWRBbGxvY2F0b3IpOworY2xhc3MgQmxvY2tEaXJlY3RvcnkgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJsb2NrRGlyZWN0b3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNzksNyAr
NzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAKLSAgICBNYXJrZWRB
bGxvY2F0b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgQmxvY2tEaXJlY3RvcnkoSGVh
cCosIHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFjZSopOwog
ICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBhcmVGb3JBbGxv
Y2F0aW9uKCk7CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNocmluaygpOwog
ICAgIHZvaWQgYXNzZXJ0Tm9VbnN3ZXB0KCk7CiAgICAgc2l6ZV90IGNlbGxTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jZWxsU2l6ZTsgfQotICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBDZWxs
QXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQog
ICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5k
ZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRl
c3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAg
ICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
Y2VsbEtpbmQ7IH0KQEAgLTExNSw0MCArMTE1LDQwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6
ZV90IGJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCk7CiAgICAgCiAgICAgTG9jayYgYml0dmVjdG9y
TG9jaygpIHsgcmV0dXJuIG1fYml0dmVjdG9yTG9jazsgfQotICAgCi0jZGVmaW5lIE1BUktFRF9B
TExPQ0FUT1JfQklUX0FDQ0VTU09SUyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSAgICAg
XAorCisjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQUNDRVNTT1JTKGxvd2VyQml0TmFtZSwg
Y2FwaXRhbEJpdE5hbWUpICAgICBcCiAgICAgYm9vbCBpcyAjIyBjYXBpdGFsQml0TmFtZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV8gIyMgbG93
ZXJCaXROYW1lW2luZGV4XTsgfSBcCiAgICAgYm9vbCBpcyAjIyBjYXBpdGFsQml0TmFtZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykgY29u
c3QgeyByZXR1cm4gaXMgIyMgY2FwaXRhbEJpdE5hbWUobG9ja2VyLCBibG9jay0+aW5kZXgoKSk7
IH0gXAogICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBzaXplX3QgaW5kZXgsIGJvb2wgdmFsdWUpIHsgbV8gIyMgbG93ZXJCaXROYW1lW2luZGV4
XSA9IHZhbHVlOyB9IFwKICAgICB2b2lkIHNldElzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrLCBib29sIHZh
bHVlKSB7IHNldElzICMjIGNhcGl0YWxCaXROYW1lKGxvY2tlciwgYmxvY2stPmluZGV4KCksIHZh
bHVlKTsgfQotICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FU
T1JfQklUX0FDQ0VTU09SUykKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMK
KyAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9SWV9CSVRfQUND
RVNTT1JTKQorI3VuZGVmIEJMT0NLX0RJUkVDVE9SWV9CSVRfQUNDRVNTT1JTCiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEJpdFZlY3Rvcihjb25zdCBBYnN0
cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotI2RlZmluZSBNQVJLRURfQUxM
T0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCisjZGVm
aW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0
TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSk7Ci0gICAgICAgIEZPUl9F
QUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKTsK
LSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSworICAgICAgICBGT1JfRUFDSF9C
TE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0spOworI3VuZGVm
IEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZShjb25zdCBB
YnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotI2RlZmluZSBNQVJLRURf
QUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCisj
ZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFs
Qml0TmFtZSkgXAogICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSwgI2NhcGl0YWxCaXRO
YW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9D
QVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNL
CisgICAgICAgIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQoQkxPQ0tfRElSRUNUT1JZX0JJ
VF9DQUxMQkFDSyk7CisjdW5kZWYgQkxPQ0tfRElSRUNUT1JZX0JJVF9DQUxMQkFDSwogICAgIH0K
ICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBtX25leHRBbGxvY2F0b3I7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJ
blN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZTsgfQot
ICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjsgfQotICAgIAotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KLSAgICB2b2lkIHNldE5l
eHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4
dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KLSAgICB2b2lkIHNldE5leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
IHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9
CisgICAgQmxvY2tEaXJlY3RvcnkqIG5leHREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX25l
eHREaXJlY3Rvcnk7IH0KKyAgICBCbG9ja0RpcmVjdG9yeSogbmV4dERpcmVjdG9yeUluU3Vic3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlOyB9CisgICAgQmxv
Y2tEaXJlY3RvcnkqIG5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAg
ICAKKyAgICB2b2lkIHNldE5leHREaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkg
eyBtX25leHREaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0KKyAgICB2b2lkIHNldE5leHREaXJlY3Rv
cnlJblN1YnNwYWNlKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9uZXh0RGlyZWN0b3J5
SW5TdWJzcGFjZSA9IGRpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0TmV4dERpcmVjdG9yeUluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1fbmV4dERp
cmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGRpcmVjdG9yeTsgfQogICAgIAogICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIApAQCAt
MTgyLDEwICsxODIsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBNdXRhdG9yIHVzZXMgdGhpcyB0byBn
dWFyZCByZXNpemluZyB0aGUgYml0dmVjdG9ycy4gVGhvc2UgdGhpbmdzIGluIHRoZSBHQyB0aGF0
IG1heSBydW4KICAgICAvLyBjb25jdXJyZW50bHkgdG8gdGhlIG11dGF0b3IgbXVzdCBsb2NrIHRo
aXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMuCiAgICAgTG9jayBtX2JpdHZlY3Rvckxv
Y2s7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xBUkFUSU9OKGxvd2VyQml0TmFt
ZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyNkZWZpbmUgQkxPQ0tfRElSRUNUT1JZX0JJVF9ERUNMQVJB
VElPTihsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCiAgICAgRmFzdEJpdFZlY3RvciBt
XyAjIyBsb3dlckJpdE5hbWU7Ci0gICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFS
S0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04pCi0jdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9C
SVRfREVDTEFSQVRJT04KKyAgICBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKEJMT0NLX0RJ
UkVDVE9SWV9CSVRfREVDTEFSQVRJT04pCisjdW5kZWYgQkxPQ0tfRElSRUNUT1JZX0JJVF9ERUNM
QVJBVElPTgogICAgIAogICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBi
YXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCiAg
ICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUg
aXQgd2FzLgpAQCAtMTk4LDI0ICsxOTgsMjQgQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9sb2Nr
OwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0
dHJpYnV0ZXM7CisgICAgQ2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIC8vIEZJWE1F
OiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogICAgIEhlYXAqIG1f
aGVhcCB7IG51bGxwdHIgfTsKICAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsK
LSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKLSAgICBN
YXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxscHRyIH07Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgeyBudWxscHRyIH07CisgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeSB7IG51
bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSB7
IG51bGxwdHIgfTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAotaW5saW5lIHB0cmRpZmZfdCBNYXJr
ZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoraW5saW5lIHB0cmRpZmZfdCBCbG9ja0Rp
cmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpCiB7Ci0gICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihNYXJrZWRBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQmxvY2tEaXJlY3RvcnksIG1fZnJlZUxpc3QpOwogfQogCi1pbmxpbmUgcHRyZGlmZl90IE1h
cmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCitpbmxpbmUgcHRyZGlmZl90IEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkKIHsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3Rv
cnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOjIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKKyNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZv
aWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gbV9m
cmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0
LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9saXZlLmZvckVhY2hTZXRCaXQoCisgICAgICAgIFsm
XSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBmdW5jdG9yKG1fYmxvY2tzW2luZGV4XSk7
CisgICAgICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQoreworICAgIG1fbWFya2luZ05vdEVtcHR5LmZvckVhY2hTZXRCaXQoCisgICAgICAg
IFsmXSAoc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBmdW5jdG9yKG1fYmxvY2tzW2luZGV4
XSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHJl
dmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0
b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDE4ICsyNSwxOCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitpbmxpbmUgYm9vbCBCbG9ja0RpcmVj
dG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0
KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpCitBTFdBWVNfSU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0
ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCiAgICAg
ICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogewpAQCAtNDUsNyArNDUsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsCiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgbV9saXZlLmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90
IGluZGV4KSB7CkBAIC01Myw3ICs1Myw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdm9pZCAKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgQmxvY2tEaXJlY3Rvcnk6OmZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgbV9tYXJraW5nTm90RW1wdHkuZm9yRWFjaFNldEJpdCgKICAgICAgICAg
WyZdIChzaXplX3QgaW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nl
bGxBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsQXR0cmlidXRlcy5jcHAJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHA6MjI2NzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMu
aCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
dm9pZCBBbGxvY2F0b3JBdHRyaWJ1dGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJ7IiwgZGVzdHJ1Y3Rpb24sICIsICIsIGNlbGxLaW5kLCAifSIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDEz
ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBbGxvY2F0
b3JBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKIAogI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBBbGxvY2F0b3JB
dHRyaWJ1dGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIENlbGxBdHRyaWJ1
dGVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJ7Iiwg
ZGVzdHJ1Y3Rpb24sICIsICIsIGNlbGxLaW5kLCAifSIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCShyZXZpc2lvbiAyMjY3ODMpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuaDoyMjY3ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRlc3RydWN0aW9u
TW9kZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQWxsb2NhdG9yQXR0cmlidXRlcyB7Cisg
ICAgQWxsb2NhdG9yQXR0cmlidXRlcygpIHsgfQorICAgIAorICAgIEFsbG9jYXRvckF0dHJpYnV0
ZXMoRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uLCBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCkK
KyAgICAgICAgOiBkZXN0cnVjdGlvbihkZXN0cnVjdGlvbikKKyAgICAgICAgLCBjZWxsS2luZChj
ZWxsS2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICAKKyAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24geyBEb2Vz
Tm90TmVlZERlc3RydWN0aW9uIH07CisgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQgeyBIZWFw
Q2VsbDo6SlNDZWxsIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCShyZXZpc2lvbiAyMjY3ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3Qg
QWxsb2NhdG9yQXR0cmlidXRlcyB7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcygpIHsgfQorc3Ry
dWN0IENlbGxBdHRyaWJ1dGVzIHsKKyAgICBDZWxsQXR0cmlidXRlcygpIHsgfQogICAgIAotICAg
IEFsbG9jYXRvckF0dHJpYnV0ZXMoRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uLCBIZWFwQ2Vs
bDo6S2luZCBjZWxsS2luZCkKKyAgICBDZWxsQXR0cmlidXRlcyhEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKQogICAgICAgICA6IGRlc3RydWN0aW9u
KGRlc3RydWN0aW9uKQogICAgICAgICAsIGNlbGxLaW5kKGNlbGxLaW5kKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9y
eUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxs
b2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1
ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMu
aCIKQEAgLTQ2LDcgKzQ2LDcgQEAgQ29tcGxldGVTdWJzcGFjZTo6fkNvbXBsZXRlU3Vic3BhY2Uo
KQogewogfQogCi1NYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
cihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQmxvY2tEaXJlY3RvcnkqIENv
bXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUp
OwogfQpAQCAtNTksMTQgKzU5LDE0IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRl
KHNpemVfdCAKIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIHZvaWQgKnJlc3VsdDsKLSAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkKKyAgICBpZiAoQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQogICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIGVsc2UKICAgICAgICAg
cmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKK0Jsb2NrRGlyZWN0b3J5KiBDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVf
dCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwogICAgIHNpemVf
dCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07
CkBAIC03OCwzNiArNzgsMzYgQEAgTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvYwogICAgIC8vIGp1c3QtYXMtZ29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVs
bCBpZiB3ZSdyZSBpbiB0aGUgSklUIHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKICAgICAvLyBh
bGxvY2F0b3IgYXMgInBsZWFzZSBhbHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0
IGNvdWxkIGxlYWQgdG8gcGVyZm9ybWFuY2UKICAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdv
cml0aG0gaGVyZSBpcyBwcmV0dHkgZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhl
IGxvY2ssIHRvCi0gICAgLy8gcHJldmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3Ig
Y3JlYXRpb25zIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKKyAgICAv
LyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IEJsb2NrRGlyZWN0b3J5IGNyZWF0aW9ucyBmcm9tIG11
bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVzCiAgICAgLy8gdGhhdCBhbnkgImZvckVh
Y2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlzIGFsbG9jYXRvciBhZnRl
ciBpdCdzIGluaXRpYWxpemVkCiAgICAgLy8gZW5vdWdoOiBpdCB3aWxsIGhhdmUgCi0gICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7Ci0gICAgaWYgKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmRpcmVjdG9yeUxvY2soKSk7Cisg
ICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVw
W2luZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKICAg
ICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAi
LCAiLCBtX2F0dHJpYnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrZWRBbGxvY2F0b3I+IHVuaXF1ZUFsbG9jYXRvciA9Ci0gICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8TWFya2VkQWxsb2NhdG9yPihtX3NwYWNlLmhlYXAoKSwgc2l6ZUNsYXNzKTsK
LSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHVuaXF1ZUFsbG9jYXRvci5nZXQoKTsK
LSAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKFdURk1vdmUodW5pcXVlQWxsb2NhdG9yKSk7Ci0gICAg
YWxsb2NhdG9yLT5zZXRTdWJzcGFjZSh0aGlzKTsKLSAgICBtX3NwYWNlLmFkZE1hcmtlZEFsbG9j
YXRvcihsb2NrZXIsIGFsbG9jYXRvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0
b3J5PiB1bmlxdWVEaXJlY3RvcnkgPQorICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrRGly
ZWN0b3J5PihtX3NwYWNlLmhlYXAoKSwgc2l6ZUNsYXNzKTsKKyAgICBCbG9ja0RpcmVjdG9yeSog
ZGlyZWN0b3J5ID0gdW5pcXVlRGlyZWN0b3J5LmdldCgpOworICAgIG1fZGlyZWN0b3JpZXMuYXBw
ZW5kKFdURk1vdmUodW5pcXVlRGlyZWN0b3J5KSk7CisgICAgZGlyZWN0b3J5LT5zZXRTdWJzcGFj
ZSh0aGlzKTsKKyAgICBtX3NwYWNlLmFkZEJsb2NrRGlyZWN0b3J5KGxvY2tlciwgZGlyZWN0b3J5
KTsKICAgICBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemVDbGFzcyk7
CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9y
U2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gYWxsb2NhdG9yOworICAgICAgICBt
X2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghaW5kZXgtLSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBhbGxvY2F0
b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKG1fZmlyc3RBbGxvY2F0b3IpOwotICAgIG1f
YWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAg
ICBkaXJlY3RvcnktPnNldE5leHREaXJlY3RvcnlJblN1YnNwYWNlKG1fZmlyc3REaXJlY3Rvcnkp
OworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJEaXJlY3RvcnkoZGlyZWN0
b3J5KTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIG1fZmlyc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7Ci0gICAgcmV0dXJuIGFsbG9jYXRvcjsKKyAgICBtX2ZpcnN0RGlyZWN0b3J5
ID0gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3Rvcnk7CiB9CiAKIHZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQpAQCAtMTIy
LDcgKzEyMiw3IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKIHsK
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwogICAgIAotICAg
IGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpKQorICAgIGlmIChCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFs
bG9jYXRvcikpCiAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAKICAgICBpZiAo
c2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2Nzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM3LDMxICszNywzMyBAQCBwdWJsaWM6CiAgICAgLy8gSW4gc29tZSBjb2RlIHBh
dGhzLCB3ZSBuZWVkIGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBjYWxsIHRoZSB2aXJ0dWFs
IHZlcnNpb24gb2Ygb25lIG9mCiAgICAgLy8gdGhlc2UgZnVuY3Rpb25zLiBUaGF0J3Mgd2h5IHdl
IGRvIGZpbmFsIG1ldGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgogICAgIAotICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxs
b2NhdG9yRm9yTW9kZSk7CisgICAgLy8gRklYTUU6IEN1cnJlbnRseSBzdWJzcGFjZXMgc3BlYWsg
b2YgQmxvY2tEaXJlY3RvcmllcyBhcyAiYWxsb2NhdG9ycyIsIGJ1dCB0aGF0J3MgdGVtcG9yYXJ5
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE1NTkK
KyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9k
ZSkgb3ZlcnJpZGU7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKICAgICAKICAgICB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJl
dHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorICAgIEJsb2NrRGlyZWN0b3J5Kiog
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFsw
XTsgfQogCiBwcml2YXRlOgotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhz
aXplX3QpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CiAg
ICAgCiAgICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxs
b2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KICAgICB2b2lkKiBhbGxvY2F0ZVNsb3co
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAg
dm9pZCogdHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsKICAgICAK
LSAgICBzdGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xh
c3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PE1hcmtlZEFsbG9jYXRvcj4+IG1fYWxsb2NhdG9yczsKKyAgICBzdGQ6OmFycmF5PEJsb2NrRGly
ZWN0b3J5KiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVT
dGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tEaXJlY3Rvcnk+PiBtX2RpcmVj
dG9yaWVzOwogfTsKIAotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1v
ZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9k
ZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtl
ZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKKyAgICAgICAgQmxvY2tEaXJlY3Rvcnkq
IHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1Rv
SW5kZXgoc2l6ZSldOwogICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgY2FzZSBBbGxv
Y2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3I6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0RlZmVycmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MSArMjgsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xhc3MgTWFya2Vk
QWxsb2NhdG9yOworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250
ZXh0IHsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKLSAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxs
b2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIHB1YmxpYzoKICAgICBp
bmxpbmUgR0NEZWZlcnJhbENvbnRleHQoSGVhcCYpOwogICAgIGlubGluZSB+R0NEZWZlcnJhbENv
bnRleHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAy
MjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldElubGluZXMuaCIKICNpbmNsdWRlICJD
b2xsZWN0aW5nU2NvcGUuaCIKQEAgLTU1LDcgKzU2LDYgQEAKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAjaW5jbHVk
ZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3Bl
LmgiCkBAIC0yMjAwLDcgKzIyMDAsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1p
dHMoKQogICAgIHNpemVfdCBjdXJyZW50SGVhcFNpemUgPSAwOwogCiAgICAgLy8gRm9yIG1hcmtl
ZCBzcGFjZSwgd2UgdXNlIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdmlzaXRlZC4gVGhpcyBt
YXRjaGVzIHRoZSBsb2dpYyBmb3IKLSAgICAvLyBNYXJrZWRBbGxvY2F0b3IncyBjYWxscyB0byBk
aWRBbGxvY2F0ZSgpLCB3aGljaCBlZmZlY3RpdmVseSBhY2NvdW50cyBmb3IgdGhlIHRvdGFsIHNp
emUgb2YKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSdzIGNhbGxzIHRvIGRpZEFsbG9jYXRlKCksIHdo
aWNoIGVmZmVjdGl2ZWx5IGFjY291bnRzIGZvciB0aGUgdG90YWwgc2l6ZSBvZgogICAgIC8vIG9i
amVjdHMgYWxsb2NhdGVkIHJhdGhlciB0aGFuIGJsb2NrcyB1c2VkLiBUaGlzIHdpbGwgdW5kZXJl
c3RpbWF0ZSBjYXBhY2l0eSgpLCBhbmQgaW4gY2FzZQogICAgIC8vIG9mIGZyYWdtZW50YXRpb24s
IHRoaXMgbWF5IGJlIHN1YnN0YW50aWFsLiBGb3J0dW5hdGVseSwgbWFya2VkIHNwYWNlIHJhcmVs
eSBmcmFnbWVudHMgYmVjYXVzZQogICAgIC8vIGNlbGxzIHVzdWFsbHkgaGF2ZSBhIG5hcnJvdyBy
YW5nZSBvZiBzaXplcy4gU28sIHRoZSB1bmRlcmVzdGltYXRpb24gaXMgcHJvYmFibHkgT0suCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDcgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFjaGluZVRocmVhZHM7
CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
OwotY2xhc3MgTWFya2VkQWxsb2NhdG9yOworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiBjbGFzcyBN
YXJrZWRBcmd1bWVudEJ1ZmZlcjsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50OwogY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ7CkBAIC0zOTAsNyArMzkwLDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7Ci0gICAg
ZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJl
Y3Rvcnk7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBS
dW5uaW5nU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIGNsYXNzIExhcmdlQWxsb2NhdGlvbjsKIGNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3Mg
U3Vic3BhY2U7CiBjbGFzcyBWTTsKLXN0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1dGVzOworc3RydWN0
IENlbGxBdHRyaWJ1dGVzOwogCiBjbGFzcyBIZWFwQ2VsbCB7CiBwdWJsaWM6CkBAIC02Niw3ICs2
Niw3IEBAIHB1YmxpYzoKICAgICBWTSogdm0oKSBjb25zdDsKICAgICAKICAgICBzaXplX3QgY2Vs
bFNpemUoKSBjb25zdDsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIGFsbG9jYXRvckF0dHJpYnV0
ZXMoKSBjb25zdDsKKyAgICBDZWxsQXR0cmlidXRlcyBjZWxsQXR0cmlidXRlcygpIGNvbnN0Owog
ICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUoKSBjb25zdDsKICAgICBLaW5kIGNl
bGxLaW5kKCkgY29uc3Q7CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAkocmV2aXNpb24g
MjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgQUxXQVlTX0lOTElORSBzaXplX3QgSGVh
cENlbGw6OmNlbGxTaXplKAogICAgIHJldHVybiBtYXJrZWRCbG9jaygpLmNlbGxTaXplKCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgQWxsb2NhdG9yQXR0cmlidXRlcyBIZWFwQ2VsbDo6YWxsb2NhdG9y
QXR0cmlidXRlcygpIGNvbnN0CitBTFdBWVNfSU5MSU5FIENlbGxBdHRyaWJ1dGVzIEhlYXBDZWxs
OjpjZWxsQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGFyZ2VBbGxvY2F0aW9uKCkp
CiAgICAgICAgIHJldHVybiBsYXJnZUFsbG9jYXRpb24oKS5hdHRyaWJ1dGVzKCk7CkBAIC04Miwx
MiArODIsMTIgQEAgQUxXQVlTX0lOTElORSBBbGxvY2F0b3JBdHRyaWJ1dGVzIEhlYXBDZQogCiBB
TFdBWVNfSU5MSU5FIERlc3RydWN0aW9uTW9kZSBIZWFwQ2VsbDo6ZGVzdHJ1Y3Rpb25Nb2RlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gYWxsb2NhdG9yQXR0cmlidXRlcygpLmRlc3RydWN0aW9uOwor
ICAgIHJldHVybiBjZWxsQXR0cmlidXRlcygpLmRlc3RydWN0aW9uOwogfQogCiBBTFdBWVNfSU5M
SU5FIEhlYXBDZWxsOjpLaW5kIEhlYXBDZWxsOjpjZWxsS2luZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGFsbG9jYXRvckF0dHJpYnV0ZXMoKS5jZWxsS2luZDsKKyAgICByZXR1cm4gY2VsbEF0dHJp
YnV0ZXMoKS5jZWxsS2luZDsKIH0KIAogQUxXQVlTX0lOTElORSBTdWJzcGFjZSogSGVhcENlbGw6
OnN1YnNwYWNlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBD
ZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBz
dHJ1Y3QgRGVmYXVsdERlc3Ryb3lGdW5jIHsKICAgICB9CiB9OwogCi1IZWFwQ2VsbFR5cGU6Okhl
YXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitIZWFwQ2VsbFR5cGU6
OkhlYXBDZWxsVHlwZShDZWxsQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogbV9hdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBAQCBj
bGFzcyBIZWFwQ2VsbFR5cGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXBDZWxsVHlw
ZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIEhlYXBDZWxsVHlwZShDZWxsQXR0cmlidXRlcyk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+SGVhcENlbGxUeXBlKCk7CiAKLSAgICBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAg
Y29uc3QgQ2VsbEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXM7IH0KIAogICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBz
cGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAogICAg
IC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1h
cmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKIHByaXZh
dGU6Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgQ2VsbEF0dHJp
YnV0ZXMgbV9hdHRyaWJ1dGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJl
dmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFs
U3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBJbmNyZW1l
bnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQogCiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3Jl
bWVudGFsU3dlZXBlcihIZWFwKiBoZWFwKQogICAgIDogQmFzZShoZWFwLT52bSgpKQotICAgICwg
bV9jdXJyZW50QWxsb2NhdG9yKG51bGxwdHIpCisgICAgLCBtX2N1cnJlbnREaXJlY3RvcnkobnVs
bHB0cikKIHsKIH0KIApAQCAtNzksOCArNzksOCBAQCBib29sIEluY3JlbWVudGFsU3dlZXBlcjo6
c3dlZXBOZXh0QmxvY2soCiAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG51bGxw
dHI7CiAgICAgCi0gICAgZm9yICg7IG1fY3VycmVudEFsbG9jYXRvcjsgbV9jdXJyZW50QWxsb2Nh
dG9yID0gbV9jdXJyZW50QWxsb2NhdG9yLT5uZXh0QWxsb2NhdG9yKCkpIHsKLSAgICAgICAgYmxv
Y2sgPSBtX2N1cnJlbnRBbGxvY2F0b3ItPmZpbmRCbG9ja1RvU3dlZXAoKTsKKyAgICBmb3IgKDsg
bV9jdXJyZW50RGlyZWN0b3J5OyBtX2N1cnJlbnREaXJlY3RvcnkgPSBtX2N1cnJlbnREaXJlY3Rv
cnktPm5leHREaXJlY3RvcnkoKSkgeworICAgICAgICBibG9jayA9IG1fY3VycmVudERpcmVjdG9y
eS0+ZmluZEJsb2NrVG9Td2VlcCgpOwogICAgICAgICBpZiAoYmxvY2spCiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CkBAIC05OCwxMiArOTgsMTIgQEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6
OnN3ZWVwTmV4dEJsb2NrKAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmco
KQogewogICAgIHNjaGVkdWxlVGltZXIoKTsKLSAgICBtX2N1cnJlbnRBbGxvY2F0b3IgPSBtX3Zt
LT5oZWFwLm9iamVjdFNwYWNlKCkuZmlyc3RBbGxvY2F0b3IoKTsKKyAgICBtX2N1cnJlbnREaXJl
Y3RvcnkgPSBtX3ZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZmlyc3REaXJlY3RvcnkoKTsKIH0KIAog
dm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0b3BTd2VlcGluZygpCiB7Ci0gICAgbV9jdXJyZW50
QWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnREaXJlY3RvcnkgPSBudWxscHRyOwog
ICAgIGlmIChtX3ZtKQogICAgICAgICBjYW5jZWxUaW1lcigpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHJldmlzaW9uIDIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGVhcDsKLWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5Owog
CiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVi
bGljOgpAQCAtNDgsNyArNDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9Td2VlcChNb25vdG9u
aWNUaW1lIHN0YXJ0VGltZSk7CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVyKCk7CiAgICAgCi0gICAg
TWFya2VkQWxsb2NhdG9yKiBtX2N1cnJlbnRBbGxvY2F0b3I7CisgICAgQmxvY2tEaXJlY3Rvcnkq
IG1fY3VycmVudERpcmVjdG9yeTsKICAgICBib29sIG1fc2hvdWxkRnJlZUZhc3RNYWxsb2NNZW1v
cnlBZnRlclN3ZWVwaW5nIHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXQuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogCi0jaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5
SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBJc29DZWxsU2V0OjpJc29D
ZWxsU2V0KElzb1N1YnNwYWNlJiBzdWJzcGFjZSkKICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2Up
CiB7Ci0gICAgc2l6ZV90IHNpemUgPSBzdWJzcGFjZS5tX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXpl
KCk7CisgICAgc2l6ZV90IHNpemUgPSBzdWJzcGFjZS5tX2RpcmVjdG9yeS5tX2Jsb2Nrcy5zaXpl
KCk7CiAgICAgbV9ibG9ja3NXaXRoQml0cy5yZXNpemUoc2l6ZSk7CiAgICAgbV9iaXRzLmdyb3co
c2l6ZSk7CiAgICAgc3Vic3BhY2UubV9jZWxsU2V0cy5hcHBlbmQodGhpcyk7CkBAIC01Miw3ICs1
Miw3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICBwdWJs
aWM6CiAgICAgICAgIFRhc2soSXNvQ2VsbFNldCYgc2V0KQogICAgICAgICAgICAgOiBtX3NldChz
ZXQpCi0gICAgICAgICAgICAsIG1fYWxsb2NhdG9yKHNldC5tX3N1YnNwYWNlLm1fYWxsb2NhdG9y
KQorICAgICAgICAgICAgLCBtX2RpcmVjdG9yeShzZXQubV9zdWJzcGFjZS5tX2RpcmVjdG9yeSkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtNjEsMTggKzYxLDE4IEBAIFJlZlB0
cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICAgICAgICAgIGlmIChtX2Rv
bmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIGJpdHMgPSBtX2FsbG9j
YXRvci5tX21hcmtpbmdOb3RFbXB0eSAmIG1fc2V0Lm1fYmxvY2tzV2l0aEJpdHM7CisgICAgICAg
ICAgICBhdXRvIGJpdHMgPSBtX2RpcmVjdG9yeS5tX21hcmtpbmdOb3RFbXB0eSAmIG1fc2V0Lm1f
YmxvY2tzV2l0aEJpdHM7CiAgICAgICAgICAgICBtX2luZGV4ID0gYml0cy5maW5kQml0KG1faW5k
ZXgsIHRydWUpOwotICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9j
a3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2RpcmVjdG9yeS5tX2Js
b2Nrcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgICAgICByZXR1cm4gbV9k
aXJlY3RvcnkubV9ibG9ja3NbbV9pbmRleCsrXTsKICAgICAgICAgfQogICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBJc29DZWxsU2V0JiBtX3NldDsKLSAgICAgICAgTWFya2VkQWxsb2Nh
dG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkmIG1fZGlyZWN0b3J5Owog
ICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKICAgICAgICAgTG9jayBtX2xvY2s7CiAgICAg
ICAgIGJvb2wgbV9kb25lIHsgZmFsc2UgfTsKQEAgLTgzLDcgKzgzLDcgQEAgUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQogCiBORVZFUl9JTkxJTkUgQml0bWFwPE1hcmtl
ZEJsb2NrOjphdG9tc1BlckJsb2NrPiogSXNvQ2VsbFNldDo6YWRkU2xvdyhzaXplX3QgYmxvY2tJ
bmRleCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3Vic3BhY2UubV9hbGxvY2F0
b3IubV9iaXR2ZWN0b3JMb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3Vic3Bh
Y2UubV9kaXJlY3RvcnkubV9iaXR2ZWN0b3JMb2NrKTsKICAgICBhdXRvJiBiaXRzUHRyUmVmID0g
bV9iaXRzW2Jsb2NrSW5kZXhdOwogICAgIGF1dG8qIGJpdHMgPSBiaXRzUHRyUmVmLmdldCgpOwog
ICAgIGlmICghYml0cykgewpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSXNvQ2VsbFNldDo6ZGlk
UmVzaXplQml0cyhzaXplX3QgbmUKIHZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2soc2l6
ZV90IGJsb2NrSW5kZXgpCiB7CiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc3Vic3BhY2UubV9hbGxvY2F0b3IubV9iaXR2ZWN0b3JMb2NrKTsKKyAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fZGlyZWN0b3J5Lm1fYml0dmVjdG9yTG9jayk7
CiAgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKICAgICB9CiAg
ICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lk
IElzb0NlbGxTZXQ6OnN3ZWVwVG9GcmVlTGlzdChNYXJrZWRCCiAgICAgICAgIHsKICAgICAgICAg
ICAgIC8vIEhvbGRpbmcgdGhlIGJpdHZlY3RvciBsb2NrIGhhcHBlbnMgdG8gYmUgZW5vdWdoIGJl
Y2F1c2UgdGhhdCdzIHdoYXQgd2UgYWxzbyBob2xkIGluCiAgICAgICAgICAgICAvLyBvdGhlciBw
bGFjZXMgd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGlzIGJpdHZlY3Rvci4KLSAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5tX2FsbG9jYXRvci5tX2JpdHZlY3Rvckxv
Y2spOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fZGly
ZWN0b3J5Lm1fYml0dmVjdG9yTG9jayk7CiAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Js
b2NrLT5pbmRleCgpXSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1fYml0c1tibG9jay0+
aW5kZXgoKV0gPSBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0SW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Mywx
MCArNjMsMTAgQEAgaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFpbnMoSGVhcENlbAogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGwo
Y29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1f
c3Vic3BhY2UubV9hbGxvY2F0b3I7Ci0gICAgKGFsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eSAm
IG1fYmxvY2tzV2l0aEJpdHMpLmZvckVhY2hTZXRCaXQoCisgICAgQmxvY2tEaXJlY3RvcnkmIGRp
cmVjdG9yeSA9IG1fc3Vic3BhY2UubV9kaXJlY3Rvcnk7CisgICAgKGRpcmVjdG9yeS5tX21hcmtp
bmdOb3RFbXB0eSAmIG1fYmxvY2tzV2l0aEJpdHMpLmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsm
XSAoc2l6ZV90IGJsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGJsb2NrID0gYWxsb2NhdG9yLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBkaXJlY3RvcnkubV9ibG9ja3NbYmxvY2tJbmRleF07
CiAKICAgICAgICAgICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CiAg
ICAgICAgICAgICBibG9jay0+Zm9yRWFjaE1hcmtlZENlbGwoCkBAIC0xMTcsMTAgKzExNywxMCBA
QCBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBJCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYg
ZnVuYykKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc3Vic3BhY2UubV9h
bGxvY2F0b3I7CisgICAgQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSA9IG1fc3Vic3BhY2UubV9k
aXJlY3Rvcnk7CiAgICAgbV9ibG9ja3NXaXRoQml0cy5mb3JFYWNoU2V0Qml0KAogICAgICAgICBb
Jl0gKHNpemVfdCBibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jayA9IGFsbG9jYXRvci5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gZGlyZWN0b3J5Lm1fYmxvY2tzW2Jsb2NrSW5kZXhd
OwogCiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgb3B0aW1pemUgdGhpcyBieSBjaGVj
a2luZyBvdXIgYml0cyBiZWZvcmUgcXVlcnlpbmcgaXNMaXZlLgogICAgICAgICAgICAgLy8gT09Q
UyEgKG5lZWQgYnVnIFVSTCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwzMSArMjYsMzEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKIElzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSkKICAgICA6IFN1YnNwYWNl
KG5hbWUsIGhlYXApCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYWxsb2NhdG9yKCZoZWFw
LCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkK
KyAgICAsIG1fZGlyZWN0b3J5KCZoZWFwLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2Vk
QmxvY2s6OmF0b21TaXplPihzaXplKSkKICAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCiB7CiAgICAg
aW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5nZXQo
KSk7CiAKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygp
KTsKLSAgICBtX2FsbG9jYXRvci5zZXRTdWJzcGFjZSh0aGlzKTsKLSAgICBtX3NwYWNlLmFkZE1h
cmtlZEFsbG9jYXRvcihsb2NrZXIsICZtX2FsbG9jYXRvcik7Ci0gICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckFsbG9jYXRvcigmbV9hbGxvY2F0b3IpOwotICAgIG1fZmlyc3RB
bGxvY2F0b3IgPSAmbV9hbGxvY2F0b3I7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3Nw
YWNlLmRpcmVjdG9yeUxvY2soKSk7CisgICAgbV9kaXJlY3Rvcnkuc2V0U3Vic3BhY2UodGhpcyk7
CisgICAgbV9zcGFjZS5hZGRCbG9ja0RpcmVjdG9yeShsb2NrZXIsICZtX2RpcmVjdG9yeSk7Cisg
ICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeSgmbV9kaXJlY3Rv
cnkpOworICAgIG1fZmlyc3REaXJlY3RvcnkgPSAmbV9kaXJlY3Rvcnk7CiB9CiAKIElzb1N1YnNw
YWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1NYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNl
OjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0Jsb2Nr
RGlyZWN0b3J5KiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0
b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgbW9kZSk7CiB9CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0
ZShzaXplX3Qgc2l6ZSwKIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6
ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRo
aXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9kaXJlY3Rv
cnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5o
CShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgog
I2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL1NpbmdseUxpbmtlZExpc3RXaXRo
VGFpbC5oPgogCkBAIC00MSwxMSArNDEsMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JN
b2RlKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9y
Rm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKIAogICAgIHZvaWQqIGFsbG9jYXRlKHNp
emVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRl
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0
ZU5vblZpcnR1YWwoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CkBAIC01NSwx
NSArNTUsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0
KE1hcmtlZEJsb2NrOjpIYW5kbGUqKSBvdmVycmlkZTsKICAgICAKICAgICBzaXplX3QgbV9zaXpl
OwotICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBCbG9ja0RpcmVjdG9yeSBt
X2RpcmVjdG9yeTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJ
c29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsK
IH07CiAKLWlubGluZSBNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEJsb2NrRGly
ZWN0b3J5KiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNp
emUoKSk7Ci0gICAgcmV0dXJuICZtX2FsbG9jYXRvcjsKKyAgICByZXR1cm4gJm1fZGlyZWN0b3J5
OwogfQogCiAjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlw
ZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBz
aXplb2YodHlwZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFs
bG9jYXRpb24uaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhYm92ZUxvd2VyQm91bmQocmF3UHRyKSAmJiBiZWxvd1Vw
cGVyQm91bmQocmF3UHRyKTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNv
bnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzOyB9CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbikgeyBy
ZXR1cm4gRGVwZW5kZW5jeSgpOyB9CiAgICAgCkBAIC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNOZXdseUFsbG9jYXRlZDsKICAgICBib29sIG1faGFzVmFsaWRDZWxsOwog
ICAgIEF0b21pYzxib29sPiBtX2lzTWFya2VkOwotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBTdWJzcGFj
ZSogbV9zdWJzcGFjZTsKICAgICBXZWFrU2V0IG1fd2Vha1NldDsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw1MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3IuaCIKLQotI2luY2x1ZGUgIkFsbG9jYXRpbmdTY29wZS5oIgotI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRl
ICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5l
cy5oIgotI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgY29uc3Rl
eHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKLQotTWFya2VkQWxsb2NhdG9y
OjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9m
cmVlTGlzdChjZWxsU2l6ZSkKLSAgICAsIG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RB
Y3RpdmVCbG9jaygwKQotICAgICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Vs
bFNpemUpKQotICAgICwgbV9oZWFwKGhlYXApCi17Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9y
OjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3BhY2UpCi17Ci0gICAgbV9hdHRyaWJ1dGVzID0g
c3Vic3BhY2UtPmF0dHJpYnV0ZXMoKTsKLSAgICBtX3N1YnNwYWNlID0gc3Vic3BhY2U7Ci19Ci0K
LWJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKLXsKLSAg
ICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7Ci0gICAgZm9yIChhdXRvKiBi
bG9jayA6IG1fYmxvY2tzKSB7Ci0gICAgICAgIGlmIChibG9jaykKLSAgICAgICAgICAgIGhvbGRM
b2NrKGJsb2NrLT5ibG9jaygpLmxvY2soKSk7Ci0gICAgICAgICsraXRlcnNTaW5jZUxhc3RUaW1l
Q2hlY2s7Ci0gICAgICAgIGlmIChpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA+PSBIZWFwOjpzX3Rp
bWVDaGVja1Jlc29sdXRpb24pIHsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFRpbWUgPiBkZWFkbGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6
ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKLXsKLSAgICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5m
aW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1f
YmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fYmxv
Y2tzW21fZW1wdHlDdXJzb3JdOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3Vt
ZUZyZWVMaXN0KCkKLXsKLSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFy
KCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3Vy
cmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7
Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9j
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJz
b3IsIHRydWUpOwotICAgICAgICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNp
emUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxv
Y2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBm
YWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9j
a3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9j
YXRvcnMoKQotICAgICAgICAmJiAodHJhZGVEZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3Ry
dWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
c3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2Nr
LT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29k
IHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBv
dGhlciBiaXRzLAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFu
Y2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAg
ICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAg
YmxvY2stPnJlbW92ZUZyb21BbGxvY2F0b3IoKTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2Nr
KTsKLSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIHZvaWQqIHJl
c3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7
Ci0gICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5z
d2VlcCgmbV9mcmVlTGlzdCk7Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxl
IG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVz
ZSwgYnV0Ci0gICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBk
byBpdCBzb21ldGltZXMuCi0gICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkp
IHsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2Nr
LT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNGcmVlTGlzdGVkKCkpOwotICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNz
YXJ5LCBibG9jaykpOwotICAgICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShO
b0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9KTsKLSAgICBz
ZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7Ci0gICAg
bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKLXsKLSAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsK
LSAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZl
cnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAg
ICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29w
ZTo6RnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49
IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9u
Q291bnQgPSAwOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKLSAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKLSAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4
dCk7Ci0KLSAgICBBU1NFUlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9o
ZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBk
aWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hl
YXAoKm1faGVhcCk7Ci0KLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVm
ZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNh
bGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2Nr
LiBUaGlzIG9ubHkKLSAgICAvLyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdo
aWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlm
IChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQg
IT0gMCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAg
ICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwot
ICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKLXsK
LSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6
ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7Ci19Ci0KLXNpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJs
b2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRlcykKLXsKLSAgICBzaXplX3QgbWluQmxvY2tTaXpl
ID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKLSAgICBzaXplX3QgbWluQWxsb2NhdGlvblNpemUg
PSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9j
azo6YXRvbVNpemU+KGJ5dGVzKTsKLSAgICBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFsbG9jYXRpb25TaXplKTsKLSAgICBy
ZXR1cm4gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7Ci19Ci0KLU1h
cmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jaygpCi17
Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAot
ICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IE1hcmtlZEJsb2NrOjp0cnlDcmVhdGUo
Km1faGVhcCwgc3Vic3BhY2UoKS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKLSAgICBpZiAo
IWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgbWFya2VkU3BhY2Uo
KS5kaWRBZGRCbG9jayhoYW5kbGUpOwotICAgIAotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZv
aWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykK
LXsKLSAgICBzaXplX3QgaW5kZXg7Ci0gICAgaWYgKG1fZnJlZUJsb2NrSW5kaWNlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7Ci0KLSAgICAgICAgc2l6ZV90
IG9sZENhcGFjaXR5ID0gbV9ibG9ja3MuY2FwYWNpdHkoKTsKLSAgICAgICAgbV9ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKLSAgICAgICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkgIT0gb2xkQ2FwYWNp
dHkpIHsKLSAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgICAgICAgICAgTm9M
b2NraW5nTmVjZXNzYXJ5LAotICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVj
dG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodmVjdG9yLCB2ZWN0b3Iu
bnVtQml0cygpID09IG9sZENhcGFjaXR5KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2tzLmNhcGFjaXR5KCkgPiBvbGRDYXBhY2l0
eSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYml0dmVj
dG9yTG9jayk7Ci0gICAgICAgICAgICBzdWJzcGFjZSgpLT5kaWRSZXNpemVCaXRzKG1fYmxvY2tz
LmNhcGFjaXR5KCkpOwotICAgICAgICAgICAgZm9yRWFjaEJpdFZlY3RvcigKLSAgICAgICAgICAg
ICAgICBsb2NrZXIsCi0gICAgICAgICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnJlc2l6ZShtX2Jsb2Nrcy5jYXBhY2l0eSgp
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGluZGV4ID0gbV9mcmVlQmxvY2tJbmRpY2VzLnRha2VMYXN0KCk7Ci0gICAgICAgIEFTU0VSVCgh
bV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgbV9ibG9ja3NbaW5kZXhdID0gYmxvY2s7Ci0gICAg
fQotICAgIAotICAgIGZvckVhY2hCaXRWZWN0b3IoCi0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2Fy
eSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQodmVjdG9yLCAhdmVjdG9yW2luZGV4XSk7Ci0gICAgICAgIH0pOwotCi0gICAg
Ly8gVGhpcyBpcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGJsb2NrIGxlYXJucyBvZiBpdHMgY2Vs
bFNpemUoKSBhbmQgYXR0cmlidXRlcygpLgotICAgIGJsb2NrLT5kaWRBZGRUb0FsbG9jYXRvcih0
aGlzLCBpbmRleCk7Ci0gICAgCi0gICAgc2V0SXNMaXZlKE5vTG9ja2luZ05lY2Vzc2FyeSwgaW5k
ZXgsIHRydWUpOwotICAgIHNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBpbmRleCwgdHJ1
ZSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6
SGFuZGxlKiBibG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2stPmFsbG9jYXRvcigpID09IHRoaXMp
OwotICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPT0gYmxvY2spOwotICAgIAot
ICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsKLSAgICAKLSAg
ICBtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPSBudWxscHRyOwotICAgIG1fZnJlZUJsb2NrSW5k
aWNlcy5hcHBlbmQoYmxvY2stPmluZGV4KCkpOwotICAgIAotICAgIGZvckVhY2hCaXRWZWN0b3Io
Ci0gICAgICAgIGhvbGRMb2NrKG1fYml0dmVjdG9yTG9jayksCi0gICAgICAgIFsmXSAoRmFzdEJp
dFZlY3RvciYgdmVjdG9yKSB7Ci0gICAgICAgICAgICB2ZWN0b3JbYmxvY2stPmluZGV4KCldID0g
ZmFsc2U7Ci0gICAgICAgIH0pOwotICAgIAotICAgIGJsb2NrLT5kaWRSZW1vdmVGcm9tQWxsb2Nh
dG9yKCk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCi17Ci0g
ICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtl
ZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFzdEFjdGl2
ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVChtX2Zy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAg
bV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9jayA9
IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cHJlcGFyZUZvckFsbG9jYXRpb24oKQotewotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigp
OwotCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKLSAgICBtX2VtcHR5Q3Vyc29yID0gMDsK
LSAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwotICAgIAotICAgIG1fZWRlbi5jbGVhckFsbCgpOwot
Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUltbW9ydGFsT2JqZWN0cygpKSkgewotICAg
ICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgYWdhaW4uCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIyOTYKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjps
YXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCi17Ci0gICAgZm9yRWFjaEJsb2NrKAotICAgICAgICBbJl0g
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKSB7Ci0gICAgICAgICAgICBibG9jay0+bGFzdENo
YW5jZVRvRmluYWxpemUoKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9y
OjpyZXN1bWVBbGxvY2F0aW5nKCkKLXsKLSAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyht
X2ZyZWVMaXN0KTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwotICAg
IG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICAvLyBNYXJrIGJpdHMgYXJl
IHN0aWNreSBhbmQgc28gaXMgb3VyIHN1bW1hcnkgb2YgbWFyayBiaXRzLiBXZSBvbmx5IGNsZWFy
IHRoZXNlIGR1cmluZyBmdWxsCi0gICAgLy8gY29sbGVjdGlvbnMsIHNvIGlmIHlvdSBzdXJ2aXZl
ZCB0aGUgbGFzdCBjb2xsZWN0aW9uIHlvdSB3aWxsIHN1cnZpdmUgdGhlIG5leHQgb25lIHNvIGxv
bmcKLSAgICAvLyBhcyB0aGUgbmV4dCBvbmUgaXMgZWRlbi4KLSAgICBtX21hcmtpbmdOb3RFbXB0
eS5jbGVhckFsbCgpOwotICAgIG1fbWFya2luZ1JldGlyZWQuY2xlYXJBbGwoKTsKLX0KLQotdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmVuZE1hcmtpbmcoKQotewotICAgIG1fYWxsb2NhdGVkLmNsZWFy
QWxsKCk7Ci0gICAgCi0gICAgLy8gSXQncyBzdXJwcmlzaW5nIGFuZCBmcnVzdHJhdGluZyB0byBj
b21wcmVoZW5kLCBidXQgdGhlIGVuZC1vZi1tYXJraW5nIGZsaXAgZG9lcyBub3QgbmVlZCB0bwot
ICAgIC8vIGtub3cgd2hhdCBraW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQga25vd2xlZGdl
IGlzIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgbV9tYXJraW5nWFlaCi0gICAgLy8gdmVjdG9ycy4K
LSAgICAKLSAgICBpZiAoIXRyYWRlRGVzdHJ1Y3RvckJsb2NrcyAmJiBuZWVkc0Rlc3RydWN0aW9u
KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9jYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9lbXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtpbmdOb3RFbXB0eTsKLSAg
ICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgbV9tYXJraW5nTm90RW1w
dHkgJiB+bV9tYXJraW5nUmV0aXJlZDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRzRGVzdHJ1
Y3Rpb24oKSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBibG9ja3MgdGhhdCB3ZSBkaWRu
J3QgYWxsb2NhdGUgb3V0IG9mIGluIHRoZSBsYXN0IGN5Y2xlLCBidXQgd2Ugc3dlcHQgdGhlbS4g
VGhpcwotICAgICAgICAvLyB3aWxsIGZvcmdldCB0aGF0IHdlIGRpZCB0aGF0IGFuZCB3ZSB3aWxs
IGVuZCB1cCBzd2VlcGluZyB0aGVtIGFnYWluIGFuZCBhdHRlbXB0aW5nIHRvIGNhbGwgdGhlaXIK
LSAgICAgICAgLy8gZGVzdHJ1Y3RvcnMgYWdhaW4uIFRoYXQncyBmaW5lIGJlY2F1c2Ugb2YgemFw
cGluZy4gVGhlIG9ubHkgdGltZSB3aGVuIHdlIGNhbm5vdCBmb3JnZXQgaXMgd2hlbgotICAgICAg
ICAvLyB3ZSBqdXN0IGFsbG9jYXRlIGEgYmxvY2sgb3Igd2hlbiB3ZSBtb3ZlIGEgYmxvY2sgZnJv
bSBvbmUgc2l6ZSBjbGFzcyB0byBhbm90aGVyLiBUaGF0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGFw
cGVuIGhlcmUuCi0gICAgICAgIG1fZGVzdHJ1Y3RpYmxlID0gbV9saXZlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoZmFsc2UpIHsKLSAgICAgICAgZGF0YUxvZygiQml0cyBmb3IgIiwgbV9jZWxsU2l6
ZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiIGFmdGVyIGVuZE1hcmtpbmc6XG4iKTsKLSAgICAgICAg
ZHVtcEJpdHMoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpCi17Ci0gICAgbV91bnN3ZXB0
IHw9IG1fZWRlbjsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZv
ckZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICBtX3Vuc3dlcHQgPSBtX2xpdmU7Ci19Ci0KLU1hcmtl
ZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6ZmluZEJsb2NrVG9Td2VlcCgpCi17Ci0g
ICAgbV91bnN3ZXB0Q3Vyc29yID0gbV91bnN3ZXB0LmZpbmRCaXQobV91bnN3ZXB0Q3Vyc29yLCB0
cnVlKTsKLSAgICBpZiAobV91bnN3ZXB0Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fdW5zd2VwdEN1cnNvcl07
Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCi17Ci0gICAgbV91bnN3ZXB0LmZv
ckVhY2hTZXRCaXQoCi0gICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XTsKLSAgICAgICAgICAg
IGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzaHJpbmsoKQotewotICAgIChtX2VtcHR5ICYgfm1fZGVzdHJ1Y3RpYmxlKS5mb3JF
YWNoU2V0Qml0KAotICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgbWFy
a2VkU3BhY2UoKS5mcmVlQmxvY2sobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0K
LXZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQotewotICAgIGlmIChBU1NF
UlRfRElTQUJMRUQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV91bnN3ZXB0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGRhdGFMb2coIkFzc2VydGlvbiBm
YWlsZWQ6IHVuc3dlcHQgbm90IGVtcHR5IGluICIsICp0aGlzLCAiLlxuIik7Ci0gICAgZHVtcEJp
dHMoKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCkKLXsKLSAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFy
a2VkQmxvY2s6OkhhbmRsZSooKT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFzayhNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9y
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIHJ1bigpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2RvbmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3Iu
bV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0cnVlKTsKLSAgICAgICAgICAgIGlm
IChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIG1fZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRl
eCsrXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBNYXJrZWRB
bGxvY2F0b3ImIG1fYWxsb2NhdG9yOwotICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKLSAg
ICAgICAgTG9jayBtX2xvY2s7Ci0gICAgICAgIGJvb2wgbV9kb25lIHsgZmFsc2UgfTsKLSAgICB9
OwotICAgIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOwotfQotCi12b2lk
IE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1
dGVzKTsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXBCaXRzKFByaW50U3RyZWFtJiBv
dXQpCi17Ci0gICAgdW5zaWduZWQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAgZm9yRWFjaEJpdFZl
Y3RvcldpdGhOYW1lKAotICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCi0gICAgICAgIFsmXSAo
RmFzdEJpdFZlY3RvciYsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgICAgIG1heE5hbWVMZW5ndGggPSBzdGQ6
Om1heChtYXhOYW1lTGVuZ3RoLCBsZW5ndGgpOwotICAgICAgICB9KTsKLSAgICAKLSAgICBmb3JF
YWNoQml0VmVjdG9yV2l0aE5hbWUoCi0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKLSAgICAg
ICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICIsIG5hbWUsICI6ICIpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbWF4TmFtZUxlbmd0aCAtIHN0cmxlbihuYW1lKTsgaS0tOykKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAiKTsKLSAgICAgICAgICAgIG91dC5wcmludCh2ZWN0b3IsICJc
biIpOwotICAgICAgICB9KTsKLX0KLQotTWFya2VkU3BhY2UmIE1hcmtlZEFsbG9jYXRvcjo6bWFy
a2VkU3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsMjIxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgotI2lu
Y2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgR0NEZWZlcnJh
bENvbnRleHQ7Ci1jbGFzcyBIZWFwOwotY2xhc3MgSXNvQ2VsbFNldDsKLWNsYXNzIE1hcmtlZFNw
YWNlOwotY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0jZGVmaW5lIEZPUl9FQUNIX01B
UktFRF9BTExPQ0FUT1JfQklUKG1hY3JvKSBcCi0gICAgbWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhl
IHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wKLSAgICBt
YWNybyhlbXB0eSwgRW1wdHkpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbm8g
bGl2ZSBvYmplY3RzLiAqLyBcCi0gICAgbWFjcm8oYWxsb2NhdGVkLCBBbGxvY2F0ZWQpIC8qIFRo
ZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSBmdWxsIG9mIGxpdmUgb2JqZWN0cy4gKi9cCi0g
ICAgbWFjcm8oY2FuQWxsb2NhdGVCdXROb3RFbXB0eSwgQ2FuQWxsb2NhdGVCdXROb3RFbXB0eSkg
LyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIGFyZSBuZWl0aGVyIGVtcHR5IG5vciByZXRpcmVkIChp
LmUuIGFyZSBtb3JlIHRoYW4gbWluTWFya2VkQmxvY2tVdGlsaXphdGlvbiBmdWxsKS4gKi8gXAot
ICAgIG1hY3JvKGRlc3RydWN0aWJsZSwgRGVzdHJ1Y3RpYmxlKSAvKiBUaGUgc2V0IG9mIGFsbCBi
bG9ja3MgdGhhdCBtYXkgaGF2ZSBkZXN0cnVjdG9ycyB0byBydW4uICovXAotICAgIG1hY3JvKGVk
ZW4sIEVkZW4pIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGhhdmUgbmV3IG9iamVjdHMg
c2luY2UgdGhlIGxhc3QgR0MuICovXAotICAgIG1hY3JvKHVuc3dlcHQsIFVuc3dlcHQpIC8qIFRo
ZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGNvdWxkIGJlIHN3ZXB0IGJ5IHRoZSBpbmNyZW1lbnRh
bCBzd2VlcGVyLiAqL1wKLSAgICBcCi0gICAgLyogVGhlc2UgYXJlIGNvbXB1dGVkIGR1cmluZyBt
YXJraW5nLiAqL1wKLSAgICBtYWNybyhtYXJraW5nTm90RW1wdHksIE1hcmtpbmdOb3RFbXB0eSkg
LyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgYXJlIG5vdCBlbXB0eS4gKi8gXAotICAgIG1h
Y3JvKG1hcmtpbmdSZXRpcmVkLCBNYXJraW5nUmV0aXJlZCkgLyogVGhlIHNldCBvZiBhbGwgYmxv
Y2tzIHRoYXQgYXJlIHJldGlyZWQuICovCi0KLS8vIEZJWE1FOiBXZSBkZWZpbmVkIGNhbkFsbG9j
YXRlQnV0Tm90RW1wdHkgYW5kIGVtcHR5IHRvIGJlIGV4Y2x1c2l2ZToKLS8vCi0vLyAgICAgY2Fu
QWxsb2NhdGVCdXROb3RFbXB0eSAmIGVtcHR5ID09IDAKLS8vCi0vLyBJbnN0ZWFkIG9mIGNhbGxp
bmcgaXQgY2FuQWxsb2NhdGUgYW5kIG1ha2luZyBpdCBpbmNsdXNpdmU6Ci0vLwotLy8gICAgIGNh
bkFsbG9jYXRlICYgZW1wdHkgPT0gZW1wdHkKLS8vCi0vLyBUaGUgbGF0dGVyIGlzIHByb2JhYmx5
IGJldHRlci4gSSdsbCBsZWF2ZSBpdCB0byBhIGZ1dHVyZSBidWcgdG8gZml4IHRoYXQsIHNpbmNl
IGJyZWF0aGluZyBvbgotLy8gdGhpcyBjb2RlIGxlYWRzIHRvIHJlZ3Jlc3Npb25zIGZvciBkYXlz
LCBhbmQgaXQncyBub3QgY2xlYXIgdGhhdCBtYWtpbmcgdGhpcyBjaGFuZ2Ugd291bGQKLS8vIGlt
cHJvdmUgcGVyZiBzaW5jZSBpdCB3b3VsZCBub3QgY2hhbmdlIHRoZSBjb2xsZWN0b3IncyBiZWhh
dmlvciwgYW5kIGVpdGhlciB3YXkgdGhlIGFsbG9jYXRvcgotLy8gaGFzIHRvIGxvb2sgYXQgYm90
aCBiaXR2ZWN0b3JzLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MjEyMQotCi1jbGFzcyBNYXJrZWRBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE1hcmtlZEFsbG9jYXRvcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotcHVibGljOgotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwotICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCi0gICAgTWFya2VkQWxsb2NhdG9yKEhlYXAqLCBzaXpl
X3QgY2VsbFNpemUpOwotICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKLSAgICB2b2lk
IGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigp
OwotICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKLSAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmco
KTsKLSAgICB2b2lkIGJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7Ci0gICAgdm9pZCBl
bmRNYXJraW5nKCk7Ci0gICAgdm9pZCBzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigp
OwotICAgIHZvaWQgc25hcHNob3RVbnN3ZXB0Rm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICB2b2lk
IHN3ZWVwKCk7Ci0gICAgdm9pZCBzaHJpbmsoKTsKLSAgICB2b2lkIGFzc2VydE5vVW5zd2VwdCgp
OwotICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KLSAg
ICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzOyB9Ci0gICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KLSAgICBE
ZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb247IH0KLSAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLSAgICBIZWFwKiBoZWFwKCkgeyBy
ZXR1cm4gbV9oZWFwOyB9Ci0KLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCog
dGFyZ2V0KSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICAKLSAgICBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCk7Ci0gICAgCi0gICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9jazo6SGFu
ZGxlKik7Ci0gICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0KLSAg
ICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAKLSAgICBzdGF0aWMgc2l6
ZV90IGJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCk7Ci0gICAgCi0gICAgTG9jayYgYml0dmVjdG9y
TG9jaygpIHsgcmV0dXJuIG1fYml0dmVjdG9yTG9jazsgfQotICAgCi0jZGVmaW5lIE1BUktFRF9B
TExPQ0FUT1JfQklUX0FDQ0VTU09SUyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSAgICAg
XAotICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fICMjIGxvd2VyQml0TmFtZVtpbmRleF07IH0g
XAotICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spIGNvbnN0IHsgcmV0dXJuIGlzICMjIGNh
cGl0YWxCaXROYW1lKGxvY2tlciwgYmxvY2stPmluZGV4KCkpOyB9IFwKLSAgICB2b2lkIHNldElz
ICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc2l6ZV90IGluZGV4LCBi
b29sIHZhbHVlKSB7IG1fICMjIGxvd2VyQml0TmFtZVtpbmRleF0gPSB2YWx1ZTsgfSBcCi0gICAg
dm9pZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
LCBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgYm9vbCB2YWx1ZSkgeyBzZXRJcyAjIyBjYXBp
dGFsQml0TmFtZShsb2NrZXIsIGJsb2NrLT5pbmRleCgpLCB2YWx1ZSk7IH0KLSAgICBGT1JfRUFD
SF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMpCi0j
dW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNTT1JTCi0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFjaEJpdFZlY3Rvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCi0gICAgewotI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJ
VF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCi0gICAgICAgIGZ1bmMo
bV8gIyMgbG93ZXJCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9C
SVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktFRF9BTExPQ0FU
T1JfQklUX0NBTExCQUNLCi0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci0gICAgdm9pZCBmb3JFYWNoQml0VmVjdG9yV2l0aE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBjb25zdCBGdW5jJiBmdW5jKQotICAgIHsKLSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRf
Q0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFtZSkgXAotICAgICAgICBmdW5jKG1f
ICMjIGxvd2VyQml0TmFtZSwgI2NhcGl0YWxCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFS
S0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVm
IE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCi0gICAgfQotICAgIAotICAgIE1hcmtlZEFs
bG9jYXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsg
fQotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9Ci0gICAgTWFya2VkQWxsb2NhdG9y
KiBuZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9Ci0gICAgCi0gICAgdm9p
ZCBzZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFs
bG9jYXRvciA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFj
ZSA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KLSAgICAKLSAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKLSAgICAKLSAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kQmxvY2tUb1N3ZWVwKCk7Ci0gICAgCi0gICAgU3Vic3BhY2UqIHN1
YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQotICAgIE1hcmtlZFNwYWNlJiBt
YXJrZWRTcGFjZSgpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0
YUZpbGUoKSk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0Owot
ICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwot
ICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICBNYXJrZWRCbG9j
azo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVJbihN
YXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6
SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVk
ZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICAKLSAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0Owot
ICAgIAotICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7Ci0gICAgVmVj
dG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGljZXM7Ci0KLSAgICAvLyBNdXRhdG9yIHVzZXMg
dGhpcyB0byBndWFyZCByZXNpemluZyB0aGUgYml0dmVjdG9ycy4gVGhvc2UgdGhpbmdzIGluIHRo
ZSBHQyB0aGF0IG1heSBydW4KLSAgICAvLyBjb25jdXJyZW50bHkgdG8gdGhlIG11dGF0b3IgbXVz
dCBsb2NrIHRoaXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJpdHZlY3RvcnMuCi0gICAgTG9jayBtX2Jp
dHZlY3RvckxvY2s7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xBUkFUSU9OKGxv
d2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKLSAgICBGYXN0Qml0VmVjdG9yIG1fICMjIGxv
d2VyQml0TmFtZTsKLSAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxM
T0NBVE9SX0JJVF9ERUNMQVJBVElPTikKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNM
QVJBVElPTgotICAgIAotICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBi
YXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCi0g
ICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUg
aXQgd2FzLgotICAgIHNpemVfdCBtX2FsbG9jYXRpb25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0
byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBhbGxvY2F0aW9uLgotICAg
IHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sg
dGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkgYWxsb2NhdGlvbiAoYWxsb2NhdGluZyBpbiBl
bXB0eSBibG9ja3MpLgotICAgIHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBvaW50
cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRhbCBz
d2VlcGluZy4KLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jazsK
LSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jazsKLQotICAgIExvY2sg
bV9sb2NrOwotICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRl
cyBtX2F0dHJpYnV0ZXM7Ci0gICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFi
bHkgYmUgcmVmZXJlbmNlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCogbV9oZWFwIHsgbnVsbHB0ciB9OwotICAgIFN1YnNw
YWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0
QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2Nh
dG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKLX07Ci0KLWlubGlu
ZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9mcmVlTGlzdCk7Ci19Ci0K
LWlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKLXsK
LSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShu
b25leGlzdGVudCkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZyZWVMaXN0SW5s
aW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlZNLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZyZWVM
aXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQot
ewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2Fz
ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JF
YWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLXsKLSAgICBtX2xpdmUuZm9yRWFjaFNl
dEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIGZ1bmN0b3Io
bV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hOb3RFbXB0eUJsb2Nr
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi17Ci0gICAgbV9tYXJraW5nTm90RW1wdHkuZm9yRWFj
aFNldEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIGZ1bmN0
b3IobV9ibG9ja3NbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMSArMjcsMTEgQEAKICNpbmNsdWRlICJNYXJr
ZWRCbG9jay5oIgogCiAjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJTdXBlclNh
bXBsZXIuaCIKICNpbmNsdWRlICJTd2VlcGluZ1Njb3BlLmgiCkBAIC03OSw3ICs3OSw3IEBAIE1h
cmtlZEJsb2NrOjpIYW5kbGU6On5IYW5kbGUoKQogICAgICAgICBpZiAoIShiYWxhbmNlICUgMTAp
KQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2VkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwg
IlxuIik7CiAgICAgfQotICAgIHJlbW92ZUZyb21BbGxvY2F0b3IoKTsKKyAgICByZW1vdmVGcm9t
RGlyZWN0b3J5KCk7CiAgICAgbV9ibG9jay0+fk1hcmtlZEJsb2NrKCk7CiAgICAgbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLT5mcmVlQWxpZ25lZE1lbW9yeShtX2Jsb2NrKTsKICAgICBoZWFwLmRp
ZEZyZWVCbG9jayhibG9ja1NpemUpOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6dW5zd2VlcFdpdGhOb04KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
ZXRJc0ZyZWVMaXN0ZWQoKQogewotICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIG1fZGlyZWN0b3J5LT5zZXRJc0VtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIG1faXNGcmVlTGlzdGVkID0gdHJ1
ZTsKIH0KIApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3Rv
cEFsbG9jYXRpbmcKICAgICAKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9p
bnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmchXG4iKTsK
LSAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3Nhcnks
IHRoaXMpKTsKKyAgICBBU1NFUlQoIWRpcmVjdG9yeSgpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdO
ZWNlc3NhcnksIHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKICAgICAgICAg
aWYgKGZhbHNlKQpAQCAtMTUzLDggKzE1Myw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3RvcEFsbG9jYXRpbmcKIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpCiB7Ci0gICAgYWxsb2NhdG9yKCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcywgZmFsc2UpOwotICAgIGFsbG9jYXRvcigpLT5zZXRJc0Rlc3RydWN0aWJs
ZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOworICAgIGRpcmVjdG9yeSgpLT5zZXRJ
c0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKKyAgICBkaXJlY3Rv
cnkoKS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsK
ICAgICBtX2Jsb2NrLT5tX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgbV9ibG9jay0+Y2xlYXJIYXNB
bnlNYXJrZWQoKTsKICAgICBtX2Jsb2NrLT5tX21hcmtpbmdWZXJzaW9uID0gaGVhcCgpLT5vYmpl
Y3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aQogICAgICAgICAKICAgICAgICAgaWYgKGZh
bHNlKQogICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9j
azo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nIVxuIik7Ci0gICAgICAgIEFTU0VSVCghYWxsb2Nh
dG9yKCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOworICAgICAgICBB
U1NFUlQoIWRpcmVjdG9yeSgpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMp
KTsKICAgICAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKQEAgLTIwNSw5ICsyMDUsOSBAQCB2b2lkIE1h
cmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgaWYgKCFhcmVNYXJrc1N0YWxl
KG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gaGFuZGxlKCkuYWxsb2NhdG9yKCk7CisgICAgQmxvY2tEaXJlY3Rv
cnkqIGRpcmVjdG9yeSA9IGhhbmRsZSgpLmRpcmVjdG9yeSgpOwogCi0gICAgaWYgKGhhbmRsZSgp
LmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZChob2xkTG9jayhhbGxvY2F0b3ItPmJpdHZlY3Rvckxv
Y2soKSksICZoYW5kbGUoKSkKKyAgICBpZiAoaGFuZGxlKCkuZGlyZWN0b3J5KCktPmlzQWxsb2Nh
dGVkKGhvbGRMb2NrKGRpcmVjdG9yeS0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpKQogICAg
ICAgICB8fCAhbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24p
KSB7CiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0
aGlzKSwgIjogQ2xlYXJpbmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLlxuIik7
CkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhl
YXBWZQogICAgIG1fbWFya2luZ1ZlcnNpb24gPSBtYXJraW5nVmVyc2lvbjsKICAgICAKICAgICAv
LyBUaGlzIG1lYW5zIHdlJ3JlIHRoZSBmaXJzdCBvbmVzIHRvIG1hcmsgYW55IG9iamVjdCBpbiB0
aGlzIGJsb2NrLgotICAgIGFsbG9jYXRvci0+c2V0SXNNYXJraW5nTm90RW1wdHkoaG9sZExvY2so
YWxsb2NhdG9yLT5iaXR2ZWN0b3JMb2NrKCkpLCAmaGFuZGxlKCksIHRydWUpOworICAgIGRpcmVj
dG9yeS0+c2V0SXNNYXJraW5nTm90RW1wdHkoaG9sZExvY2soZGlyZWN0b3J5LT5iaXR2ZWN0b3JM
b2NrKCkpLCAmaGFuZGxlKCksIHRydWUpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnJlc2V0QWxsb2NhdGVkKCkKQEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmRpZENvbnN1bWVGcmVlCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwg
IjogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNT
RVJUKGlzRnJlZUxpc3RlZCgpKTsKICAgICBtX2lzRnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFs
bG9jYXRvcigpLT5zZXRJc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUp
OworICAgIGRpcmVjdG9yeSgpLT5zZXRJc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRo
aXMsIHRydWUpOwogfQogCiBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCkBAIC0zMDgs
MzQgKzMwOCwzNCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhckhhc0FueU1hcmtlZCgpCiAKIHZv
aWQgTWFya2VkQmxvY2s6Om5vdGVNYXJrZWRTbG93KCkKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IGhhbmRsZSgpLmFsbG9jYXRvcigpOwotICAgIGFsbG9jYXRvci0+c2V0SXNN
YXJraW5nUmV0aXJlZChob2xkTG9jayhhbGxvY2F0b3ItPmJpdHZlY3RvckxvY2soKSksICZoYW5k
bGUoKSwgdHJ1ZSk7CisgICAgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSA9IGhhbmRsZSgpLmRp
cmVjdG9yeSgpOworICAgIGRpcmVjdG9yeS0+c2V0SXNNYXJraW5nUmV0aXJlZChob2xkTG9jayhk
aXJlY3RvcnktPmJpdHZlY3RvckxvY2soKSksICZoYW5kbGUoKSwgdHJ1ZSk7CiB9CiAKLXZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVtb3ZlRnJvbUFsbG9jYXRvcigpCit2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnJlbW92ZUZyb21EaXJlY3RvcnkoKQogewotICAgIGlmICghbV9hbGxvY2F0
b3IpCisgICAgaWYgKCFtX2RpcmVjdG9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1f
YWxsb2NhdG9yLT5yZW1vdmVCbG9jayh0aGlzKTsKKyAgICBtX2RpcmVjdG9yeS0+cmVtb3ZlQmxv
Y2sodGhpcyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9BbGxvY2F0
b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBpbmRleCkKK3ZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9EaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9y
eSwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVChtX2luZGV4ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIEFTU0VSVCghbV9hbGxvY2F0b3IpOworICAgIEFT
U0VSVCghbV9kaXJlY3RvcnkpOwogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvci0+
c3Vic3BhY2UoKS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fYWxpZ25lZE1lbW9yeUFs
bG9jYXRvcik7CisgICAgUkVMRUFTRV9BU1NFUlQoZGlyZWN0b3J5LT5zdWJzcGFjZSgpLT5hbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKICAgICAK
ICAgICBtX2luZGV4ID0gaW5kZXg7Ci0gICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAg
bV9ibG9jay0+bV9zdWJzcGFjZSA9IGFsbG9jYXRvci0+c3Vic3BhY2UoKTsKKyAgICBtX2RpcmVj
dG9yeSA9IGRpcmVjdG9yeTsKKyAgICBtX2Jsb2NrLT5tX3N1YnNwYWNlID0gZGlyZWN0b3J5LT5z
dWJzcGFjZSgpOwogICAgIAotICAgIHNpemVfdCBjZWxsU2l6ZSA9IGFsbG9jYXRvci0+Y2VsbFNp
emUoKTsKKyAgICBzaXplX3QgY2VsbFNpemUgPSBkaXJlY3RvcnktPmNlbGxTaXplKCk7CiAgICAg
bV9hdG9tc1BlckNlbGwgPSAoY2VsbFNpemUgKyBhdG9tU2l6ZSAtIDEpIC8gYXRvbVNpemU7CiAg
ICAgbV9lbmRBdG9tID0gYXRvbXNQZXJCbG9jayAtIG1fYXRvbXNQZXJDZWxsICsgMTsKICAgICAK
LSAgICBtX2F0dHJpYnV0ZXMgPSBhbGxvY2F0b3ItPmF0dHJpYnV0ZXMoKTsKKyAgICBtX2F0dHJp
YnV0ZXMgPSBkaXJlY3RvcnktPmF0dHJpYnV0ZXMoKTsKIAogICAgIGlmIChtX2F0dHJpYnV0ZXMu
Y2VsbEtpbmQgIT0gSGVhcENlbGw6OkpTQ2VsbCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9h
dHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pOwpAQCAtMzUw
LDEzICszNTAsMTMgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0FsbG9jYQog
ICAgIGJsb2NrKCkubV9iaWFzZWRNYXJrQ291bnQgPSBibG9jaygpLm1fbWFya0NvdW50QmlhcyA9
IHN0YXRpY19jYXN0PGludDE2X3Q+KG1hcmtDb3VudEJpYXMpOwogfQogCi12b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmRpZFJlbW92ZUZyb21BbGxvY2F0b3IoKQordm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpkaWRSZW1vdmVGcm9tRGlyZWN0b3J5KCkKIHsKICAgICBBU1NFUlQobV9pbmRleCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKLSAgICBBU1NFUlQobV9hbGxv
Y2F0b3IpOworICAgIEFTU0VSVChtX2RpcmVjdG9yeSk7CiAgICAgCiAgICAgbV9pbmRleCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7Ci0gICAgbV9hbGxvY2F0b3IgPSBudWxs
cHRyOworICAgIG1fZGlyZWN0b3J5ID0gbnVsbHB0cjsKICAgICBtX2Jsb2NrLT5tX3N1YnNwYWNl
ID0gbnVsbHB0cjsKIH0KIApAQCAtMzcxLDggKzM3MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFz
c2VydFZhbGlkQ2VsbChWTSYgdm0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZHVtcFN0YXRl
KFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgIGFsbG9j
YXRvcigpLT5mb3JFYWNoQml0VmVjdG9yV2l0aE5hbWUoCi0gICAgICAgIGhvbGRMb2NrKGFsbG9j
YXRvcigpLT5iaXR2ZWN0b3JMb2NrKCkpLAorICAgIGRpcmVjdG9yeSgpLT5mb3JFYWNoQml0VmVj
dG9yV2l0aE5hbWUoCisgICAgICAgIGhvbGRMb2NrKGRpcmVjdG9yeSgpLT5iaXR2ZWN0b3JMb2Nr
KCkpLAogICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIGJpdHZlY3RvciwgY29uc3QgY2hhciog
bmFtZSkgewogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBuYW1lLCAiOiIsIGJpdHZlY3Rv
cltpbmRleCgpXSA/ICJZRVMiIDogIm5vIik7CiAgICAgICAgIH0pOwpAQCAtMzgwLDcgKzM4MCw3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZHVtcFN0YXRlKFByaW4KIAogU3Vic3BhY2Uq
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN1YnNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxs
b2NhdG9yKCktPnN1YnNwYWNlKCk7CisgICAgcmV0dXJuIGRpcmVjdG9yeSgpLT5zdWJzcGFjZSgp
OwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0KiBmcmVlTGlz
dCkKQEAgLTM4OSwxMiArMzg5LDEyIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAo
RnJlZUxpc3QKICAgICAKICAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2Vl
cFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CiAgICAgCi0gICAgbV9hbGxvY2F0b3ItPnNldElzVW5z
d2VwdChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKKyAgICBtX2RpcmVjdG9yeS0+
c2V0SXNVbnN3ZXB0KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAg
IG1fd2Vha1NldC5zd2VlcCgpOwogICAgIAogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uCi0gICAgICAgICYmIG1f
YWxsb2NhdG9yLT5pc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworICAg
ICAgICAmJiBtX2RpcmVjdG9yeS0+aXNEZXN0cnVjdGlibGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0
aGlzKTsKIAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmICFuZWVkc0Rlc3RydWN0
aW9uKQogICAgICAgICByZXR1cm47CkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0Zy
ZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNG
cmVlTGlzdGVkKCkpOwotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0
YXJnZXQpOworICAgIHJldHVybiBtX2RpcmVjdG9yeS0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNyArMjEsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJDZWxsQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBD
ZWxsLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCkBAIC0zOCw3ICszOCw3IEBAIGNs
YXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7ICAgIAogY2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBI
ZWFwOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgTWFya2VkQWxsb2NhdG9yOworY2xhc3MgQmxvY2tE
aXJlY3Rvcnk7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3Mg
U3Vic3BhY2U7CkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIHZvaWQgbGFz
dENoYW5jZVRvRmluYWxpemUoKTsKIAotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
cigpIGNvbnN0OworICAgICAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KCkgY29uc3Q7CiAg
ICAgICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0OwogICAgICAgICBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3Q7CiAgICAgICAgIEhlYXAq
IGhlYXAoKSBjb25zdDsKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVf
dCBjZWxsU2l6ZSgpOwogICAgICAgICBpbmxpbmUgdW5zaWduZWQgY2VsbHNQZXJCbG9jaygpOwog
ICAgICAgICAKLSAgICAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygp
IGNvbnN0OworICAgICAgICBjb25zdCBDZWxsQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0
OwogICAgICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdDsKICAgICAgICAg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3Q7CiAgICAgICAgIEhlYXBDZWxsOjpLaW5kIGNl
bGxLaW5kKCkgY29uc3Q7CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHJlbW92ZUZyb21BbGxvY2F0b3IoKTsKKyAgICAgICAgdm9pZCByZW1v
dmVGcm9tRGlyZWN0b3J5KCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIGRpZEFkZFRvQWxsb2Nh
dG9yKE1hcmtlZEFsbG9jYXRvciosIHNpemVfdCBpbmRleCk7Ci0gICAgICAgIHZvaWQgZGlkUmVt
b3ZlRnJvbUFsbG9jYXRvcigpOworICAgICAgICB2b2lkIGRpZEFkZFRvRGlyZWN0b3J5KEJsb2Nr
RGlyZWN0b3J5Kiwgc2l6ZV90IGluZGV4KTsKKyAgICAgICAgdm9pZCBkaWRSZW1vdmVGcm9tRGly
ZWN0b3J5KCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYp
OwogICAgICAgICAKQEAgLTIzMiwxMSArMjMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIAog
ICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKICAgICAgICAg
ICAgIAotICAgICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICAgICAg
Q2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAgICBib29sIG1faXNGcmVlTGlzdGVk
IHsgZmFsc2UgfTsKIAogICAgICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9h
bGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBtX2RpcmVjdG9y
eSB7IG51bGxwdHIgfTsKICAgICAgICAgc2l6ZV90IG1faW5kZXggeyBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpIH07CiAgICAgICAgIFdlYWtTZXQgbV93ZWFrU2V0OwogICAgICAg
ICAKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1hcmtlZChjb25z
dCB2b2lkKik7CiAgICAgCiAgICAgc2l6ZV90IGNlbGxTaXplKCk7Ci0gICAgY29uc3QgQWxsb2Nh
dG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0OworICAgIGNvbnN0IENlbGxBdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBoYXNBbnlNYXJrZWQoKSBj
b25zdDsKICAgICB2b2lkIG5vdGVNYXJrZWQoKTsKQEAgLTM5Nyw5ICszOTcsOSBAQCBpbmxpbmUg
TWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0ZvCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYmxvY2tNYXNr
KTsKIH0KIAotaW5saW5lIE1hcmtlZEFsbG9jYXRvciogTWFya2VkQmxvY2s6OkhhbmRsZTo6YWxs
b2NhdG9yKCkgY29uc3QKK2lubGluZSBCbG9ja0RpcmVjdG9yeSogTWFya2VkQmxvY2s6OkhhbmRs
ZTo6ZGlyZWN0b3J5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3I7CisgICAgcmV0
dXJuIG1fZGlyZWN0b3J5OwogfQogCiBpbmxpbmUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0CkBAIC00NTcs
MTIgKzQ1NywxMiBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpjZWxsU2l6ZSgpCiAgICAg
cmV0dXJuIG1faGFuZGxlLmNlbGxTaXplKCk7CiB9CiAKLWlubGluZSBjb25zdCBBbGxvY2F0b3JB
dHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXR0cmlidXRlcygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKIH0KIAotaW5saW5lIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmIE1hcmtlZEJsb2NrOjphdHRyaWJ1dGVzKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2hhbmRsZS5hdHRyaWJ1dGVzKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI2
NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNSw4ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1h
cmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtOTMsMTIgKzkzLDEyIEBA
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmUKIAogaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNBbGxvY2F0ZWQoKQogewotICAgIHJldHVybiBtX2FsbG9j
YXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKKyAgICByZXR1cm4g
bV9kaXJlY3RvcnktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9v
bCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewotICAgIGlmIChhbGxvY2F0b3Io
KS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKKyAgICBpZiAoZGlyZWN0
b3J5KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAogICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xkaW5n
IHRoZSBsb2NrIGJlY2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwgbmV3
bHkKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxp
emVkU3dlCiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAgIG1fYWxsb2NhdG9yLT5zZXRJc0Rl
c3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKKyAgICBtX2RpcmVj
dG9yeS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBl
bXB0eU1vZGUgPT0gSXNFbXB0eQpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0
KGhlYWQsIHNlY3JldCwgY291bnQgKiBjZWxsU2l6ZSk7CiAgICAgICAgIHNldElzRnJlZUxpc3Rl
ZCgpOwogICAgIH0gZWxzZSBpZiAoaXNFbXB0eSkKLSAgICAgICAgbV9hbGxvY2F0b3ItPnNldElz
RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKKyAgICAgICAgbV9kaXJlY3Rv
cnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVy
KCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0ZXMg
IiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwogfQpA
QCAtNDQxLDcgKzQ0MSw3IEBAIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3Ry
dWMKIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSgpCiB7Ci0gICAg
cmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cisg
ICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7
CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgTWFya2VkQmxvY2s6
OkhhbmRsZTo6ZW1wdHlNb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjEsMTEgKzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5
SW5saW5lcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5j
cmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC0y
MTYsOSArMjE2LDkgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZnJlZU1lbW9yeSgpCiAKIHZvaWQgTWFy
a2VkU3BhY2U6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIHsKLSAgICBmb3JFYWNoQWxsb2NhdG9y
KAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25T
dGF0dXMgewotICAgICAgICAgICAgYWxsb2NhdG9yLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7Cisg
ICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0
b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZGlyZWN0b3J5Lmxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICAgICAgfSk7CiAgICAgZm9yIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24g
OiBtX2xhcmdlQWxsb2NhdGlvbnMpCkBAIC0yMjgsOSArMjI4LDkgQEAgdm9pZCBNYXJrZWRTcGFj
ZTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogdm9pZCBNYXJrZWRTcGFjZTo6c3dlZXAoKQogewog
ICAgIG1faGVhcC0+c3dlZXBlcigpLnN0b3BTd2VlcGluZygpOwotICAgIGZvckVhY2hBbGxvY2F0
b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlv
blN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3Iuc3dlZXAoKTsKKyAgICBmb3JFYWNoRGly
ZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3Rvcnkuc3dlZXAoKTsKICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIH0KQEAgLTI5
NSw5ICsyOTUsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogdm9pZCBNYXJr
ZWRTcGFjZTo6c3RvcEFsbG9jYXRpbmcoKQogewogICAgIEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7
Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5zdG9w
QWxsb2NhdGluZygpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tE
aXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIGRp
cmVjdG9yeS5zdG9wQWxsb2NhdGluZygpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQpAQCAtMzI2LDkgKzMyNiw5IEBAIHZvaWQg
TWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVz
dW1lQWxsb2NhdGluZygpCiB7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAg
ICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgK
KyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0
dXMgeworICAgICAgICAgICAgZGlyZWN0b3J5LnJlc3VtZUFsbG9jYXRpbmcoKTsKICAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKICAgICAv
LyBOb3RoaW5nIHRvIGRvIGZvciBMYXJnZUFsbG9jYXRpb25zLgpAQCAtMzM3LDkgKzMzNyw5IEBA
IHZvaWQgTWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogYm9vbCBNYXJrZWRTcGFjZTo6
aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxs
b2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5p
c1BhZ2VkT3V0KGRlYWRsaW5lKSkgeworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsm
XSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAg
ICAgICAgIGlmIChkaXJlY3RvcnkuaXNQYWdlZE91dChkZWFkbGluZSkpIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkRvbmU7CiAgICAgICAgICAgICB9CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBNYXJrZWRT
cGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZAogCiB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlQmxv
Y2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7Ci0gICAgYmxvY2stPmFsbG9jYXRvcigp
LT5yZW1vdmVCbG9jayhibG9jayk7CisgICAgYmxvY2stPmRpcmVjdG9yeSgpLT5yZW1vdmVCbG9j
ayhibG9jayk7CiAgICAgbV9jYXBhY2l0eSAtPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOwogICAg
IG1fYmxvY2tzLnJlbW92ZSgmYmxvY2stPmJsb2NrKCkpOwogICAgIGRlbGV0ZSBibG9jazsKQEAg
LTM2OSw5ICszNjksOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlT3JTaHJpbmtCbG9jayhNYXJr
CiAKIHZvaWQgTWFya2VkU3BhY2U6OnNocmluaygpCiB7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigK
LSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3Rh
dHVzIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5zaHJpbmsoKTsKKyAgICBmb3JFYWNoRGlyZWN0
b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlv
blN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3Rvcnkuc2hyaW5rKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9CkBAIC0zNzks
OSArMzc5LDkgQEAgdm9pZCBNYXJrZWRTcGFjZTo6c2hyaW5rKCkKIHZvaWQgTWFya2VkU3BhY2U6
OmJlZ2luTWFya2luZygpCiB7CiAgICAgaWYgKG1faGVhcC0+Y29sbGVjdGlvblNjb3BlKCkgPT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAg
ICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0
dXMgewotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5iZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVj
dGlvbigpOworICAgICAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICAgICAgWyZdIChCbG9j
a0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAg
ICAgIGRpcmVjdG9yeS5iZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICAgICAgfSk7
CiAKQEAgLTQyOSw5ICs0MjksOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmRNYXJraW5nKCkKICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxsb2NhdGlvbiwgIWFsbG9jYXRpb24tPmlzTmV3bHlB
bGxvY2F0ZWQoKSk7CiAgICAgfQogCi0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZd
IChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAg
ICAgICAgIGFsbG9jYXRvci5lbmRNYXJraW5nKCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAg
ICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMg
eworICAgICAgICAgICAgZGlyZWN0b3J5LmVuZE1hcmtpbmcoKTsKICAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKICAgICAKQEAgLTUxNCwx
NSArNTE0LDE1IEBAIHZvaWQgTWFya2VkU3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayhNYXIKIHZv
aWQgTWFya2VkU3BhY2U6OnNuYXBzaG90VW5zd2VwdCgpCiB7CiAgICAgaWYgKG1faGVhcC0+Y29s
bGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoCi0gICAgICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
KSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5zbmFwc2hv
dFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpOworICAgICAgICBmb3JFYWNoRGlyZWN0b3J5KAor
ICAgICAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25T
dGF0dXMgeworICAgICAgICAgICAgICAgIGRpcmVjdG9yeS5zbmFwc2hvdFVuc3dlcHRGb3JFZGVu
Q29sbGVjdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOwogICAgICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcigKLSAgICAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnNuYXBzaG90VW5z
d2VwdEZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAg
ICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1
cyB7CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LnNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xs
ZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC01MzIsMzAgKzUzMiwzMCBAQCB2b2lkIE1h
cmtlZFNwYWNlOjphc3NlcnROb1Vuc3dlcHQoKQogewogICAgIGlmIChBU1NFUlRfRElTQUJMRUQp
CiAgICAgICAgIHJldHVybjsKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAg
ICAgYWxsb2NhdG9yLmFzc2VydE5vVW5zd2VwdCgpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisg
ICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5hc3NlcnROb1Vuc3dlcHQoKTsKICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIH0KIAogdm9p
ZCBNYXJrZWRTcGFjZTo6ZHVtcEJpdHMoUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBmb3JFYWNo
QWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJ
dGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgb3V0LnByaW50KCJCaXRzIGZvciAiLCBhbGxv
Y2F0b3IsICI6XG4iKTsKLSAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wQml0cyhvdXQpOworICAg
IGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9y
eSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQml0cyBmb3Ig
IiwgZGlyZWN0b3J5LCAiOlxuIik7CisgICAgICAgICAgICBkaXJlY3RvcnkuZHVtcEJpdHMob3V0
KTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAg
ICB9KTsKIH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit2b2lkIE1hcmtlZFNw
YWNlOjphZGRCbG9ja0RpcmVjdG9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIEJsb2NrRGlyZWN0
b3J5KiBkaXJlY3RvcnkpCiB7Ci0gICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxw
dHIpOworICAgIGRpcmVjdG9yeS0+c2V0TmV4dERpcmVjdG9yeShudWxscHRyKTsKICAgICAKICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogCi0gICAgbV9hbGxvY2F0b3JzLmFwcGVuZChzdGQ6
Om1lbV9mbigmTWFya2VkQWxsb2NhdG9yOjpzZXROZXh0QWxsb2NhdG9yKSwgYWxsb2NhdG9yKTsK
KyAgICBtX2RpcmVjdG9yaWVzLmFwcGVuZChzdGQ6Om1lbV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNl
dE5leHREaXJlY3RvcnkpLCBkaXJlY3RvcnkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI2
NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MjEsOSArMjEsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTGFyZ2VBbGxvY2F0
aW9uLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgPGFycmF5PgpAQCAt
MTU3LDEwICsxNTcsMTAgQEAgcHVibGljOgogICAgIExhcmdlQWxsb2NhdGlvbioqIGxhcmdlQWxs
b2NhdGlvbnNGb3JUaGlzQ29sbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFyZ2VBbGxv
Y2F0aW9uc0ZvclRoaXNDb2xsZWN0aW9uRW5kOyB9CiAgICAgdW5zaWduZWQgbGFyZ2VBbGxvY2F0
aW9uc0ZvclRoaXNDb2xsZWN0aW9uU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0
aW9uc0ZvclRoaXNDb2xsZWN0aW9uU2l6ZTsgfQogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciog
Zmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgfQor
ICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGly
ZWN0b3JpZXMuZmlyc3QoKTsgfQogICAgIAotICAgIExvY2smIGFsbG9jYXRvckxvY2soKSB7IHJl
dHVybiBtX2FsbG9jYXRvckxvY2s7IH0KLSAgICB2b2lkIGFkZE1hcmtlZEFsbG9jYXRvcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOworICAgIExvY2smIGRpcmVjdG9y
eUxvY2soKSB7IHJldHVybiBtX2RpcmVjdG9yeUxvY2s7IH0KKyAgICB2b2lkIGFkZEJsb2NrRGly
ZWN0b3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQmxvY2tEaXJlY3RvcnkqKTsKICAgICAKICAg
ICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQg
dGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQpAQCAtMTgxLDcgKzE4MSw3IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFN1YnNwYWNl
OwogICAgIAotICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGlu
IHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvcnMKKyAgICAvLyBVc2UgdGhp
cyB2ZXJzaW9uIHdoZW4gY2FsbGluZyBmcm9tIHdpdGhpbiB0aGUgR0Mgd2hlcmUgd2Uga25vdyB0
aGF0IHRoZSBkaXJlY3RvcmllcwogICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3BwZWQuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3Qg
RnVuY3RvciYpOwogCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGluaXRpYWxpemVTdWJzcGFjZShTdWJzcGFjZSYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaERpcmVjdG9y
eShjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBhZGRBY3RpdmVXZWFrU2V0KFdlYWtT
ZXQqKTsKIApAQCAtMjE0LDI2ICsyMTQsMjYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8V2Vha1NldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8V2Vha1NldD4+IG1fYWN0aXZlV2Vh
a1NldHM7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2ljUmF3U2VudGluZWxO
b2RlPFdlYWtTZXQ+PiBtX25ld0FjdGl2ZVdlYWtTZXRzOwogCi0gICAgTG9jayBtX2FsbG9jYXRv
ckxvY2s7Ci0gICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9h
bGxvY2F0b3JzOworICAgIExvY2sgbV9kaXJlY3RvcnlMb2NrOworICAgIFNpbmdseUxpbmtlZExp
c3RXaXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKIAogICAgIGZyaWVuZCBj
bGFzcyBIZWFwVmVyaWZpZXI7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5s
aW5lIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3Iu
Zm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsm
XSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAg
ICAgICAgIGRpcmVjdG9yeS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQordm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaERpcmVjdG9y
eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvciAoTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgYWxsb2NhdG9yOyBhbGxvY2F0b3IgPSBh
bGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBpZiAoZnVuY3RvcigqYWxsb2Nh
dG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgZm9yIChCbG9ja0RpcmVjdG9yeSog
ZGlyZWN0b3J5ID0gbV9kaXJlY3Rvcmllcy5maXJzdCgpOyBkaXJlY3Rvcnk7IGRpcmVjdG9yeSA9
IGRpcmVjdG9yeS0+bmV4dERpcmVjdG9yeSgpKSB7CisgICAgICAgIGlmIChmdW5jdG9yKCpkaXJl
Y3RvcnkpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZUlubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsOSArMjcs
OSBAQAogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKICNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVj
dGlvblNjb3BlLmgiCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgU3Vic3BhY2U6OmluaXRpYWxpemUo
SGVhcENlbGxUeXBlKiAKICAgICBtX2F0dHJpYnV0ZXMgPSBoZWFwQ2VsbFR5cGUtPmF0dHJpYnV0
ZXMoKTsKICAgICBtX2hlYXBDZWxsVHlwZSA9IGhlYXBDZWxsVHlwZTsKICAgICBtX2FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IgPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwotICAgIG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFsbG9j
YXRvcigpOworICAgIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLT5maXJzdERpcmVjdG9yeSgpOwogCiAgICAgSGVhcCYgaGVhcCA9ICptX3Nw
YWNlLmhlYXAoKTsKICAgICBQcmV2ZW50Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9u
U2NvcGUoaGVhcCk7CkBAIC03Miw2NSArNzIsNjUgQEAgdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShW
TSYgdm0sIEpTQ2VsbCogYwogCiB2b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigp
CiB7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvcikgewotICAgICAgICAgICAgYWxsb2NhdG9yLnByZXBhcmVGb3JBbGxvY2F0aW9u
KCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYg
ZGlyZWN0b3J5KSB7CisgICAgICAgICAgICBkaXJlY3RvcnkucHJlcGFyZUZvckFsbG9jYXRpb24o
KTsKICAgICAgICAgfSk7CiAKLSAgICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1f
YWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+Zmlyc3RBbGxvY2F0b3IoKTsKKyAgICBtX2RpcmVjdG9y
eUZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+Zmlyc3REaXJl
Y3RvcnkoKTsKIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0eUJs
b2NrVG9TdGVhbCgpCiB7Ci0gICAgZm9yICg7IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9u
OyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxv
Y2F0aW9uLT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsKLSAgICAg
ICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFs
bG9jYXRpb24tPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKQorICAgIGZvciAoOyBtX2RpcmVjdG9y
eUZvckVtcHR5QWxsb2NhdGlvbjsgbV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2Rp
cmVjdG9yeUZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpKSB7CisgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
ZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkKICAg
ICAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LVJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxl
bEFsbG9jYXRvclNvdXJjZSgpCitSZWZQdHI8U2hhcmVkVGFzazxCbG9ja0RpcmVjdG9yeSooKT4+
IFN1YnNwYWNlOjpwYXJhbGxlbERpcmVjdG9yeVNvdXJjZSgpCiB7Ci0gICAgY2xhc3MgVGFzayA6
IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIGNsYXNzIFRhc2sg
OiBwdWJsaWMgU2hhcmVkVGFzazxCbG9ja0RpcmVjdG9yeSooKT4gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICAgICAgICAgIDogbV9h
bGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICBUYXNrKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rv
cnkpCisgICAgICAgICAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRl
CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBydW4oKSBvdmVycmlkZQogICAgICAgICB7CiAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIHJlc3VsdCA9IG1fZGlyZWN0b3J5OwogICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UoKTsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdG9yeSA9IHJlc3VsdC0+bmV4dERpcmVjdG9y
eUluU3Vic3BhY2UoKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OwogICAgICAgICBMb2NrIG1f
bG9jazsKICAgICB9OwogICAgIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzayhtX2ZpcnN0
QWxsb2NhdG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3REaXJlY3Rv
cnkpKTsKIH0KIAogUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1
YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKQogewotICAgIHJldHVy
biBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxv
Y2s6OkhhbmRsZSo+KAotICAgICAgICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAotICAgICAg
ICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1h
cmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7Ci0gICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICByZXR1cm4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyPEJsb2NrRGlyZWN0b3J5KiwgTWFy
a2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxlbERpcmVjdG9yeVNvdXJjZSgpLAor
ICAgICAgICBbXSAoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkgLT4gUmVmUHRyPFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICghZGlyZWN0b3J5
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgICAgICAgICByZXR1
cm4gZGlyZWN0b3J5LT5wYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKICAgICAgICAgfSk7
CiB9CiAKIHZvaWQgU3Vic3BhY2U6OnN3ZWVwKCkKIHsKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAot
ICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Ci0gICAgICAgICAgICBh
bGxvY2F0b3Iuc3dlZXAoKTsKKyAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJs
b2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5zd2VlcCgp
OwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDI3ICs0OSwyNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
Y2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KICAgICBNYXJrZWRT
cGFjZSYgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAgICAgCi0gICAgY29uc3Qg
QWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlczsgfQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAgICAgSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2hlYXBDZWxsVHlwZTsgfQogICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3I7IH0KICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmLCBGcmVlTGlzdCopOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwogCi0g
ICAgdmlydHVhbCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRv
ckZvck1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Io
c2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIAotICAgIHZvaWQg
ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9h
bGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBhbGxvY2F0b3I7IH0KKyAgICB2b2lkIGRpZENy
ZWF0ZUZpcnN0RGlyZWN0b3J5KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9kaXJlY3Rv
cnlGb3JFbXB0eUFsbG9jYXRpb24gPSBkaXJlY3Rvcnk7IH0KICAgICAKICAgICAvLyBGaW5kcyBh
biBlbXB0eSBibG9jayBmcm9tIGFueSBTdWJzcGFjZSB0aGF0IGFncmVlcyB0byB0cmFkZSBibG9j
a3Mgd2l0aCB1cy4KICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3Rl
YWwoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFj
aEFsbG9jYXRvcihjb25zdCBGdW5jJik7CisgICAgdm9pZCBmb3JFYWNoRGlyZWN0b3J5KGNvbnN0
IEZ1bmMmKTsKICAgICAKLSAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+
PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPEJsb2Nr
RGlyZWN0b3J5KigpPj4gcGFyYWxsZWxEaXJlY3RvcnlTb3VyY2UoKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1
bmMmKTsKQEAgLTEwNiwxMyArMTA2LDEzIEBAIHByb3RlY3RlZDoKICAgICBNYXJrZWRTcGFjZSYg
bV9zcGFjZTsKICAgICAKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1
dGVzIG1fYXR0cmlidXRlczsKKyAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAKICAg
ICBIZWFwQ2VsbFR5cGUqIG1faGVhcENlbGxUeXBlIHsgbnVsbHB0ciB9OwogICAgIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAg
ICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0b3IgeyBudWxscHRyIH07Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiB7IG51bGxw
dHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxpc3Qgb2YgYmxvY2tzLgorICAg
IEJsb2NrRGlyZWN0b3J5KiBtX2ZpcnN0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OworICAgIEJsb2Nr
RGlyZWN0b3J5KiBtX2RpcmVjdG9yeUZvckVtcHR5QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8g
VXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxpc3Qgb2YgYmxvY2tzLgogICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxMYXJnZUFsbG9jYXRpb24sIEJhc2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxs
b2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0aW9uczsKICAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3Bh
Y2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCbG9j
a0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkBAIC0zNCwyNyArMzQsMjcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBTdWJz
cGFjZTo6Zm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJiBmdW5jKQordm9pZCBTdWJzcGFjZTo6
Zm9yRWFjaERpcmVjdG9yeShjb25zdCBGdW5jJiBmdW5jKQogewotICAgIGZvciAoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ZpcnN0QWxsb2NhdG9yOyBhbGxvY2F0b3I7IGFsbG9jYXRv
ciA9IGFsbG9jYXRvci0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSkKLSAgICAgICAgZnVuYygq
YWxsb2NhdG9yKTsKKyAgICBmb3IgKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkgPSBtX2ZpcnN0
RGlyZWN0b3J5OyBkaXJlY3Rvcnk7IGRpcmVjdG9yeSA9IGRpcmVjdG9yeS0+bmV4dERpcmVjdG9y
eUluU3Vic3BhY2UoKSkKKyAgICAgICAgZnVuYygqZGlyZWN0b3J5KTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBG
dW5jJiBmdW5jKQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5mb3JFYWNoQmxv
Y2soZnVuYyk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVj
dG9yeSYgZGlyZWN0b3J5KSB7CisgICAgICAgICAgICBkaXJlY3RvcnkuZm9yRWFjaEJsb2NrKGZ1
bmMpOwogICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vi
c3BhY2U6OmZvckVhY2hOb3RFbXB0eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0g
ICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9j
YXRvcikgewotICAgICAgICAgICAgYWxsb2NhdG9yLmZvckVhY2hOb3RFbXB0eUJsb2NrKGZ1bmMp
OworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRp
cmVjdG9yeSkgeworICAgICAgICAgICAgZGlyZWN0b3J5LmZvckVhY2hOb3RFbXB0eUJsb2NrKGZ1
bmMpOwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0
OTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIHZh
bHVlIGhlbGQgaW4gYWxsb2NhdG9yR1BSIGlzIG5vbi1udWxsLiBUaGlzIERPRVMgTk9UIG1lYW4K
ICAgICAvLyB0aGF0IGFsbG9jYXRvciBpcyBub24tbnVsbDsgYWxsb2NhdG9yIGNhbiBiZSBudWxs
IGFzIGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQogICAgIC8vIHZhbHVlIG9m
IGFsbG9jYXRvckdQUiBpcy4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2Nh
dG9yKEdQUlJlZyByZXN1bHRHUFIsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAg
IHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIC8vIE5PVEU6IFRo
aXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBk
aXNhbGxvdyBzY3JhdGNoCiAgICAgICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgpAQCAtMTUwNSwyMiAr
MTUwNSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEp1bXAgcG9wUGF0aDsKICAgICAgICAgSnVtcCBk
b25lOwogICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJr
ZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFp
bmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
UmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIGlmIChhbGxvY2F0b3IpCiAgICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSksIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKICAg
ICAgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZD
ZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwg
QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAgICAg
IHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsK
LSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBN
YXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBh
eWxvYWRFbmQoKSk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zm
c2V0T2ZSZW1haW5pbmcoKSkpOworICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAg
ICAgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxz
ZSB7CkBAIC0xNTMyLDExICsxNTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBv
cFBhdGgubGluayh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7CiAgICAgICAg
IGlmIChpc1g4NigpKQotICAgICAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBN
YXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNl
Y3JldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlNlY3JldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIHhvclB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwogICAgICAgICB9
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikp
OwpAQCAtMTU0NCwxMiArMTU0NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRoZSBvYmplY3Qg
aXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0
LCBidXQKICAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCiAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7
CisgICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9j
a0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1i
bGVkSGVhZCgpKSk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRH
UFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBpZiAoIWFs
bG9jYXRvcikKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8s
IGFsbG9jYXRvckdQUikpOwpAQCAtMTU1NywxNCArMTU1NywxNCBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0
QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcg
c2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQ
UiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAg
ICAgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJl
VHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBlPgotICAgIHZvaWQg
ZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJl
c3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1h
c2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAg
ICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwg
c3RydWN0dXJlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKHN0b3Jh
Z2UsIEFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAg
LTE1NzYsNyArMTU3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgVk0mIHZtLCBHUFJSZWcgcmVzdWx0
R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5
cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIs
IEp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNz
VHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEpJVDsKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNs
YXNzIEludGVycHJldGVyOwotICAgIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKyAgICBjbGFzcyBC
bG9ja0RpcmVjdG9yeTsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBTdHJ1Y3R1cmVD
aGFpbjsKICAgICBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNw
YWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJs
b2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92
bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0
dXJuVmFsdWVHUFI7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI2Nzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNw
YWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJs
b2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92
bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgSlNEZXN0cnVjdGlibGVP
YmplY3REZXN0cm95RnVuYyB7CiB9OwogCiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBl
KEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkp
CisgICAgOiBIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVh
cENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdERlc3Ryb3lGCiB9OwogCiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKLSAgICA6IEhlYXBD
ZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpKQorICAgIDogSGVhcENlbGxUeXBlKENlbGxBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lv
biAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBD
ZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IEpTU3Ry
aW5nRGVzdHJveUZ1bmMgewogfTsKIAogSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OkpTU3RyaW5nSGVh
cENlbGxUeXBlKCkKLSAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQorICAgIDogSGVhcENlbGxUeXBlKENlbGxB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjY3ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOCw5ICsyMjgsOSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNh
Z2U6OlByaW1pdGl2ZSkpCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtl
X3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVl
KSkKLSAgICAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxs
VHlwZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2Vs
bDo6QXV4aWxpYXJ5KSkpCi0gICAgLCBjZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8
SGVhcENlbGxUeXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpKSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUo
c3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNE
ZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpKQorICAgICwgYXV4aWxpYXJ5SGVhcENlbGxU
eXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0cmlidXRlcyhEb2VzTm90
TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSkpCisgICAgLCBjZWxsSGVhcENl
bGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0cmlidXRlcyhEb2Vz
Tm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBkZXN0cnVjdGli
bGVDZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihDZWxsQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCiAgICAgLCBzdHJp
bmdIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1N0cmluZ0hlYXBDZWxsVHlwZT4oKSkK
ICAgICAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPigpKQogICAgICwgc2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0SGVhcENlbGxUeXBlPigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrRGVzdHJv
eUZ1bmMKIH07CiAKIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRv
ckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBI
ZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCkpCiB7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331122</attachid>
            <date>2018-01-11 14:54:19 -0800</date>
            <delta_ts>2018-01-11 14:54:19 -0800</delta_ts>
            <desc>fix webcore</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>213297</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2ODA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxOC0wMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBNYXJrZWRBbGxvY2F0b3IgdG8gQmxvY2tEaXJlY3RvcnkgYW5kIEFsbG9jYXRvckF0
dHJpYnV0ZXMgdG8gQ2VsbEF0dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MTU0MworCisgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE1p
Y2hhZWwgU2Fib2ZmLgorICAgICAgICAKKyAgICAgICAgSW4gYSB3b3JsZCB0aGF0IGhhcyB0aHJl
YWQtbG9jYWwgY2FjaGVzLCB0aGUgdGhpbmcgd2Ugbm93IGNhbGwgdGhlICJNYXJrZWRBbGxvY2F0
b3IiIGRvZXNuJ3QKKyAgICAgICAgcmVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBhbGxv
Y2F0aW9uIGFueW1vcmUuIFRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZG9uZSBieSBzb21ldGhpbmcK
KyAgICAgICAgaW4gdGhlIFRMQy4gV2hlbiB5b3UgbW92ZSB0aGUgYWxsb2NhdGlvbiBsb2dpYyBv
dXQgb2YgTWFya2VkQWxsb2NhdG9yLCBpdCBiZWNvbWVzIGp1c3QgYQorICAgICAgICBwbGFjZSB0
byBmaW5kIGJsb2NrcyAoYSAiYmxvY2sgZGlyZWN0b3J5IikuCisKKyAgICAgICAgT25jZSB3ZSBk
byB0aGF0IHJlbmFtaW5nLCB0aGUgdGVybSAiYWxsb2NhdG9yIGF0dHJpYnV0ZXMiIGJlY29tZXMg
d2VpcmQuIFRob3NlIGFyZSByZWFsbHkgdGhlCisgICAgICAgIGF0dHJpYnV0ZXMgb2YgdGhlIEhl
YXBDZWxsVHlwZS4gU28gbGV0J3MgY2FsbCB0aGVtIENlbGxBdHRyaWJ1dGVzLgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBT
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9w
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpT
T2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXpl
SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlSGVh
cENlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRvckZv
clNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KToKKyAg
ICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOgorICAgICAg
ICAoSlNDOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmaXJzdERpcmVjdG9yeSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0FsbG9jYXRvckF0dHJpYnV0ZXMuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwLgorICAgICAgICAoSlNDOjpCbG9ja0Rp
cmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6
c2V0U3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dCk6
CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAg
ICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpCbG9ja0Rp
cmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5
OjpibG9ja1NpemVGb3JCeXRlcyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojp0cnlB
bGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFkZEJsb2NrKToK
KyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6QmxvY2tE
aXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YmVn
aW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpzbmFwc2hvdFVu
c3dlcHRGb3JFZGVuQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpz
bmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGly
ZWN0b3J5OjpmaW5kQmxvY2tUb1N3ZWVwKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnNocmluayk6CisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojphc3NlcnROb1Vuc3dlcHQpOgorICAgICAgICAoSlNDOjpC
bG9ja0RpcmVjdG9yeTo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVj
dG9yeTo6ZHVtcEJpdHMpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3Vt
ZUZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZUluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jayk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JG
dWxsQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZW5kTWFya2luZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c25h
cHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZvckZ1bGxDb2xsZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmaW5kQmxvY2tUb1N3ZWVwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJpdHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oLgorICAgICAgICAoSlNDOjpCbG9j
a0RpcmVjdG9yeTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5Ojpmb3JFYWNoQml0VmVjdG9yKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZv
ckVhY2hCaXRWZWN0b3JXaXRoTmFtZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpu
ZXh0RGlyZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om5leHRE
aXJlY3RvcnlJblN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
Om5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAgICAgICAo
SlNDOjpCbG9ja0RpcmVjdG9yeTo6c2V0TmV4dERpcmVjdG9yeSk6CisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5OjpzZXROZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QpOgorICAg
ICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6Y2VsbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmF0dHJpYnV0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmRlc3RydWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpjZWxsS2luZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Yml0dmVjdG9yTG9jayk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJpdFZlY3RvcldpdGhOYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxsb2NhdG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxs
b2NhdG9ySW5TdWJzcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnNl
dE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN1YnNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVlTGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oLgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkJsb2NrRGly
ZWN0b3J5Ojpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6Zm9y
RWFjaE5vdEVtcHR5QmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJl
ZUxpc3RlZENlbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpm
b3JFYWNoQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmZv
ckVhY2hOb3RFbXB0eUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NlbGxBdHRyaWJ1
dGVzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9y
QXR0cmlidXRlcy5jcHAuCisgICAgICAgIChKU0M6OkNlbGxBdHRyaWJ1dGVzOjpkdW1wIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yQXR0cmlidXRlczo6ZHVtcCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9DZWxsQXR0cmlidXRlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmguCisgICAgICAgIChKU0M6
OkNlbGxBdHRyaWJ1dGVzOjpDZWxsQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OkFsbG9jYXRv
ckF0dHJpYnV0ZXM6OkFsbG9jYXRvckF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGhl
YXAvQ29tcGxldGVTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvcik6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRl
Tm9uVmlydHVhbCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
clNsb3cpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3cp
OgorICAgICAgICAqIGhlYXAvQ29tcGxldGVTdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcENlbGw6OmNlbGxBdHRyaWJ1dGVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcENlbGw6OmRlc3RydWN0aW9uTW9kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkhlYXBDZWxsOjpjZWxsS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsOjph
bGxvY2F0b3JBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBD
ZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToK
KyAgICAgICAgKiBoZWFwL0hlYXBDZWxsVHlwZS5oOgorICAgICAgICAoSlNDOjpIZWFwQ2VsbFR5
cGU6OmF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVw
ZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKToKKyAgICAg
ICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdG9wU3dlZXBpbmcpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6SXNvQ2VsbFNldDo6SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklz
b0NlbGxTZXQ6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSk6CisgICAgICAgIChK
U0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRS
ZW1vdmVCbG9jayk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OnN3ZWVwVG9GcmVlTGlzdCk6
CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmZv
ckVhY2hMaXZlQ2VsbCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Oklzb1N1YnNwYWNlOjpJc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNw
YWNlOjphbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgIChKU0M6
Oklzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0xh
cmdlQWxsb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmF0dHJpYnV0
ZXMgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp+SGFuZGxl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6Om5vdGVNYXJrZWRTbG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmRpZEFkZFRvRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbURpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OmR1bXBTdGF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRD
ZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVtb3ZlRnJv
bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmRpZEFkZFRvQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpkaXJl
Y3RvcnkgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1
dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphbGxvY2F0b3IgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OmlzRW1wdHkpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZyk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzaHJpbmsp
OgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
c25hcHNob3RVbnN3ZXB0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFzc2VydE5vVW5z
d2VwdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkdW1wQml0cyk6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjphZGRCbG9ja0RpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZpcnN0RGlyZWN0b3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRpcmVjdG9yeUxvY2spOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmZvckVhY2hEaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Zmly
c3RBbGxvY2F0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
YWxsb2NhdG9yTG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmb3JF
YWNoQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlSW5saW5l
cy5oOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2Nh
dGlvbik6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxEaXJlY3RvcnlTb3VyY2UpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToKKyAg
ICAgICAgKEpTQzo6U3Vic3BhY2U6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OnBh
cmFsbGVsQWxsb2NhdG9yU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1N1YnNwYWNl
Lmg6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmRpZENyZWF0ZUZpcnN0RGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6
U3Vic3BhY2U6OmRpZENyZWF0ZUZpcnN0QWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBo
ZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaERp
cmVjdG9yeSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQmxvY2spOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2spOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1p
dEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
d19vYmplY3QpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6
CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSGVh
cENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZSk6CisKIDIwMTgtMDEtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgSklUTWF0aElDIGNvZGUgaW4gdGhlIEZUTCBpcyB3cm9uZyB3aGVuIGNvZGUgZ2V0cyBk
dXBsaWNhdGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQ2Niw3ICs0NjYsOCBAQCBmdGwvRlRMVGh1bmtzLmNwcAogZnRsL0ZUTFZhbHVlUmFuZ2Uu
Y3BwCiAKIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKLWhlYXAvQWxsb2NhdG9yQXR0
cmlidXRlcy5jcHAKK2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCitoZWFwL0NlbGxBdHRyaWJ1dGVz
LmNwcAogaGVhcC9DZWxsQ29udGFpbmVyLmNwcAogaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiBoZWFw
L0NvbGxlY3Rpb25TY29wZS5jcHAKQEAgLTUwMiw3ICs1MDMsNiBAQCBoZWFwL0xhcmdlQWxsb2Nh
dGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3Bw
CiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAotaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCiBoZWFwL01hcmtlZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDks
NyBAQAogCQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3
MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGN0RG
MTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFFMkJFRjY4MDA5
NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBC
bG9ja0RpcmVjdG9yeUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBCbG9ja0RpcmVjdG9yeUlu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdG
OTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmgg
Ki87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDM4LDcg
KzQzOCw3IEBACiAJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODYxQzU3
RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggKi87IH07CiAJCTBGOTUyQUExMURGNzg2MDkw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1
MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdD
NSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBBbGxvY2F0b3JB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzMDNBMUQ0
MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxB
dHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0MxRDQxOTJDRDAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzgxRDQxOTJD
MzAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4
QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCQlDMjlFQ0IwMzE4MDREMEVEMDBEMkNCQjQg
LyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjlFQ0IwMTE4MDREMEVEMDBEMkNCQjQgLyog
Q3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gKi87IH07CiAJCUMyQTdGNjg4MTYw
NDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJCNkQ3NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmll
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJCOTE2QzIxNERB
MDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtl
ZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0
RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNG
MzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMy
REE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8q
IEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI0NTAsNyArMjQ1MCw3IEBACiAJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxNDUxRTJCRUY2ODAwOTU5NTFCIC8qIE1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdE
RjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrRGlyZWN0b3J5SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3Rv
cmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMy
MzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDQsOCArMjUw
NCw4IEBACiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2Vk
UmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWxsb2NhdG9yQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbEF0dHJpYnV0ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2Vs
bEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2VsbEF0dHJp
YnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjMwMzcxRDQxOTJDMzAw
NTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXN0cnVjdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk2MzAzODFENDE5MkMzMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlc3RydWN0aW9uTW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQxOSw4ICs0NDE5LDggQEAKIAkJQzI5RUNC
MDIxODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tH
ZXR0ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRl
clRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBN0Y2ODcxNjA0MzJENDAw
Rjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2IC8q
IE1hcmtlZEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJr
ZWRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJCOTE2QzQxNERB
MDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tEaXJlY3RvcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2Nr
RGlyZWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2Nr
RGlyZWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDMEY3Q0IxN0JC
RkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOyBwYXRoID0g
ZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7
IHBhdGggPSBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJP
YmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTQ2LDEwICs1NTQ2LDEz
IEBACiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3Bl
LmggKi8sCiAJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovLAotCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRy
aWJ1dGVzLmNwcCAqLywKLQkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9y
QXR0cmlidXRlcy5oICovLAogCQkJCTBGMzBDQjVEMUZDRTQ2QjQwMDRCNTMyMyAvKiBBbGxvY2F0
b3JGb3JNb2RlLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRp
Y2VzLmggKi8sCisJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5
LmNwcCAqLywKKwkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3Rvcnku
aCAqLywKKwkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmggKi8sCisJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVz
LmNwcCAqLywKKwkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMu
aCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAg
Ki8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENlbGxDb250YWluZXIuaCAqLywK
IAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lcklubGluZXMuaCAq
LywKQEAgLTU2NDcsOSArNTY1MCw2IEBACiAJCQkJMEYyMDhBRDYxREYwOTI1QTAwN0QzMjY5IC8q
IExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIzM0YxMkQ3RDBEQTAwM0JENUVEIC8q
IE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRCNzIzNDAxMkQ3RDBEQTAwM0JENUVE
IC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLAotCQkJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwICovLAotCQkJCUMyQjkxNkMxMTREQTAxNEUwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIg
LyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTE0MkQ2RjA2MTM1MzlBMjgwMEIw
MkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgKi8sCiAJCQkJMTQyRDZGMDcxMzUzOUEyODAwQjAyRTg2
IC8qIE1hcmtlZEJsb2NrLmggKi8sCiAJCQkJMEY3QzVGQjcxRDg4OEEwMTAwNDRGNUUyIC8qIE1h
cmtlZEJsb2NrSW5saW5lcy5oICovLApAQCAtODA4OSw3ICs4MDg5LDcgQEAKIAkJCQkwRkVDM0M1
MzFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBNzYyMEIxREI5NTlGOTAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25G
YWlsdXJlTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5
IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzMDNBMUQ0
MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
MENCNUUxRkNFNEUzNzAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAv
KiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDczLDgg
KzkwNzMsOCBAQAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0
ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBD
M0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkI5MTZDMjE0REEw
MTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjdE
RjE0NjFFMkJFRjZBMDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjdERjE0NjFFMkJFRjZBMDA5NTk1MUIgLyogQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJF
ODYgLyogTWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0M1RkI4MUQ4ODhBMEMw
MDQ0RjVFMiAvKiBNYXJrZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0
OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKKyAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxs
b2NhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBz
dWNrIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUpOwog
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFr
ZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4KKyAgICBCbG9ja0RpcmVjdG9yeSog
bV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2Vu
ZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAg
ICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9m
aQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVD
YXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOworICAgIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKTsKIAogICAgIC8v
IFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhl
IHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNjc4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQ
Uik7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KSkgeworICAgICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCkt
PmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIApAQCAtMTI4LDcgKzEyOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShp
bmxpbmVDYXBhY2l0eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9i
amVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKGFsbG9jYXRv
clB0cikgewogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwg
c2NyYXRjaEdQUik7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGlu
Z01hc2sodmVjdG9yTGVuZ3RoKTsKQEAgLTQyMDgsOSArNDIwOCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAg
IE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3Ry
aW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0
cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBl
bWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBtYXJrZWRBbGxvY2F0b3IsIGFsbG9jYXRvckdQ
UiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAg
QmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5n
PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmlu
ZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOworICAgIGVtaXRB
bGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRy
dXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAK
ICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtT3BHUFJzOyArK2kpCkBAIC04MzgzLDcgKzgzODMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNp
emUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBt
X2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAg
IGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC04NDI4LDcgKzg0MjgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXpl
ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7
CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCkt
PnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTE0NDgsNyArMTE0
NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KE5vCiAKICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8
SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9j
YXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisj
aW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiREZHR2VuZXJhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oIgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgIkRGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJK
SVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
UHV0S2luZC5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCkBAIC0zMTIwLDcgKzMxMjAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGNhbiBiZSBHUFIgb3IgSW1t
UHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3Ry
dWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIs
IHNsb3dQYXRoKTsKQEAgLTMxMjksNyArMzEyOSw3IEBAIHB1YmxpYzoKICAgICAvLyBBbGxvY2F0
b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUuCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlw
ZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5kLCBNYXNrVHlwZSBjYW4gYmUgR1BS
IG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KAotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRv
ckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIs
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiAjZGVmaW5lIEZPUl9FQUNIX0lO
REVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKEFycmF5U3RvcmFnZV92ZWN0
b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSBcCi0gICAgbWFjcm8oQ29tcGxldGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3Rl
cCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpLCBzaXpl
b2YoTWFya2VkQWxsb2NhdG9yKikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihCbG9ja0RpcmVjdG9yeSopKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFi
bGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNT
dHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODM0LDcgKzU4MzQsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkp
LT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxs
KAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgdm0oKS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCksIHNsb3dQYXRoKTsKQEAgLTk4NjIsNyArOTg2Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICAg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmlu
YWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQmxv
Y2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4aW5nSGVhZGVyU2l6ZSA9IDA7CkBA
IC0xMDg5Myw3ICsxMDg5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291
dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQo
bV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
c3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExOTI2LDkgKzExOTI2LDkgQEAgcHJpdmF0ZToKIAogICAg
IExWYWx1ZSBhbGxvY2F0ZUhlYXBDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQogICAgIHsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3Ig
PSBudWxscHRyOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKGFsbG9jYXRvci0+aGFzSW50UHRyKCkpCi0gICAgICAgICAgICBh
Y3R1YWxBbGxvY2F0b3IgPSBiaXR3aXNlX2Nhc3Q8TWFya2VkQWxsb2NhdG9yKj4oYWxsb2NhdG9y
LT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2Fz
dDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IGVpdGhlciB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvciBpcyBudWxsIG9yIHdlIGRvbid0
IGtub3cgd2hhdCB0aGUKQEAgLTEyMDU1LDcgKzEyMDU1LDcgQEAgcHJpdmF0ZToKICAgICBMVmFs
dWUgYWxsb2NhdGVPYmplY3QoCiAgICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTFZhbHVlIGluZGV4aW5nTWFzaywgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5jb25zdEludFB0cihhbGxv
Y2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIApAQCAtMTIwNzUsNyArMTIwNzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Q29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVT
dWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1
YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gYWN0
dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAgICAgaWYgKCFhY3R1YWxBbGxv
Y2F0b3IpIHsKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CkBAIC0xMjEzNSw3ICsxMjEz
NSw3IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUg
YWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0
byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUg
c2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJCbG9ja0RpcmVjdG9yeS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyAKQEAgLTM5LDE2ICszOSwxNiBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxp
Z25lZE1lbW9yeUFsCiB7CiB9CiAKLXZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0
ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit2b2lkIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I6OnJlZ2lzdGVyRGlyZWN0b3J5KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rvcnkp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZGlyZWN0b3J5LT5uZXh0
RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwogICAgIAotICAgIGlmIChtX2Fs
bG9jYXRvcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZGlyZWN0b3JpZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlID0gbV9zdWJzcGFjZXMuZmlyc3QoKTsg
c3Vic3BhY2U7IHN1YnNwYWNlID0gc3Vic3BhY2UtPm5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0QWxsb2Nh
dG9yKGFsbG9jYXRvcik7CisgICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3REaXJl
Y3RvcnkoZGlyZWN0b3J5KTsKICAgICB9CiAgICAgCi0gICAgbV9hbGxvY2F0b3JzLmFwcGVuZChz
dGQ6Om1lbV9mbigmTWFya2VkQWxsb2NhdG9yOjpzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKSwgYWxsb2NhdG9yKTsKKyAgICBtX2RpcmVjdG9yaWVzLmFwcGVuZChzdGQ6
Om1lbV9mbigmQmxvY2tEaXJlY3Rvcnk6OnNldE5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IpLCBkaXJlY3RvcnkpOwogfQogCiB2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNp
b24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3Mg
U3Vic3BhY2U7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewpAQCAtNDUsMTMgKzQ1
LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKIAotICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9y
Kik7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgdm9pZCByZWdpc3RlckRpcmVjdG9yeShCbG9j
a0RpcmVjdG9yeSopOworICAgIEJsb2NrRGlyZWN0b3J5KiBmaXJzdERpcmVjdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0b3JpZXMuZmlyc3QoKTsgfQogCiAgICAgdm9pZCByZWdpc3RlclN1
YnNwYWNlKFN1YnNwYWNlKik7CiAKIHByaXZhdGU6Ci0gICAgU2luZ2x5TGlua2VkTGlzdFdpdGhU
YWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNpbmdseUxpbmtlZExpc3RX
aXRoVGFpbDxCbG9ja0RpcmVjdG9yeT4gbV9kaXJlY3RvcmllczsKICAgICBTaW5nbHlMaW5rZWRM
aXN0V2l0aFRhaWw8U3Vic3BhY2U+IG1fc3Vic3BhY2VzOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAJKHJldmlz
aW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvckF0dHJp
YnV0ZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgotCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlv
biwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5o
CShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
b3JBdHRyaWJ1dGVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJIZWFwQ2VsbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMgewotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMoKSB7IH0KLSAgICAK
LSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiwgSGVh
cENlbGw6OktpbmQgY2VsbEtpbmQpCi0gICAgICAgIDogZGVzdHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24p
Ci0gICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi0gICAgRGVzdHJ1Y3Rpb25N
b2RlIGRlc3RydWN0aW9uIHsgRG9lc05vdE5lZWREZXN0cnVjdGlvbiB9OwotICAgIEhlYXBDZWxs
OjpLaW5kIGNlbGxLaW5kIHsgSGVhcENlbGw6OkpTQ2VsbCB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5jcHAJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmNwcDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRl
ICJBbGxvY2F0aW5nU2NvcGUuaCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNp
bmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
KyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9
IHRydWU7CisKK01hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIHNp
emVfdCBjZWxsU2l6ZSkKKyAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJl
bnRCbG9jaygwKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKKyAgICAsIG1fY2VsbFNpemUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKKyAgICAsIG1faGVhcChoZWFwKQorewor
fQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNl
KQoreworICAgIG1fYXR0cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9z
dWJzcGFjZSA9IHN1YnNwYWNlOworfQorCitib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91
dChkb3VibGUgZGVhZGxpbmUpCit7CisgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hl
Y2sgPSAwOworICAgIGZvciAoYXV0byogYmxvY2sgOiBtX2Jsb2NrcykgeworICAgICAgICBpZiAo
YmxvY2spCisgICAgICAgICAgICBob2xkTG9jayhibG9jay0+YmxvY2soKS5sb2NrKCkpOworICAg
ICAgICArK2l0ZXJzU2luY2VMYXN0VGltZUNoZWNrOworICAgICAgICBpZiAoaXRlcnNTaW5jZUxh
c3RUaW1lQ2hlY2sgPj0gSGVhcDo6c190aW1lQ2hlY2tSZXNvbHV0aW9uKSB7CisgICAgICAgICAg
ICBkb3VibGUgY3VycmVudFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lID4gZGVhZGxpbmUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitNYXJrZWRCbG9jazo6
SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCit7CisgICAg
bV9lbXB0eUN1cnNvciA9IG1fZW1wdHkuZmluZEJpdChtX2VtcHR5Q3Vyc29yLCB0cnVlKTsKKyAg
ICBpZiAobV9lbXB0eUN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKK30KKwordm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVu
dEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Cisg
ICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKK30KKwordm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgQVNTRVJUKG1fZnJlZUxp
c3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAg
bV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkp
LmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKG1fYWxsb2Nh
dGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOworCisgICAgICAgIGlmICh2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl0pKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnN0ZWFs
RW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAgICAgJiYgKHRyYWRlRGVzdHJ1
Y3RvckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAgICAgICBpZiAoTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwo
KSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1
c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNh
bkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhl
IHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tQWxsb2NhdG9yKCk7Cisg
ICAgICAgICAgICBhZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJ
bihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3sKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3Rl
ZCgpKTsKKyAgICAKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOworICAgIAorICAgIC8v
IEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFy
a2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAorICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlz
IHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgorICAgIGlmIChtX2ZyZWVM
aXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVl
TGlzdGVkKCkpOworICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7
CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgQVNTRVJU
KCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFp
c0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2sgPSBi
bG9jazsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAg
ICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gbnVsbHB0cjsgfSk7CisgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9j
dXJyZW50QmxvY2ssIHRydWUpOworICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2Nr
KG1fY3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0
aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKKyAg
ICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVy
cmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0Mg
PSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVj
dE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICB9CisgICAgfQorICAg
IGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5H
Q3MoKSkKKyAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKwordm9pZCogTWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgQVNTRVJUKG1faGVhcC0+dm0o
KS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFtYXJrZWRTcGFjZSgp
LmlzSXRlcmF0aW5nKCkpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmln
aW5hbFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAg
QWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKCptX2hlYXApOworCisgICAgbV9oZWFwLT5jb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29v
ZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgYWxs
b2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVu
IHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBH
QydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAg
CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAg
IAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jaygp
OworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIGFkZEJsb2NrKGJsb2NrKTsKKyAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsK
KyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6
ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCit7CisgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpOworfQorCitz
aXplX3QgTWFya2VkQWxsb2NhdG9yOjpibG9ja1NpemVGb3JCeXRlcyhzaXplX3QgYnl0ZXMpCit7
CisgICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CisgICAg
c2l6ZV90IG1pbkFsbG9jYXRpb25TaXplID0gYmxvY2tIZWFkZXJTaXplKCkgKyBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihieXRlcyk7CisgICAgbWluQWxs
b2NhdGlvblNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6ZSgpLCBt
aW5BbGxvY2F0aW9uU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWlu
QWxsb2NhdGlvblNpemUpOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlQmxvY2soKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUg
PSBNYXJrZWRCbG9jazo6dHJ5Q3JlYXRlKCptX2hlYXAsIHN1YnNwYWNlKCktPmFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIG1hcmtlZFNwYWNlKCkuZGlkQWRkQmxvY2soaGFuZGxlKTsKKyAgICAKKyAg
ICByZXR1cm4gaGFuZGxlOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgc2l6ZV90IGluZGV4OworICAgIGlmICht
X2ZyZWVCbG9ja0luZGljZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGluZGV4ID0gbV9ibG9ja3Mu
c2l6ZSgpOworCisgICAgICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IG1fYmxvY2tzLmNhcGFjaXR5
KCk7CisgICAgICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgICAgIGlmIChtX2Jsb2Nr
cy5jYXBhY2l0eSgpICE9IG9sZENhcGFjaXR5KSB7CisgICAgICAgICAgICBmb3JFYWNoQml0VmVj
dG9yKAorICAgICAgICAgICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKKyAgICAgICAgICAgICAg
ICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKHZlY3RvciwgdmVjdG9yLm51bUJpdHMoKSA9PSBvbGRDYXBhY2l0eSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nr
cy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2Uo
KS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGZvckVh
Y2hCaXRWZWN0b3IoCisgICAgICAgICAgICAgICAgbG9ja2VyLAorICAgICAgICAgICAgICAgIFsm
XSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5y
ZXNpemUobV9ibG9ja3MuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IG1fZnJlZUJsb2NrSW5kaWNlcy50YWtl
TGFzdCgpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2tzW2luZGV4XSk7CisgICAgICAgIG1fYmxv
Y2tzW2luZGV4XSA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAor
ICAgICAgICBOb0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYg
dmVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZlY3RvciwgIXZlY3RvcltpbmRl
eF0pOworICAgICAgICB9KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHBvaW50IGF0IHdoaWNoIHRo
ZSBibG9jayBsZWFybnMgb2YgaXRzIGNlbGxTaXplKCkgYW5kIGF0dHJpYnV0ZXMoKS4KKyAgICBi
bG9jay0+ZGlkQWRkVG9BbGxvY2F0b3IodGhpcywgaW5kZXgpOworICAgIAorICAgIHNldElzTGl2
ZShOb0xvY2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKKyAgICBzZXRJc0VtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgaW5kZXgsIHRydWUpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgQVNTRVJUKGJs
b2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2stPmlu
ZGV4KCldID09IGJsb2NrKTsKKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRSZW1vdmVCbG9jayhi
bG9jay0+aW5kZXgoKSk7CisgICAgCisgICAgbV9ibG9ja3NbYmxvY2stPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5pbmRleCgpKTsKKyAg
ICAKKyAgICBmb3JFYWNoQml0VmVjdG9yKAorICAgICAgICBob2xkTG9jayhtX2JpdHZlY3Rvckxv
Y2spLAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgeworICAgICAgICAgICAg
dmVjdG9yW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAKKyAgICBi
bG9jay0+ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6c3RvcEFsbG9jYXRpbmcoKQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhS
YXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7
CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9j
aykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxv
Y2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50Qmxv
Y2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30K
Kwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRy
OworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7
CisgICAgbV9lbXB0eUN1cnNvciA9IDA7CisgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKKyAgICAK
KyAgICBtX2VkZW4uY2xlYXJBbGwoKTsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp1c2VJ
bW1vcnRhbE9iamVjdHMoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGFn
YWluLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMjk2CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxpemUoKQoreworICAgIGZv
ckVhY2hCbG9jaygKKyAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykgewor
ICAgICAgICAgICAgYmxvY2stPmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisgICAgICAgIH0pOwor
fQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYg
KCFtX2xhc3RBY3RpdmVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZl
QmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2xhc3RBY3RpdmVCbG9jazsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigp
Cit7CisgICAgLy8gTWFyayBiaXRzIGFyZSBzdGlja3kgYW5kIHNvIGlzIG91ciBzdW1tYXJ5IG9m
IG1hcmsgYml0cy4gV2Ugb25seSBjbGVhciB0aGVzZSBkdXJpbmcgZnVsbAorICAgIC8vIGNvbGxl
Y3Rpb25zLCBzbyBpZiB5b3Ugc3Vydml2ZWQgdGhlIGxhc3QgY29sbGVjdGlvbiB5b3Ugd2lsbCBz
dXJ2aXZlIHRoZSBuZXh0IG9uZSBzbyBsb25nCisgICAgLy8gYXMgdGhlIG5leHQgb25lIGlzIGVk
ZW4uCisgICAgbV9tYXJraW5nTm90RW1wdHkuY2xlYXJBbGwoKTsKKyAgICBtX21hcmtpbmdSZXRp
cmVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjplbmRNYXJraW5nKCkK
K3sKKyAgICBtX2FsbG9jYXRlZC5jbGVhckFsbCgpOworICAgIAorICAgIC8vIEl0J3Mgc3VycHJp
c2luZyBhbmQgZnJ1c3RyYXRpbmcgdG8gY29tcHJlaGVuZCwgYnV0IHRoZSBlbmQtb2YtbWFya2lu
ZyBmbGlwIGRvZXMgbm90IG5lZWQgdG8KKyAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0
aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFy
a2luZ1hZWgorICAgIC8vIHZlY3RvcnMuCisgICAgCisgICAgaWYgKCF0cmFkZURlc3RydWN0b3JC
bG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChtX2VtcHR5Lmlz
RW1wdHkoKSk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9IG1fbGl2ZSAmIH5t
X21hcmtpbmdSZXRpcmVkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW1wdHkgPSBtX2xpdmUg
JiB+bV9tYXJraW5nTm90RW1wdHk7CisgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9
IG1fbGl2ZSAmIG1fbWFya2luZ05vdEVtcHR5ICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfQor
ICAgIAorICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJl
IHNvbWUgYmxvY2tzIHRoYXQgd2UgZGlkbid0IGFsbG9jYXRlIG91dCBvZiBpbiB0aGUgbGFzdCBj
eWNsZSwgYnV0IHdlIHN3ZXB0IHRoZW0uIFRoaXMKKyAgICAgICAgLy8gd2lsbCBmb3JnZXQgdGhh
dCB3ZSBkaWQgdGhhdCBhbmQgd2Ugd2lsbCBlbmQgdXAgc3dlZXBpbmcgdGhlbSBhZ2FpbiBhbmQg
YXR0ZW1wdGluZyB0byBjYWxsIHRoZWlyCisgICAgICAgIC8vIGRlc3RydWN0b3JzIGFnYWluLiBU
aGF0J3MgZmluZSBiZWNhdXNlIG9mIHphcHBpbmcuIFRoZSBvbmx5IHRpbWUgd2hlbiB3ZSBjYW5u
b3QgZm9yZ2V0IGlzIHdoZW4KKyAgICAgICAgLy8gd2UganVzdCBhbGxvY2F0ZSBhIGJsb2NrIG9y
IHdoZW4gd2UgbW92ZSBhIGJsb2NrIGZyb20gb25lIHNpemUgY2xhc3MgdG8gYW5vdGhlci4gVGhh
dCBkb2Vzbid0CisgICAgICAgIC8vIGhhcHBlbiBoZXJlLgorICAgICAgICBtX2Rlc3RydWN0aWJs
ZSA9IG1fbGl2ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFM
b2coIkJpdHMgZm9yICIsIG1fY2VsbFNpemUsICIsICIsIG1fYXR0cmlidXRlcywgIiBhZnRlciBl
bmRNYXJraW5nOlxuIik7CisgICAgICAgIGR1bXBCaXRzKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
fQorfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRWRlbkNvbGxl
Y3Rpb24oKQoreworICAgIG1fdW5zd2VwdCB8PSBtX2VkZW47Cit9CisKK3ZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpCit7CisgICAgbV91bnN3
ZXB0ID0gbV9saXZlOworfQorCitNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6
OmZpbmRCbG9ja1RvU3dlZXAoKQoreworICAgIG1fdW5zd2VwdEN1cnNvciA9IG1fdW5zd2VwdC5m
aW5kQml0KG1fdW5zd2VwdEN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fdW5zd2VwdEN1cnNvciA+
PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
X2Jsb2Nrc1ttX3Vuc3dlcHRDdXJzb3JdOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dl
ZXAoKQoreworICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAorICAgICAgICBbJl0gKHNpemVf
dCBpbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Js
b2Nrc1tpbmRleF07CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAg
IH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKK3sKKyAgICAobV9lbXB0
eSAmIH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3Qg
aW5kZXgpIHsKKyAgICAgICAgICAgIG1hcmtlZFNwYWNlKCkuZnJlZUJsb2NrKG1fYmxvY2tzW2lu
ZGV4XSk7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9V
bnN3ZXB0KCkKK3sKKyAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKG1fdW5zd2VwdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBkYXRhTG9nKCJBc3NlcnRpb24gZmFpbGVkOiB1bnN3ZXB0IG5vdCBlbXB0eSBpbiAiLCAq
dGhpcywgIi5cbiIpOworICAgIGR1bXBCaXRzKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRB
bGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAg
ICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV9kb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAg
ICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRl
eCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nr
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1f
YWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAg
c2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29s
IG1fZG9uZSB7IGZhbHNlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRhc2soKnRoaXMpKTsKK30KKwordm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBt
X2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgTWFya2VkQWxsb2NhdG9y
OjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQoreworICAgIHVuc2lnbmVkIG1heE5hbWVMZW5n
dGggPSAwOworICAgIGZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgKKyAgICAgICAgTm9Mb2NraW5n
TmVjZXNzYXJ5LAorICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImLCBjb25zdCBjaGFyKiBuYW1l
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
ICAgICBtYXhOYW1lTGVuZ3RoID0gc3RkOjptYXgobWF4TmFtZUxlbmd0aCwgbGVuZ3RoKTsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKAorICAgICAgICBO
b0xvY2tpbmdOZWNlc3NhcnksCisgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yLCBj
b25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBuYW1lLCAi
OiAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1heE5hbWVMZW5ndGggLSBzdHJs
ZW4obmFtZSk7IGktLTspCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQodmVjdG9yLCAiXG4iKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtlZFNw
YWNlJiBNYXJrZWRBbGxvY2F0b3I6Om1hcmtlZFNwYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdWJzcGFjZS0+c3BhY2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeS5oIgogCiAjaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwogCi1NYXJr
ZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUp
CitCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxT
aXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKICAgICAsIG1fY3VycmVudEJsb2NrKDAp
CiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQpAQCAtNTAsMTMgKzUwLDEzIEBAIE1hcmtlZEFs
bG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGgKIHsKIH0KIAotdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3ZvaWQgQmxvY2tEaXJlY3Rv
cnk6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKIHsKICAgICBtX2F0dHJpYnV0ZXMg
PSBzdWJzcGFjZS0+YXR0cmlidXRlcygpOwogICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKIH0K
IAotYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQorYm9v
bCBCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7CiAgICAgdW5z
aWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwogICAgIGZvciAoYXV0byogYmxvY2sg
OiBtX2Jsb2NrcykgewpAQCAtNzMsNyArNzMsNyBAQCBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQ
YWdlZE91dChkb3VibGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1NYXJrZWRCbG9jazo6SGFu
ZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCitNYXJrZWRCbG9j
azo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKIHsKICAg
ICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJzb3IsIHRydWUpOwog
ICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKQEAgLTgxLDcgKzgxLDcg
QEAgTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaQogICAgIHJldHVybiBt
X2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENv
bnN1bWVGcmVlTGlzdCgpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpkaWRDb25zdW1lRnJlZUxpc3Qo
KQogewogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRp
ZENvbnN1bWVGcmVlTGlzdCgpOwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogfQog
Ci12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQor
dm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQogewog
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKQEAg
LTExOCw3ICsxMTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91
CiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1
dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBj
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAgICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRo
ZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbUFsbG9jYXRvcigpOwor
ICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKICAgICAgICAgICAgIGFk
ZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAg
ICAgICAgfQpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit2b2lkKiBCbG9j
a0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKIHsKICAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3ZvaWQqIEJsb2Nr
RGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewog
ICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwpA
QCAtMTU1LDEzICsxNTUsMTYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUlu
KE1hcgogICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgCiAgICAgdm9pZCogcmVzdWx0
ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG51bGxwdHI7IH0pOworICAgICAgICBb
XSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKICAgICBzZXRJ
c0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7CiAgICAgbWFy
a2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5l
ZWRlZChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGlmICghT3B0
aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE3
OSw3ICsxODIsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAg
ICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxs
b2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpAQCAtMTk0LDcgKzE5Nyw3IEBAIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgKIAogICAgIG1faGVhcC0+Y29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAotICAgIC8vIEdvb2Z5IGNvcm5l
ciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBo
YXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQorICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0
aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJy
ZW50QmxvY2suIFRoaXMgb25seQogICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0
ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24u
CiAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwpAQCAtMjIyLDcgKzIyNSw3IEBAIHN0
YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7CiB9
CiAKLXNpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRl
cykKK3NpemVfdCBCbG9ja0RpcmVjdG9yeTo6YmxvY2tTaXplRm9yQnl0ZXMoc2l6ZV90IGJ5dGVz
KQogewogICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOwog
ICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IGJsb2NrSGVhZGVyU2l6ZSgpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwpAQCAtMjMw
LDcgKzIzMyw3IEBAIHNpemVfdCBNYXJrZWRBbGxvY2F0b3I6OmJsb2NrU2l6ZUZvckJ5dGUKICAg
ICByZXR1cm4gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7CiB9CiAK
LU1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVCbG9jaygp
CitNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVCbG9jaygp
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAg
IApAQCAtMjQzLDcgKzI0Niw3IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRv
cjo6dHIKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRk
QmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit2b2lkIEJsb2NrRGlyZWN0b3J5Ojph
ZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKIHsKICAgICBzaXplX3QgaW5kZXg7
CiAgICAgaWYgKG1fZnJlZUJsb2NrSW5kaWNlcy5pc0VtcHR5KCkpIHsKQEAgLTI4MSwxNSArMjg0
LDE1IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG8KICAgICAgICAg
fSk7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgYmxvY2sgbGVhcm5z
IG9mIGl0cyBjZWxsU2l6ZSgpIGFuZCBhdHRyaWJ1dGVzKCkuCi0gICAgYmxvY2stPmRpZEFkZFRv
QWxsb2NhdG9yKHRoaXMsIGluZGV4KTsKKyAgICBibG9jay0+ZGlkQWRkVG9EaXJlY3RvcnkodGhp
cywgaW5kZXgpOwogICAgIAogICAgIHNldElzTGl2ZShOb0xvY2tpbmdOZWNlc3NhcnksIGluZGV4
LCB0cnVlKTsKICAgICBzZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgaW5kZXgsIHRydWUp
OwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2spCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpyZW1vdmVCbG9jayhNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKIHsKLSAgICBBU1NFUlQoYmxvY2stPmFsbG9jYXRvcigpID09IHRo
aXMpOworICAgIEFTU0VSVChibG9jay0+ZGlyZWN0b3J5KCkgPT0gdGhpcyk7CiAgICAgQVNTRVJU
KG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7CiAgICAgCiAgICAgc3Vic3BhY2Uo
KS0+ZGlkUmVtb3ZlQmxvY2soYmxvY2stPmluZGV4KCkpOwpAQCAtMzAzLDEzICszMDYsMTMgQEAg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZAogICAgICAgICAgICAgdmVj
dG9yW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOwogICAgICAgICB9KTsKICAgICAKLSAgICBibG9j
ay0+ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAgIGJsb2NrLT5kaWRSZW1vdmVGcm9tRGly
ZWN0b3J5KCk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCit2
b2lkIEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZygpCiB7CiAgICAgaWYgKGZhbHNlKQot
ICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEFsbG9jYXRvcjo6c3Rv
cEFsbG9jYXRpbmchXG4iKTsKKyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBC
bG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKQEAgLTMyMiw3ICszMjUsNyBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQogICAgIG1fZnJlZUxpc3QuY2xlYXIo
KTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3Zv
aWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKICAgICBtX2xhc3RB
Y3RpdmVCbG9jayA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwpAQCAt
MzQxLDcgKzM0NCw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGkK
ICAgICB9CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgp
Cit2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAgICAgZm9y
RWFjaEJsb2NrKAogICAgICAgICBbJl0gKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKSB7CkBA
IC0zNDksNyArMzUyLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0ZpbmFs
aQogICAgICAgICB9KTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CiAgICAgaWYg
KCFtX2xhc3RBY3RpdmVCbG9jaykKICAgICAgICAgcmV0dXJuOwpAQCAtMzU5LDcgKzM2Miw3IEBA
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKICAgICBtX2xhc3RBY3Rp
dmVCbG9jayA9IG51bGxwdHI7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpiZWdpbk1hcmtp
bmdGb3JGdWxsQ29sbGVjdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpiZWdpbk1hcmtpbmdG
b3JGdWxsQ29sbGVjdGlvbigpCiB7CiAgICAgLy8gTWFyayBiaXRzIGFyZSBzdGlja3kgYW5kIHNv
IGlzIG91ciBzdW1tYXJ5IG9mIG1hcmsgYml0cy4gV2Ugb25seSBjbGVhciB0aGVzZSBkdXJpbmcg
ZnVsbAogICAgIC8vIGNvbGxlY3Rpb25zLCBzbyBpZiB5b3Ugc3Vydml2ZWQgdGhlIGxhc3QgY29s
bGVjdGlvbiB5b3Ugd2lsbCBzdXJ2aXZlIHRoZSBuZXh0IG9uZSBzbyBsb25nCkBAIC0zNjgsNyAr
MzcxLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmJlZ2luTWFya2luZ0ZvckZ1bAogICAgIG1f
bWFya2luZ1JldGlyZWQuY2xlYXJBbGwoKTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmVu
ZE1hcmtpbmcoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZygpCiB7CiAgICAgbV9h
bGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICAKQEAgLTM5OSwxNyArNDAyLDE3IEBAIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjplbmRNYXJraW5nKCkKICAgICB9CiB9CiAKLXZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpCit2b2lkIEJsb2NrRGlyZWN0
b3J5OjpzbmFwc2hvdFVuc3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpCiB7CiAgICAgbV91bnN3ZXB0
IHw9IG1fZWRlbjsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90VW5zd2VwdEZv
ckZ1bGxDb2xsZWN0aW9uKCkKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnNuYXBzaG90VW5zd2VwdEZv
ckZ1bGxDb2xsZWN0aW9uKCkKIHsKICAgICBtX3Vuc3dlcHQgPSBtX2xpdmU7CiB9CiAKLU1hcmtl
ZEJsb2NrOjpIYW5kbGUqIE1hcmtlZEFsbG9jYXRvcjo6ZmluZEJsb2NrVG9Td2VlcCgpCitNYXJr
ZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEJsb2NrVG9Td2VlcCgpCiB7CiAg
ICAgbV91bnN3ZXB0Q3Vyc29yID0gbV91bnN3ZXB0LmZpbmRCaXQobV91bnN3ZXB0Q3Vyc29yLCB0
cnVlKTsKICAgICBpZiAobV91bnN3ZXB0Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKQEAgLTQx
Nyw3ICs0MjAsNyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBNYXJrZWRBbGxvY2F0b3I6OmZpCiAg
ICAgcmV0dXJuIG1fYmxvY2tzW21fdW5zd2VwdEN1cnNvcl07CiB9CiAKLXZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzd2VlcCgpCit2b2lkIEJsb2NrRGlyZWN0b3J5Ojpzd2VlcCgpCiB7CiAgICAgbV91
bnN3ZXB0LmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CkBAIC00
MjYsNyArNDI5LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKCkKICAgICAgICAgfSk7
CiB9CiAKLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpzaHJpbmsoKQordm9pZCBCbG9ja0RpcmVjdG9y
eTo6c2hyaW5rKCkKIHsKICAgICAobV9lbXB0eSAmIH5tX2Rlc3RydWN0aWJsZSkuZm9yRWFjaFNl
dEJpdCgKICAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKQEAgLTQzNCw3ICs0MzcsNyBAQCB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2hyaW5rKCkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFy
a2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6YXNz
ZXJ0Tm9VbnN3ZXB0KCkKIHsKICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICByZXR1
cm47CkBAIC00NDcsMTIgKzQ1MCwxMiBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9V
bnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVmUHRyPFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RF
bXB0eUJsb2NrU291cmNlKCkKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+PiBCbG9ja0RpcmVjdG9yeTo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKIHsKICAg
ICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4g
ewogICAgIHB1YmxpYzoKLSAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikK
LSAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICBUYXNrKEJsb2Nr
RGlyZWN0b3J5JiBkaXJlY3RvcnkpCisgICAgICAgICAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9y
eSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtNDYxLDE2ICs0NjQsMTYgQEAg
UmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQogICAgICAgICAgICAgaWYg
KG1fZG9uZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBtX2Fs
bG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5kZXgsIHRydWUpOwotICAgICAg
ICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpKSB7CisgICAg
ICAgICAgICBtX2luZGV4ID0gbV9kaXJlY3RvcnkubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdCht
X2luZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZGlyZWN0b3J5Lm1f
YmxvY2tzLnNpemUoKSkgewogICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgICAgIHJldHVybiBt
X2RpcmVjdG9yeS5tX2Jsb2Nrc1ttX2luZGV4KytdOwogICAgICAgICB9CiAgICAgICAgIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAg
IEJsb2NrRGlyZWN0b3J5JiBtX2RpcmVjdG9yeTsKICAgICAgICAgc2l6ZV90IG1faW5kZXggeyAw
IH07CiAgICAgICAgIExvY2sgbV9sb2NrOwogICAgICAgICBib29sIG1fZG9uZSB7IGZhbHNlIH07
CkBAIC00NzksMTIgKzQ4MiwxMiBAQCBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFu
ZGxlKigpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7CiB9CiAKLXZvaWQg
TWFya2VkQWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIEJsb2Nr
RGlyZWN0b3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMpOwog
fQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJpdHMoUHJpbnRTdHJlYW0mIG91dCkKK3Zv
aWQgQmxvY2tEaXJlY3Rvcnk6OmR1bXBCaXRzKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgdW5z
aWduZWQgbWF4TmFtZUxlbmd0aCA9IDA7CiAgICAgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKApA
QCAtNTA0LDcgKzUwNyw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkdW1wQml0cyhQcmludFN0
cmUKICAgICAgICAgfSk7CiB9CiAKLU1hcmtlZFNwYWNlJiBNYXJrZWRBbGxvY2F0b3I6Om1hcmtl
ZFNwYWNlKCkgY29uc3QKK01hcmtlZFNwYWNlJiBCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3BhY2Uo
KSBjb25zdAogewogICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjY3
ODMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oOjIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFsbG9j
YXRpb25GYWlsdXJlTW9kZS5oIgorI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKKyNp
bmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CitjbGFzcyBIZWFwOworY2xhc3MgSXNv
Q2VsbFNldDsKK2NsYXNzIE1hcmtlZFNwYWNlOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OworCisjZGVmaW5lIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKG1hY3JvKSBcCisgICAg
bWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBh
Y3R1YWwgYmxvY2tzLiAqL1wKKyAgICBtYWNybyhlbXB0eSwgRW1wdHkpIC8qIFRoZSBzZXQgb2Yg
YWxsIGJsb2NrcyB0aGF0IGhhdmUgbm8gbGl2ZSBvYmplY3RzLiAqLyBcCisgICAgbWFjcm8oYWxs
b2NhdGVkLCBBbGxvY2F0ZWQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGFyZSBmdWxs
IG9mIGxpdmUgb2JqZWN0cy4gKi9cCisgICAgbWFjcm8oY2FuQWxsb2NhdGVCdXROb3RFbXB0eSwg
Q2FuQWxsb2NhdGVCdXROb3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIGFyZSBuZWl0
aGVyIGVtcHR5IG5vciByZXRpcmVkIChpLmUuIGFyZSBtb3JlIHRoYW4gbWluTWFya2VkQmxvY2tV
dGlsaXphdGlvbiBmdWxsKS4gKi8gXAorICAgIG1hY3JvKGRlc3RydWN0aWJsZSwgRGVzdHJ1Y3Rp
YmxlKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBtYXkgaGF2ZSBkZXN0cnVjdG9ycyB0
byBydW4uICovXAorICAgIG1hY3JvKGVkZW4sIEVkZW4pIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2Nr
cyB0aGF0IGhhdmUgbmV3IG9iamVjdHMgc2luY2UgdGhlIGxhc3QgR0MuICovXAorICAgIG1hY3Jv
KHVuc3dlcHQsIFVuc3dlcHQpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IGNvdWxkIGJl
IHN3ZXB0IGJ5IHRoZSBpbmNyZW1lbnRhbCBzd2VlcGVyLiAqL1wKKyAgICBcCisgICAgLyogVGhl
c2UgYXJlIGNvbXB1dGVkIGR1cmluZyBtYXJraW5nLiAqL1wKKyAgICBtYWNybyhtYXJraW5nTm90
RW1wdHksIE1hcmtpbmdOb3RFbXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgYXJl
IG5vdCBlbXB0eS4gKi8gXAorICAgIG1hY3JvKG1hcmtpbmdSZXRpcmVkLCBNYXJraW5nUmV0aXJl
ZCkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgYXJlIHJldGlyZWQuICovCisKKy8vIEZJ
WE1FOiBXZSBkZWZpbmVkIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYW5kIGVtcHR5IHRvIGJlIGV4
Y2x1c2l2ZToKKy8vCisvLyAgICAgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSAmIGVtcHR5ID09IDAK
Ky8vCisvLyBJbnN0ZWFkIG9mIGNhbGxpbmcgaXQgY2FuQWxsb2NhdGUgYW5kIG1ha2luZyBpdCBp
bmNsdXNpdmU6CisvLworLy8gICAgIGNhbkFsbG9jYXRlICYgZW1wdHkgPT0gZW1wdHkKKy8vCisv
LyBUaGUgbGF0dGVyIGlzIHByb2JhYmx5IGJldHRlci4gSSdsbCBsZWF2ZSBpdCB0byBhIGZ1dHVy
ZSBidWcgdG8gZml4IHRoYXQsIHNpbmNlIGJyZWF0aGluZyBvbgorLy8gdGhpcyBjb2RlIGxlYWRz
IHRvIHJlZ3Jlc3Npb25zIGZvciBkYXlzLCBhbmQgaXQncyBub3QgY2xlYXIgdGhhdCBtYWtpbmcg
dGhpcyBjaGFuZ2Ugd291bGQKKy8vIGltcHJvdmUgcGVyZiBzaW5jZSBpdCB3b3VsZCBub3QgY2hh
bmdlIHRoZSBjb2xsZWN0b3IncyBiZWhhdmlvciwgYW5kIGVpdGhlciB3YXkgdGhlIGFsbG9jYXRv
cgorLy8gaGFzIHRvIGxvb2sgYXQgYm90aCBiaXR2ZWN0b3JzLgorLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjEyMQorCitjbGFzcyBNYXJrZWRBbGxvY2F0b3Ig
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEFsbG9jYXRvcik7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKKworcHVibGljOgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlz
dCgpOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOworCisgICAgTWFy
a2VkQWxsb2NhdG9yKEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOworICAgIHZvaWQgc2V0U3Vic3Bh
Y2UoU3Vic3BhY2UqKTsKKyAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisgICAgdm9p
ZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKKyAg
ICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIGJlZ2luTWFya2luZ0ZvckZ1bGxD
b2xsZWN0aW9uKCk7CisgICAgdm9pZCBlbmRNYXJraW5nKCk7CisgICAgdm9pZCBzbmFwc2hvdFVu
c3dlcHRGb3JFZGVuQ29sbGVjdGlvbigpOworICAgIHZvaWQgc25hcHNob3RVbnN3ZXB0Rm9yRnVs
bENvbGxlY3Rpb24oKTsKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgdm9pZCBzaHJpbmsoKTsKKyAg
ICB2b2lkIGFzc2VydE5vVW5zd2VwdCgpOworICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2VsbFNpemU7IH0KKyAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRy
aWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb247IH0KKyAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KKyAgICBIZWFwQ2VsbDo6S2lu
ZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQorICAg
IHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KTsKKyAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CisKKyAgICBib29sIGlzRnJl
ZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0
IEZ1bmN0b3ImKTsKKyAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFu
ZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgCisgICAgdm9pZCBh
ZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCByZW1vdmVCbG9jayhNYXJr
ZWRCbG9jazo6SGFuZGxlKik7CisKKyAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5l
KTsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCk7Cisg
ICAgCisgICAgTG9jayYgYml0dmVjdG9yTG9jaygpIHsgcmV0dXJuIG1fYml0dmVjdG9yTG9jazsg
fQorICAgCisjZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUyhsb3dlckJpdE5h
bWUsIGNhcGl0YWxCaXROYW1lKSAgICAgXAorICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fICMj
IGxvd2VyQml0TmFtZVtpbmRleF07IH0gXAorICAgIGJvb2wgaXMgIyMgY2FwaXRhbEJpdE5hbWUo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sp
IGNvbnN0IHsgcmV0dXJuIGlzICMjIGNhcGl0YWxCaXROYW1lKGxvY2tlciwgYmxvY2stPmluZGV4
KCkpOyB9IFwKKyAgICB2b2lkIHNldElzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgc2l6ZV90IGluZGV4LCBib29sIHZhbHVlKSB7IG1fICMjIGxvd2VyQml0TmFtZVtp
bmRleF0gPSB2YWx1ZTsgfSBcCisgICAgdm9pZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgYm9v
bCB2YWx1ZSkgeyBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIsIGJsb2NrLT5pbmRleCgp
LCB2YWx1ZSk7IH0KKyAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxM
T0NBVE9SX0JJVF9BQ0NFU1NPUlMpCisjdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNT
T1JTCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaEJpdFZl
Y3Rvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworI2Rl
ZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxC
aXROYW1lKSBcCisgICAgICAgIGZ1bmMobV8gIyMgbG93ZXJCaXROYW1lKTsKKyAgICAgICAgRk9S
X0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sp
OworI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoQml0VmVjdG9yV2l0aE5h
bWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyNkZWZp
bmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0
TmFtZSkgXAorICAgICAgICBmdW5jKG1fICMjIGxvd2VyQml0TmFtZSwgI2NhcGl0YWxCaXROYW1l
KTsKKyAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRP
Ul9CSVRfQ0FMTEJBQ0spOworI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCisg
ICAgfQorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9j
YXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNl
OyB9CisgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOyB9CisgICAgCisgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQorICAgIHZvaWQg
c2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsg
bV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSA9IGFsbG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4
dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvcikgeyBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0
b3I7IH0KKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3Rl
YWwoKTsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tUb1N3ZWVwKCk7
CisgICAgCisgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFj
ZTsgfQorICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OworICAgIAorICAgIGNv
bnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lk
IGRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcoKTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCog
YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAg
ICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAgIAorICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFu
ZGxlKj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGljZXM7
CisKKyAgICAvLyBNdXRhdG9yIHVzZXMgdGhpcyB0byBndWFyZCByZXNpemluZyB0aGUgYml0dmVj
dG9ycy4gVGhvc2UgdGhpbmdzIGluIHRoZSBHQyB0aGF0IG1heSBydW4KKyAgICAvLyBjb25jdXJy
ZW50bHkgdG8gdGhlIG11dGF0b3IgbXVzdCBsb2NrIHRoaXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGJp
dHZlY3RvcnMuCisgICAgTG9jayBtX2JpdHZlY3RvckxvY2s7CisjZGVmaW5lIE1BUktFRF9BTExP
Q0FUT1JfQklUX0RFQ0xBUkFUSU9OKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyAg
ICBGYXN0Qml0VmVjdG9yIG1fICMjIGxvd2VyQml0TmFtZTsKKyAgICBGT1JfRUFDSF9NQVJLRURf
QUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTikKKyN1bmRlZiBN
QVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElPTgorICAgIAorICAgIC8vIEFmdGVyIHlvdSBk
byBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91
IGNsZWFyIHRoZSBiaXQgaW4gdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5k
IGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgorICAgIHNpemVfdCBtX2FsbG9jYXRpb25D
dXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlk
YXRlIGZvciBhbGxvY2F0aW9uLgorICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAvLyBQ
b2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkgYWxs
b2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgorICAgIHNpemVfdCBtX3Vuc3dl
cHRDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2Fu
ZGlkYXRlIGZvciBpbmNyZW1lbnRhbCBzd2VlcGluZy4KKyAgICAKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBtX2N1cnJlbnRCbG9jazsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RB
Y3RpdmVCbG9jazsKKworICAgIExvY2sgbV9sb2NrOworICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7
CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgLy8gRklYTUU6IEFs
bCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4CisgICAgSGVhcCogbV9oZWFw
IHsgbnVsbHB0ciB9OworICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OworICAg
IE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBN
YXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7
IG51bGxwdHIgfTsKK307CisKK2lubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZz
ZXRPZkZyZWVMaXN0KCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9j
YXRvciwgbV9mcmVlTGlzdCk7Cit9CisKK2lubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkNlbGxTaXplKCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtl
ZEFsbG9jYXRvciwgbV9jZWxsU2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAy
MjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKLSNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVz
LmgiCisjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTQy
LDcgKzQyLDcgQEAgY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0jZGVmaW5lIEZPUl9FQUNIX01BUktFRF9BTExPQ0FU
T1JfQklUKG1hY3JvKSBcCisjZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQobWFj
cm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9mIGJsb2NrIGluZGljZXMg
dGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXAogICAgIG1hY3JvKGVtcHR5LCBFbXB0eSkgLyog
VGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBubyBsaXZlIG9iamVjdHMuICovIFwKICAg
ICBtYWNybyhhbGxvY2F0ZWQsIEFsbG9jYXRlZCkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRo
YXQgYXJlIGZ1bGwgb2YgbGl2ZSBvYmplY3RzLiAqL1wKQEAgLTY1LDEyICs2NSwxMiBAQCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAvLwogLy8gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBi
ZXR0ZXIuIEknbGwgbGVhdmUgaXQgdG8gYSBmdXR1cmUgYnVnIHRvIGZpeCB0aGF0LCBzaW5jZSBi
cmVhdGhpbmcgb24KIC8vIHRoaXMgY29kZSBsZWFkcyB0byByZWdyZXNzaW9ucyBmb3IgZGF5cywg
YW5kIGl0J3Mgbm90IGNsZWFyIHRoYXQgbWFraW5nIHRoaXMgY2hhbmdlIHdvdWxkCi0vLyBpbXBy
b3ZlIHBlcmYgc2luY2UgaXQgd291bGQgbm90IGNoYW5nZSB0aGUgY29sbGVjdG9yJ3MgYmVoYXZp
b3IsIGFuZCBlaXRoZXIgd2F5IHRoZSBhbGxvY2F0b3IKKy8vIGltcHJvdmUgcGVyZiBzaW5jZSBp
dCB3b3VsZCBub3QgY2hhbmdlIHRoZSBjb2xsZWN0b3IncyBiZWhhdmlvciwgYW5kIGVpdGhlciB3
YXkgdGhlIGRpcmVjdG9yeQogLy8gaGFzIHRvIGxvb2sgYXQgYm90aCBiaXR2ZWN0b3JzLgogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjEyMQogCi1jbGFzcyBN
YXJrZWRBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZEFsbG9jYXRv
cik7CitjbGFzcyBCbG9ja0RpcmVjdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmxv
Y2tEaXJlY3RvcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC03OSw3ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvcihIZWFw
Kiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICBCbG9ja0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNl
bGxTaXplKTsKICAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKQEAg
LTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2hyaW5rKCk7CiAgICAgdm9pZCBhc3Nl
cnROb1Vuc3dlcHQoKTsKICAgICBzaXplX3QgY2VsbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nl
bGxTaXplOyB9Ci0gICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CiAgICAgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09
IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6
S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQpA
QCAtMTE1LDQwICsxMTUsNDAgQEAgcHVibGljOgogICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXpl
Rm9yQnl0ZXMoc2l6ZV90KTsKICAgICAKICAgICBMb2NrJiBiaXR2ZWN0b3JMb2NrKCkgeyByZXR1
cm4gbV9iaXR2ZWN0b3JMb2NrOyB9Ci0gICAKLSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRf
QUNDRVNTT1JTKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCisKKyNkZWZpbmUg
QkxPQ0tfRElSRUNUT1JZX0JJVF9BQ0NFU1NPUlMobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0TmFt
ZSkgICAgIFwKICAgICBib29sIGlzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtXyAjIyBsb3dlckJpdE5hbWVbaW5k
ZXhdOyB9IFwKICAgICBib29sIGlzICMjIGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIsIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKSBjb25zdCB7IHJldHVybiBp
cyAjIyBjYXBpdGFsQml0TmFtZShsb2NrZXIsIGJsb2NrLT5pbmRleCgpKTsgfSBcCiAgICAgdm9p
ZCBzZXRJcyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBp
bmRleCwgYm9vbCB2YWx1ZSkgeyBtXyAjIyBsb3dlckJpdE5hbWVbaW5kZXhdID0gdmFsdWU7IH0g
XAogICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJpdE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2ssIGJvb2wgdmFsdWUpIHsgc2V0SXMg
IyMgY2FwaXRhbEJpdE5hbWUobG9ja2VyLCBibG9jay0+aW5kZXgoKSwgdmFsdWUpOyB9Ci0gICAg
Rk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQUNDRVNT
T1JTKQotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUworICAgIEZPUl9FQUNI
X0JMT0NLX0RJUkVDVE9SWV9CSVQoQkxPQ0tfRElSRUNUT1JZX0JJVF9BQ0NFU1NPUlMpCisjdW5k
ZWYgQkxPQ0tfRElSRUNUT1JZX0JJVF9BQ0NFU1NPUlMKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQml0VmVjdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
Y29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0NB
TExCQUNLKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyNkZWZpbmUgQkxPQ0tfRElS
RUNUT1JZX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCiAgICAg
ICAgIGZ1bmMobV8gIyMgbG93ZXJCaXROYW1lKTsKLSAgICAgICAgRk9SX0VBQ0hfTUFSS0VEX0FM
TE9DQVRPUl9CSVQoTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0spOwotI3VuZGVmIE1BUktF
RF9BTExPQ0FUT1JfQklUX0NBTExCQUNLCisgICAgICAgIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9S
WV9CSVQoQkxPQ0tfRElSRUNUT1JZX0JJVF9DQUxMQkFDSyk7CisjdW5kZWYgQkxPQ0tfRElSRUNU
T1JZX0JJVF9DQUxMQkFDSwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaEJpdFZlY3RvcldpdGhOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklU
X0NBTExCQUNLKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKKyNkZWZpbmUgQkxPQ0tf
RElSRUNUT1JZX0JJVF9DQUxMQkFDSyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCiAg
ICAgICAgIGZ1bmMobV8gIyMgbG93ZXJCaXROYW1lLCAjY2FwaXRhbEJpdE5hbWUpOwotICAgICAg
ICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxM
QkFDSyk7Ci0jdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJBQ0sKKyAgICAgICAgRk9S
X0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChCTE9DS19ESVJFQ1RPUllfQklUX0NBTExCQUNLKTsK
KyN1bmRlZiBCTE9DS19ESVJFQ1RPUllfQklUX0NBTExCQUNLCiAgICAgfQogICAgIAotICAgIE1h
cmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9j
YXRvcjsgfQotICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9Ci0gICAgTWFya2VkQWxs
b2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9Ci0gICAgCi0g
ICAgdm9pZCBzZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1f
bmV4dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZSA9IGFsbG9jYXRvcjsgfQotICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KKyAgICBCbG9ja0Rp
cmVjdG9yeSogbmV4dERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dERpcmVjdG9yeTsg
fQorICAgIEJsb2NrRGlyZWN0b3J5KiBuZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dERpcmVjdG9yeUluU3Vic3BhY2U7IH0KKyAgICBCbG9ja0RpcmVjdG9yeSog
bmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
bmV4dERpcmVjdG9yeUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQorICAgIAorICAgIHZvaWQg
c2V0TmV4dERpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1fbmV4dERpcmVj
dG9yeSA9IGRpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0TmV4dERpcmVjdG9yeUluU3Vic3BhY2Uo
QmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkgeyBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlID0g
ZGlyZWN0b3J5OyB9CisgICAgdm9pZCBzZXROZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9uZXh0RGlyZWN0b3J5SW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yID0gZGlyZWN0b3J5OyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6
OkhhbmRsZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7CiAgICAgCkBAIC0xODIsMTAgKzE4Miwx
MCBAQCBwcml2YXRlOgogICAgIC8vIE11dGF0b3IgdXNlcyB0aGlzIHRvIGd1YXJkIHJlc2l6aW5n
IHRoZSBiaXR2ZWN0b3JzLiBUaG9zZSB0aGluZ3MgaW4gdGhlIEdDIHRoYXQgbWF5IHJ1bgogICAg
IC8vIGNvbmN1cnJlbnRseSB0byB0aGUgbXV0YXRvciBtdXN0IGxvY2sgdGhpcyB3aGVuIGFjY2Vz
c2luZyB0aGUgYml0dmVjdG9ycy4KICAgICBMb2NrIG1fYml0dmVjdG9yTG9jazsKLSNkZWZpbmUg
TUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04obG93ZXJCaXROYW1lLCBjYXBpdGFsQml0
TmFtZSkgXAorI2RlZmluZSBCTE9DS19ESVJFQ1RPUllfQklUX0RFQ0xBUkFUSU9OKGxvd2VyQml0
TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKICAgICBGYXN0Qml0VmVjdG9yIG1fICMjIGxvd2VyQml0
TmFtZTsKLSAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxMT0NBVE9S
X0JJVF9ERUNMQVJBVElPTikKLSN1bmRlZiBNQVJLRURfQUxMT0NBVE9SX0JJVF9ERUNMQVJBVElP
TgorICAgIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQoQkxPQ0tfRElSRUNUT1JZX0JJVF9E
RUNMQVJBVElPTikKKyN1bmRlZiBCTE9DS19ESVJFQ1RPUllfQklUX0RFQ0xBUkFUSU9OCiAgICAg
CiAgICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBv
ZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNw
b25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCkBAIC0x
OTgsMjQgKzE5OCwyNCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX2xvY2s7CiAgICAgdW5zaWdu
ZWQgbV9jZWxsU2l6ZTsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAg
ICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVz
ZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4CiAgICAgSGVhcCogbV9oZWFwIHsgbnVsbHB0
ciB9OwogICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFs
bG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRv
ciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIg
fTsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OworICAg
IEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9Owor
ICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgeyBudWxscHRyIH07CiB9OwogCi1pbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpCitpbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZz
ZXRPZkZyZWVMaXN0KCkKIHsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEFsbG9j
YXRvciwgbV9mcmVlTGlzdCk7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihCbG9ja0RpcmVj
dG9yeSwgbV9mcmVlTGlzdCk7CiB9CiAKLWlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkNlbGxTaXplKCkKK2lubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9m
ZnNldE9mQ2VsbFNpemUoKQogewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQWxs
b2NhdG9yLCBtX2NlbGxTaXplKTsKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGly
ZWN0b3J5LCBtX2NlbGxTaXplKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAko
cmV2aXNpb24gMjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmg6MjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9v
bCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBj
b25zdAoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHRhcmdldCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9j
YXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXpl
U3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KSk7CisgICAgICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5l
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKK3sKKyAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3QgaW5k
ZXgpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhdKTsKKyAgICAgICAgfSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7Cisg
ICAgbV9tYXJraW5nTm90RW1wdHkuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3Qg
aW5kZXgpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9ibG9ja3NbaW5kZXhdKTsKKyAgICAgICAg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNpb24gMjI2Nzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsMTggKzI1LDE4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKLSNpbmNs
dWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0
IHZvaWQqIHRhcmdldCkgY29uc3QKK2lubGluZSBib29sIEJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVM
aXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmVl
TGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
K0FMV0FZU19JTkxJTkUgdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSkKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+
IEhlYXBDZWxsKiB7CkBAIC00NSw3ICs0NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjphbGwKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIEJs
b2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAg
ICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKQEAg
LTUzLDcgKzUzLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIAog
ICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVj
dG9yeTo6Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAg
ICBtX21hcmtpbmdOb3RFbXB0eS5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBp
bmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1
dGVzLmNwcAkocmV2aXNpb24gMjI2NzgzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcDoyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEFsbG9jYXRv
ckF0dHJpYnV0ZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoInsiLCBkZXN0cnVjdGlvbiwgIiwgIiwgY2VsbEtpbmQsICJ9Iik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQXR0cmli
dXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbEF0
dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9DZWxsQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTMgKzI0LDEzIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMu
aCIKKyNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5oIgogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEFsbG9jYXRvckF0dHJpYnV0ZXM6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgQ2VsbEF0dHJpYnV0ZXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoInsiLCBkZXN0cnVjdGlvbiwg
IiwgIiwgY2VsbEtpbmQsICJ9Iik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yQXR0cmlidXRlcy5oOjIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCisjaW5j
bHVkZSAiSGVhcENlbGwuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHsKKyAgICBBbGxvY2F0b3JB
dHRyaWJ1dGVzKCkgeyB9CisgICAgCisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyhEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKQorICAgICAgICA6IGRl
c3RydWN0aW9uKGRlc3RydWN0aW9uKQorICAgICAgICAsIGNlbGxLaW5kKGNlbGxLaW5kKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiB7IERvZXNOb3ROZWVkRGVzdHJ1
Y3Rpb24gfTsKKyAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCB7IEhlYXBDZWxsOjpKU0NlbGwg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9DZWxsQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSwxMCArMzEsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzIHsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzKCkgeyB9CitzdHJ1Y3QgQ2VsbEF0dHJp
YnV0ZXMgeworICAgIENlbGxBdHRyaWJ1dGVzKCkgeyB9CiAgICAgCi0gICAgQWxsb2NhdG9yQXR0
cmlidXRlcyhEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpLaW5kIGNlbGxL
aW5kKQorICAgIENlbGxBdHRyaWJ1dGVzKERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbiwgSGVh
cENlbGw6OktpbmQgY2VsbEtpbmQpCiAgICAgICAgIDogZGVzdHJ1Y3Rpb24oZGVzdHJ1Y3Rpb24p
CiAgICAgICAgICwgY2VsbEtpbmQoY2VsbEtpbmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJldmVudENv
bGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgpAQCAtNDYsNyAr
NDYsNyBAQCBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLU1h
cmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCitCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CkBAIC01OSwx
NCArNTksMTQgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IAogdm9p
ZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7CiAgICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cykpCiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBhbGxv
Y2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFy
a2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9
IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKQEAgLTc4LDM2ICs3
OCwzNiBAQCBNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jCiAgICAgLy8g
anVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdlJ3JlIGlu
IHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAogICAgIC8vIGFsbG9jYXRvciBhcyAi
cGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQgbGVhZCB0
byBwZXJmb3JtYW5jZQogICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBoZXJlIGlz
IHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywgdG8KLSAg
ICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8vIHByZXZlbnQgc2lt
dWx0YW5lb3VzbHkgQmxvY2tEaXJlY3RvcnkgY3JlYXRpb25zIGZyb20gbXVsdGlwbGUgdGhyZWFk
cy4gVGhpcyBjb2RlIGVuc3VyZXMKICAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9jYXRvciIg
dHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlh
bGl6ZWQKICAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuZGlyZWN0b3J5TG9jaygpKTsKKyAgICBpZiAoQmxvY2tE
aXJlY3RvcnkqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQogICAg
ICAgICByZXR1cm4gYWxsb2NhdG9yOwogCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9n
KCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUsICIsICIsIG1fYXR0cmli
dXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtl
ZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KLSAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxN
YXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3MpOwotICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdldCgpOwotICAgIG1fYWxsb2Nh
dG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3IpKTsKLSAgICBhbGxvY2F0b3ItPnNl
dFN1YnNwYWNlKHRoaXMpOwotICAgIG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwg
YWxsb2NhdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tEaXJlY3Rvcnk+IHVuaXF1ZURp
cmVjdG9yeSA9CisgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tEaXJlY3Rvcnk+KG1fc3Bh
Y2UuaGVhcCgpLCBzaXplQ2xhc3MpOworICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkgPSB1
bmlxdWVEaXJlY3RvcnkuZ2V0KCk7CisgICAgbV9kaXJlY3Rvcmllcy5hcHBlbmQoV1RGTW92ZSh1
bmlxdWVEaXJlY3RvcnkpKTsKKyAgICBkaXJlY3RvcnktPnNldFN1YnNwYWNlKHRoaXMpOworICAg
IG1fc3BhY2UuYWRkQmxvY2tEaXJlY3RvcnkobG9ja2VyLCBkaXJlY3RvcnkpOwogICAgIGluZGV4
ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNzKTsKICAgICBmb3IgKDs7
KSB7CiAgICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRl
eF0gIT0gc2l6ZUNsYXNzKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9hbGxvY2F0
b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0b3I7CisgICAgICAgIG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXBbaW5kZXhdID0gZGlyZWN0b3J5OwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmRl
eC0tKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFsbG9jYXRvci0+c2V0TmV4dEFs
bG9jYXRvckluU3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7Ci0gICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIGRpcmVjdG9yeS0+
c2V0TmV4dERpcmVjdG9yeUluU3Vic3BhY2UobV9maXJzdERpcmVjdG9yeSk7CisgICAgbV9hbGln
bmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsK
LSAgICByZXR1cm4gYWxsb2NhdG9yOworICAgIG1fZmlyc3REaXJlY3RvcnkgPSBkaXJlY3Rvcnk7
CisgICAgcmV0dXJuIGRpcmVjdG9yeTsKIH0KIAogdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCkBAIC0xMjIsNyArMTIyLDcgQEAg
dm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KAogewogICAgIHNhbml0aXpl
U3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CiAgICAgCi0gICAgaWYgKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkVuc3VyZUFsbG9jYXRvcikpCisgICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXplIDw9IE9wdGlv
bnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcs
MzEgKzM3LDMzIEBAIHB1YmxpYzoKICAgICAvLyBJbiBzb21lIGNvZGUgcGF0aHMsIHdlIG5lZWQg
aXQgdG8gYmUgYSBjb21waWxlIGVycm9yIHRvIGNhbGwgdGhlIHZpcnR1YWwgdmVyc2lvbiBvZiBv
bmUgb2YKICAgICAvLyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyB3aHkgd2UgZG8gZmluYWwgbWV0
aG9kcyB0aGUgb2xkIHNjaG9vbCB3YXkuCiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2Rl
KTsKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5IHN1YnNwYWNlcyBzcGVhayBvZiBCbG9ja0RpcmVj
dG9yaWVzIGFzICJhbGxvY2F0b3JzIiwgYnV0IHRoYXQncyB0ZW1wb3JhcnkuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTU1OQorICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsK
KyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9j
YXRvckZvck1vZGUpOwogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXplU3RlcCk7IH0KICAgICAKLSAgICBN
YXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9j
YXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JT
aXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAKIHByaXZh
dGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKICAgICAKICAgICAvLyBU
aGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQg
YWxsb2NhdG9yIGNyZWF0aW9uLgogICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVm
ZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICB2b2lkKiB0cnlBbGxv
Y2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJy
YXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9j
YXRvckZvclNpemVTdGVwOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQWxsb2Nh
dG9yPj4gbV9hbGxvY2F0b3JzOworICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJr
ZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0RpcmVjdG9yeT4+IG1fZGlyZWN0b3JpZXM7CiB9Owog
Ci1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQUxX
QVlTX0lOTElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIGlm
IChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVD
bGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogcmVzdWx0ID0gbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07
CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1vZGU6
Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxD
b250ZXh0LmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDRGVmZXJyYWxDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7Ci1jbGFzcyBNYXJrZWRBbGxvY2F0b3I7Citj
bGFzcyBCbG9ja0RpcmVjdG9yeTsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQgewogICAgIGZy
aWVuZCBjbGFzcyBIZWFwOwotICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CisgICAg
ZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVy
cmFsQ29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogCisjaW5j
bHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbGxlY3RpbmdTY29w
ZS5oIgpAQCAtNTUsNyArNTYsNiBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludFNldC5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKQEAgLTIyMDAs
NyArMjIwMCw3IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAgc2l6
ZV90IGN1cnJlbnRIZWFwU2l6ZSA9IDA7CiAKICAgICAvLyBGb3IgbWFya2VkIHNwYWNlLCB3ZSB1
c2UgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB2aXNpdGVkLiBUaGlzIG1hdGNoZXMgdGhlIGxv
Z2ljIGZvcgotICAgIC8vIE1hcmtlZEFsbG9jYXRvcidzIGNhbGxzIHRvIGRpZEFsbG9jYXRlKCks
IHdoaWNoIGVmZmVjdGl2ZWx5IGFjY291bnRzIGZvciB0aGUgdG90YWwgc2l6ZSBvZgorICAgIC8v
IEJsb2NrRGlyZWN0b3J5J3MgY2FsbHMgdG8gZGlkQWxsb2NhdGUoKSwgd2hpY2ggZWZmZWN0aXZl
bHkgYWNjb3VudHMgZm9yIHRoZSB0b3RhbCBzaXplIG9mCiAgICAgLy8gb2JqZWN0cyBhbGxvY2F0
ZWQgcmF0aGVyIHRoYW4gYmxvY2tzIHVzZWQuIFRoaXMgd2lsbCB1bmRlcmVzdGltYXRlIGNhcGFj
aXR5KCksIGFuZCBpbiBjYXNlCiAgICAgLy8gb2YgZnJhZ21lbnRhdGlvbiwgdGhpcyBtYXkgYmUg
c3Vic3RhbnRpYWwuIEZvcnR1bmF0ZWx5LCBtYXJrZWQgc3BhY2UgcmFyZWx5IGZyYWdtZW50cyBi
ZWNhdXNlCiAgICAgLy8gY2VsbHMgdXN1YWxseSBoYXZlIGEgbmFycm93IHJhbmdlIG9mIHNpemVz
LiBTbywgdGhlIHVuZGVyZXN0aW1hdGlvbiBpcyBwcm9iYWJseSBPSy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYWNoaW5lVGhyZWFkczsKIGNsYXNzIE1hcmtT
dGFja0FycmF5OwogY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7Ci1jbGFzcyBNYXJr
ZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNldDsKQEAgLTM5MCw3ICszOTAsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKLSAgICBmcmllbmQgY2xhc3Mg
TWFya2VkQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFJ1bm5pbmdTY29wZTsK
ICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBDZWxsLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3Mg
TGFyZ2VBbGxvY2F0aW9uOwogY2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBTdWJzcGFjZTsKIGNs
YXNzIFZNOwotc3RydWN0IEFsbG9jYXRvckF0dHJpYnV0ZXM7CitzdHJ1Y3QgQ2VsbEF0dHJpYnV0
ZXM7CiAKIGNsYXNzIEhlYXBDZWxsIHsKIHB1YmxpYzoKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogICAgIFZNKiB2bSgpIGNvbnN0OwogICAgIAogICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0
OwotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgYWxsb2NhdG9yQXR0cmlidXRlcygpIGNvbnN0Owor
ICAgIENlbGxBdHRyaWJ1dGVzIGNlbGxBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgRGVzdHJ1Y3Rp
b25Nb2RlIGRlc3RydWN0aW9uTW9kZSgpIGNvbnN0OwogICAgIEtpbmQgY2VsbEtpbmQoKSBjb25z
dDsKICAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsNyBAQCBBTFdBWVNfSU5MSU5FIHNpemVfdCBIZWFwQ2VsbDo6Y2VsbFNp
emUoCiAgICAgcmV0dXJuIG1hcmtlZEJsb2NrKCkuY2VsbFNpemUoKTsKIH0KIAotQUxXQVlTX0lO
TElORSBBbGxvY2F0b3JBdHRyaWJ1dGVzIEhlYXBDZWxsOjphbGxvY2F0b3JBdHRyaWJ1dGVzKCkg
Y29uc3QKK0FMV0FZU19JTkxJTkUgQ2VsbEF0dHJpYnV0ZXMgSGVhcENlbGw6OmNlbGxBdHRyaWJ1
dGVzKCkgY29uc3QKIHsKICAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0
dXJuIGxhcmdlQWxsb2NhdGlvbigpLmF0dHJpYnV0ZXMoKTsKQEAgLTgyLDEyICs4MiwxMiBAQCBB
TFdBWVNfSU5MSU5FIEFsbG9jYXRvckF0dHJpYnV0ZXMgSGVhcENlCiAKIEFMV0FZU19JTkxJTkUg
RGVzdHJ1Y3Rpb25Nb2RlIEhlYXBDZWxsOjpkZXN0cnVjdGlvbk1vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBhbGxvY2F0b3JBdHRyaWJ1dGVzKCkuZGVzdHJ1Y3Rpb247CisgICAgcmV0dXJuIGNl
bGxBdHRyaWJ1dGVzKCkuZGVzdHJ1Y3Rpb247CiB9CiAKIEFMV0FZU19JTkxJTkUgSGVhcENlbGw6
OktpbmQgSGVhcENlbGw6OmNlbGxLaW5kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxsb2NhdG9y
QXR0cmlidXRlcygpLmNlbGxLaW5kOworICAgIHJldHVybiBjZWxsQXR0cmlidXRlcygpLmNlbGxL
aW5kOwogfQogCiBBTFdBWVNfSU5MSU5FIFN1YnNwYWNlKiBIZWFwQ2VsbDo6c3Vic3BhY2UoKSBj
b25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3Bw
CShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2Vs
bFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0cnVjdCBEZWZhdWx0
RGVzdHJveUZ1bmMgewogICAgIH0KIH07CiAKLUhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKEFs
bG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK0hlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBl
KENlbGxBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5o
CShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2Vs
bFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBAIGNsYXNzIEhlYXBDZWxs
VHlwZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVhcENlbGxUeXBlKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFw
Q2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSGVh
cENlbGxUeXBlKENlbGxBdHRyaWJ1dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5IZWFwQ2VsbFR5cGUoKTsKIAotICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBDZWxsQXR0
cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogCiAg
ICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhl
IHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CiAgICAgLy8gYmUgY2FsbGVk
IGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKIAogcHJpdmF0ZToKLSAgICBBbGxv
Y2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJp
YnV0ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMjI2Nzgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6
c2NoZWR1bGVUaW1lcigpCiAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVy
KEhlYXAqIGhlYXApCiAgICAgOiBCYXNlKGhlYXAtPnZtKCkpCi0gICAgLCBtX2N1cnJlbnRBbGxv
Y2F0b3IobnVsbHB0cikKKyAgICAsIG1fY3VycmVudERpcmVjdG9yeShudWxscHRyKQogewogfQog
CkBAIC03OSw4ICs3OSw4IEBAIGJvb2wgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9j
aygKIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbnVsbHB0cjsKICAgICAKLSAg
ICBmb3IgKDsgbV9jdXJyZW50QWxsb2NhdG9yOyBtX2N1cnJlbnRBbGxvY2F0b3IgPSBtX2N1cnJl
bnRBbGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBibG9jayA9IG1fY3VycmVu
dEFsbG9jYXRvci0+ZmluZEJsb2NrVG9Td2VlcCgpOworICAgIGZvciAoOyBtX2N1cnJlbnREaXJl
Y3Rvcnk7IG1fY3VycmVudERpcmVjdG9yeSA9IG1fY3VycmVudERpcmVjdG9yeS0+bmV4dERpcmVj
dG9yeSgpKSB7CisgICAgICAgIGJsb2NrID0gbV9jdXJyZW50RGlyZWN0b3J5LT5maW5kQmxvY2tU
b1N3ZWVwKCk7CiAgICAgICAgIGlmIChibG9jaykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTk4LDEyICs5OCwxMiBAQCBib29sIEluY3JlbWVudGFsU3dlZXBlcjo6c3dlZXBOZXh0Qmxv
Y2soCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZygpCiB7CiAgICAgc2No
ZWR1bGVUaW1lcigpOwotICAgIG1fY3VycmVudEFsbG9jYXRvciA9IG1fdm0tPmhlYXAub2JqZWN0
U3BhY2UoKS5maXJzdEFsbG9jYXRvcigpOworICAgIG1fY3VycmVudERpcmVjdG9yeSA9IG1fdm0t
PmhlYXAub2JqZWN0U3BhY2UoKS5maXJzdERpcmVjdG9yeSgpOwogfQogCiB2b2lkIEluY3JlbWVu
dGFsU3dlZXBlcjo6c3RvcFN3ZWVwaW5nKCkKIHsKLSAgICBtX2N1cnJlbnRBbGxvY2F0b3IgPSBu
dWxscHRyOworICAgIG1fY3VycmVudERpcmVjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYgKG1fdm0p
CiAgICAgICAgIGNhbmNlbFRpbWVyKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwotY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiAKIGNsYXNzIEluY3Jl
bWVudGFsU3dlZXBlciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CkBAIC00OCw3
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb1N3ZWVwKE1vbm90b25pY1RpbWUgc3RhcnRU
aW1lKTsKICAgICB2b2lkIHNjaGVkdWxlVGltZXIoKTsKICAgICAKLSAgICBNYXJrZWRBbGxvY2F0
b3IqIG1fY3VycmVudEFsbG9jYXRvcjsKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9jdXJyZW50RGly
ZWN0b3J5OwogICAgIGJvb2wgbV9zaG91bGRGcmVlRmFzdE1hbGxvY01lbW9yeUFmdGVyU3dlZXBp
bmcgeyBmYWxzZSB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldC5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb0NlbGxTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAKLSNpbmNsdWRlICJNYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIElzb0NlbGxTZXQ6Oklzb0NlbGxTZXQoSXNvU3Vi
c3BhY2UmIHN1YnNwYWNlKQogICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKIHsKLSAgICBzaXpl
X3Qgc2l6ZSA9IHN1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IHN1YnNwYWNlLm1fZGlyZWN0b3J5Lm1fYmxvY2tzLnNpemUoKTsKICAgICBtX2Js
b2Nrc1dpdGhCaXRzLnJlc2l6ZShzaXplKTsKICAgICBtX2JpdHMuZ3JvdyhzaXplKTsKICAgICBz
dWJzcGFjZS5tX2NlbGxTZXRzLmFwcGVuZCh0aGlzKTsKQEAgLTUyLDcgKzUyLDcgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQogICAgIHB1YmxpYzoKICAgICAgICAg
VGFzayhJc29DZWxsU2V0JiBzZXQpCiAgICAgICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAg
ICAgICwgbV9hbGxvY2F0b3Ioc2V0Lm1fc3Vic3BhY2UubV9hbGxvY2F0b3IpCisgICAgICAgICAg
ICAsIG1fZGlyZWN0b3J5KHNldC5tX3N1YnNwYWNlLm1fZGlyZWN0b3J5KQogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC02MSwxOCArNjEsMTggQEAgUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKQogICAgICAgICAgICAgaWYgKG1fZG9uZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gYml0cyA9IG1fYWxsb2NhdG9yLm1fbWFya2lu
Z05vdEVtcHR5ICYgbV9zZXQubV9ibG9ja3NXaXRoQml0czsKKyAgICAgICAgICAgIGF1dG8gYml0
cyA9IG1fZGlyZWN0b3J5Lm1fbWFya2luZ05vdEVtcHR5ICYgbV9zZXQubV9ibG9ja3NXaXRoQml0
czsKICAgICAgICAgICAgIG1faW5kZXggPSBiaXRzLmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7Ci0g
ICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkpIHsK
KyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZGlyZWN0b3J5Lm1fYmxvY2tzLnNpemUoKSkg
ewogICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3Iu
bV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgICAgIHJldHVybiBtX2RpcmVjdG9yeS5tX2Js
b2Nrc1ttX2luZGV4KytdOwogICAgICAgICB9CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIElzb0NlbGxTZXQmIG1fc2V0OwotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2Nh
dG9yOworICAgICAgICBCbG9ja0RpcmVjdG9yeSYgbV9kaXJlY3Rvcnk7CiAgICAgICAgIHNpemVf
dCBtX2luZGV4IHsgMCB9OwogICAgICAgICBMb2NrIG1fbG9jazsKICAgICAgICAgYm9vbCBtX2Rv
bmUgeyBmYWxzZSB9OwpAQCAtODMsNyArODMsNyBAQCBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRC
bG9jazo6SGFuZGxlKigpCiAKIE5FVkVSX0lOTElORSBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21z
UGVyQmxvY2s+KiBJc29DZWxsU2V0OjphZGRTbG93KHNpemVfdCBibG9ja0luZGV4KQogewotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5tX2FsbG9jYXRvci5tX2JpdHZlY3Rv
ckxvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5tX2RpcmVjdG9y
eS5tX2JpdHZlY3RvckxvY2spOwogICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYmxvY2tJ
bmRleF07CiAgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CiAgICAgaWYgKCFiaXRz
KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNp
emVfdCBuZQogdm9pZCBJc29DZWxsU2V0OjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRl
eCkKIHsKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5t
X2FsbG9jYXRvci5tX2JpdHZlY3RvckxvY2spOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fc3Vic3BhY2UubV9kaXJlY3RvcnkubV9iaXR2ZWN0b3JMb2NrKTsKICAgICAgICAgbV9i
bG9ja3NXaXRoQml0c1tibG9ja0luZGV4XSA9IGZhbHNlOwogICAgIH0KICAgICBtX2JpdHNbYmxv
Y2tJbmRleF0gPSBudWxscHRyOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgSXNvQ2VsbFNldDo6
c3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEIKICAgICAgICAgewogICAgICAgICAgICAgLy8gSG9sZGlu
ZyB0aGUgYml0dmVjdG9yIGxvY2sgaGFwcGVucyB0byBiZSBlbm91Z2ggYmVjYXVzZSB0aGF0J3Mg
d2hhdCB3ZSBhbHNvIGhvbGQgaW4KICAgICAgICAgICAgIC8vIG90aGVyIHBsYWNlcyB3aGVyZSB3
ZSBtYW5pcHVsYXRlIHRoaXMgYml0dmVjdG9yLgotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX3N1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3Vic3BhY2UubV9kaXJlY3RvcnkubV9iaXR2
ZWN0b3JMb2NrKTsKICAgICAgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCld
ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJ
bmxpbmVzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2MywxMCBAQCBp
bmxpbmUgYm9vbCBJc29DZWxsU2V0Ojpjb250YWlucyhIZWFwQ2VsCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogdm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJiBm
dW5jKQogewotICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9zdWJzcGFjZS5tX2Fs
bG9jYXRvcjsKLSAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5ICYgbV9ibG9ja3NXaXRo
Qml0cykuZm9yRWFjaFNldEJpdCgKKyAgICBCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5ID0gbV9z
dWJzcGFjZS5tX2RpcmVjdG9yeTsKKyAgICAoZGlyZWN0b3J5Lm1fbWFya2luZ05vdEVtcHR5ICYg
bV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZdIChzaXplX3QgYmxv
Y2tJbmRleCkgewotICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBhbGxv
Y2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jayA9IGRpcmVjdG9yeS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKIAogICAgICAgICAg
ICAgYXV0byogYml0cyA9IG1fYml0c1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgICAgIGJs
b2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKQEAgLTExNywxMCArMTE3LDEwIEBAIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IEkKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2
b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogewotICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAg
ICBCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5ID0gbV9zdWJzcGFjZS5tX2RpcmVjdG9yeTsKICAg
ICBtX2Jsb2Nrc1dpdGhCaXRzLmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGJs
b2NrSW5kZXgpIHsKLSAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gYWxs
b2NhdG9yLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBkaXJlY3RvcnkubV9ibG9ja3NbYmxvY2tJbmRleF07CiAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGJ5IGNoZWNraW5nIG91ciBiaXRz
IGJlZm9yZSBxdWVyeWluZyBpc0xpdmUuCiAgICAgICAgICAgICAvLyBPT1BTISAobmVlZCBidWcg
VVJMKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDMxICsyNiwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlu
bGluZXMuaCIKICNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCi0jaW5jbHVk
ZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogSXNvU3Vi
c3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgSGVhcENlbGxUeXBl
KiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplKQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkK
ICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9hbGxvY2F0b3IoJmhlYXAsIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpKQorICAgICwgbV9kaXJl
Y3RvcnkoJmhlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KHNpemUpKQogICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKHN0ZDo6bWFrZV91
bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKIHsKICAgICBpbml0aWFsaXplKGhl
YXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdldCgpKTsKIAotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOwotICAgIG1fYWxs
b2NhdG9yLnNldFN1YnNwYWNlKHRoaXMpOwotICAgIG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9y
KGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKLSAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJl
Z2lzdGVyQWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7Ci0gICAgbV9maXJzdEFsbG9jYXRvciA9ICZt
X2FsbG9jYXRvcjsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuZGlyZWN0b3J5
TG9jaygpKTsKKyAgICBtX2RpcmVjdG9yeS5zZXRTdWJzcGFjZSh0aGlzKTsKKyAgICBtX3NwYWNl
LmFkZEJsb2NrRGlyZWN0b3J5KGxvY2tlciwgJm1fZGlyZWN0b3J5KTsKKyAgICBtX2FsaWduZWRN
ZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyRGlyZWN0b3J5KCZtX2RpcmVjdG9yeSk7CisgICAgbV9m
aXJzdERpcmVjdG9yeSA9ICZtX2RpcmVjdG9yeTsKIH0KIAogSXNvU3Vic3BhY2U6On5Jc29TdWJz
cGFjZSgpCiB7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZv
cihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQmxvY2tEaXJlY3RvcnkqIElz
b1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9k
ZSkKIHsKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0K
QEAgLTYzLDcgKzYzLDcgQEAgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXpl
LAogdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZh
aWx1cmVNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsK
LSAgICB2b2lkKiByZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBtX2RpcmVjdG9yeS5hbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDIy
Njc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiU3Vi
c3BhY2UuaCIKICNpbmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAKQEAg
LTQxLDExICs0MSwxMSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90
LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEJs
b2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVy
cmlkZTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpOwogCiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChz
aXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKQEAgLTU1LDE1ICs1NSwxNSBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSopIG92ZXJyaWRlOwogICAgIAogICAgIHNpemVfdCBtX3NpemU7Ci0gICAgTWFya2Vk
QWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIEJh
c2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwogfTsKIAotaW5saW5l
IE1hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCitpbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1
YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JN
b2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICBy
ZXR1cm4gJm1fYWxsb2NhdG9yOworICAgIHJldHVybiAmbV9kaXJlY3Rvcnk7CiB9CiAKICNkZWZp
bmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxUeXBlLCB0eXBlKSAoIklzb2xhdGVk
ICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFib3ZlTG93ZXJCb3VuZChyYXdQdHIpICYmIGJlbG93VXBwZXJCb3VuZChyYXdQ
dHIpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgY29uc3QgQ2VsbEF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAK
ICAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBEZXBlbmRl
bmN5KCk7IH0KICAgICAKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c05ld2x5QWxsb2NhdGVkOwogICAgIGJvb2wgbV9oYXNWYWxpZENlbGw7CiAgICAgQXRvbWljPGJv
b2w+IG1faXNNYXJrZWQ7Ci0gICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Cisg
ICAgQ2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNl
OwogICAgIFdlYWtTZXQgbV93ZWFrU2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDUxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9j
YXRvci5oIgotCi0jaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCi0jaW5jbHVkZSAiR0NBY3Rp
dml0eUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFk
ZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwotCi1NYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9j
YXRvcihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2ZyZWVMaXN0KGNlbGxT
aXplKQotICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDAp
Ci0gICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCi0gICAg
LCBtX2hlYXAoaGVhcCkKLXsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNldFN1YnNwYWNl
KFN1YnNwYWNlKiBzdWJzcGFjZSkKLXsKLSAgICBtX2F0dHJpYnV0ZXMgPSBzdWJzcGFjZS0+YXR0
cmlidXRlcygpOwotICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKLX0KLQotYm9vbCBNYXJrZWRB
bGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQotewotICAgIHVuc2lnbmVkIGl0
ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAgICBmb3IgKGF1dG8qIGJsb2NrIDogbV9ibG9j
a3MpIHsKLSAgICAgICAgaWYgKGJsb2NrKQotICAgICAgICAgICAgaG9sZExvY2soYmxvY2stPmJs
b2NrKCkubG9jaygpKTsKLSAgICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVDaGVjazsKLSAgICAg
ICAgaWYgKGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID49IEhlYXA6OnNfdGltZUNoZWNrUmVzb2x1
dGlvbikgewotICAgICAgICAgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjptb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+IGRlYWRs
aW5lKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaXRlcnNTaW5j
ZUxhc3RUaW1lQ2hlY2sgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotTWFya2VkQmxvY2s6OkhhbmRsZSogTWFya2VkQWxsb2NhdG9yOjpmaW5kRW1wdHlCbG9j
a1RvU3RlYWwoKQotewotICAgIG1fZW1wdHlDdXJzb3IgPSBtX2VtcHR5LmZpbmRCaXQobV9lbXB0
eUN1cnNvciwgdHJ1ZSk7Ci0gICAgaWYgKG1fZW1wdHlDdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1
cnNvcl07Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpkaWRDb25zdW1lRnJlZUxpc3QoKQot
ewotICAgIGlmIChtX2N1cnJlbnRCbG9jaykKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENv
bnN1bWVGcmVlTGlzdCgpOwotICAgIAotICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKLSAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7Ci19Ci0KLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwot
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0g
ICAgICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1w
dHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLQotICAg
ICAgICBpZiAodm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Jsb2Nrc1ttX2FsbG9jYXRp
b25DdXJzb3JdKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAg
IGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCi0gICAg
ICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsK
LSAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFjZS0+Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2Nr
LT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxw
dHIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNs
ZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCi0g
ICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxv
Y2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0gICAgICAgICAgICAvLyBh
bmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3Zl
RnJvbUFsbG9jYXRvcigpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxvY2spOwotICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBudWxscHRyOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4o
TWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxs
b2NhdGVJbihibG9jayk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2spCi17Ci0gICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQo
IWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgCi0gICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVM
aXN0KTsKLSAgICAKLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21wbGV0
ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKLSAgICAv
LyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1l
cy4KLSAgICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewotICAgICAgICBB
U1NFUlQoYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRo
Tm9OZXdseUFsbG9jYXRlZCgpOwotICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQo
KSk7Ci0gICAgICAgIEFTU0VSVCghaXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7
Ci0gICAgICAgIEFTU0VSVCghaXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vz
c2FyeSwgYmxvY2spKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAg
IG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgCi0gICAgdm9pZCogcmVzdWx0ID0gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG51bGxwdHI7IH0pOwotICAgIHNldElzRWRlbihOb0xv
Y2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgp
LmRpZEFsbG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewotICAgIGlm
ICghT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0aW9uQ291bnQgPSAwOwotICAgIGlmICghYWxs
b2NhdGlvbkNvdW50KSB7Ci0gICAgICAgIGlmICghbV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKLSAg
ICAgICAgICAgIGlmIChkZWZlcnJhbENvbnRleHQpCi0gICAgICAgICAgICAgICAgZGVmZXJyYWxD
b250ZXh0LT5tX3Nob3VsZEdDID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBpZiAoKythbGxvY2F0aW9uQ291bnQgPj0gT3B0aW9uczo6c2xv
d1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCi0gICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7Ci19
Ci0KLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
Ci17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAg
IEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKLQotICAgIEFT
U0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAgIAotICAgIGRpZENvbnN1bWVGcmVl
TGlzdCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcCgqbV9oZWFwKTsK
LQotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQp
OwotICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJh
Y2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQot
ICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEg
Y2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZKG1f
Y3VycmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9
IHRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChmYWls
dXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgcmVzdWx0ID0g
YWxsb2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQotewotICAgIHJldHVybiBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplb2YoTWFy
a2VkQmxvY2spKTsKLX0KLQotc2l6ZV90IE1hcmtlZEFsbG9jYXRvcjo6YmxvY2tTaXplRm9yQnl0
ZXMoc2l6ZV90IGJ5dGVzKQotewotICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplOwotICAgIHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IGJsb2NrSGVhZGVy
U2l6ZSgpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4o
Ynl0ZXMpOwotICAgIG1pbkFsbG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KFdURjo6cGFnZVNpemUoKSwgbWluQWxsb2NhdGlvblNpemUpOwotICAgIHJldHVybiBzdGQ6Om1h
eChtaW5CbG9ja1NpemUsIG1pbkFsbG9jYXRpb25TaXplKTsKLX0KLQotTWFya2VkQmxvY2s6Okhh
bmRsZSogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUJsb2NrKCkKLXsKLSAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgTWFya2VkQmxv
Y2s6OkhhbmRsZSogaGFuZGxlID0gTWFya2VkQmxvY2s6OnRyeUNyZWF0ZSgqbV9oZWFwLCBzdWJz
cGFjZSgpLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwotICAgIGlmICghaGFuZGxlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBtYXJrZWRTcGFjZSgpLmRpZEFkZEJsb2Nr
KGhhbmRsZSk7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIHNpemVf
dCBpbmRleDsKLSAgICBpZiAobV9mcmVlQmxvY2tJbmRpY2VzLmlzRW1wdHkoKSkgewotICAgICAg
ICBpbmRleCA9IG1fYmxvY2tzLnNpemUoKTsKLQotICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkg
PSBtX2Jsb2Nrcy5jYXBhY2l0eSgpOwotICAgICAgICBtX2Jsb2Nrcy5hcHBlbmQoYmxvY2spOwot
ICAgICAgICBpZiAobV9ibG9ja3MuY2FwYWNpdHkoKSAhPSBvbGRDYXBhY2l0eSkgewotICAgICAg
ICAgICAgZm9yRWFjaEJpdFZlY3RvcigKLSAgICAgICAgICAgICAgICBOb0xvY2tpbmdOZWNlc3Nh
cnksCi0gICAgICAgICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh2ZWN0b3IsIHZlY3Rvci5udW1CaXRzKCkgPT0g
b2xkQ2FwYWNpdHkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQobV9ibG9ja3MuY2FwYWNpdHkoKSA+IG9sZENhcGFjaXR5KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iaXR2ZWN0b3JMb2NrKTsKLSAg
ICAgICAgICAgIHN1YnNwYWNlKCktPmRpZFJlc2l6ZUJpdHMobV9ibG9ja3MuY2FwYWNpdHkoKSk7
Ci0gICAgICAgICAgICBmb3JFYWNoQml0VmVjdG9yKAotICAgICAgICAgICAgICAgIGxvY2tlciwK
LSAgICAgICAgICAgICAgICBbJl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgewotICAgICAgICAg
ICAgICAgICAgICB2ZWN0b3IucmVzaXplKG1fYmxvY2tzLmNhcGFjaXR5KCkpOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5kZXggPSBtX2Zy
ZWVCbG9ja0luZGljZXMudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKCFtX2Jsb2Nrc1tpbmRl
eF0pOwotICAgICAgICBtX2Jsb2Nrc1tpbmRleF0gPSBibG9jazsKLSAgICB9Ci0gICAgCi0gICAg
Zm9yRWFjaEJpdFZlY3RvcigKLSAgICAgICAgTm9Mb2NraW5nTmVjZXNzYXJ5LAotICAgICAgICBb
Jl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh2
ZWN0b3IsICF2ZWN0b3JbaW5kZXhdKTsKLSAgICAgICAgfSk7Ci0KLSAgICAvLyBUaGlzIGlzIHRo
ZSBwb2ludCBhdCB3aGljaCB0aGUgYmxvY2sgbGVhcm5zIG9mIGl0cyBjZWxsU2l6ZSgpIGFuZCBh
dHRyaWJ1dGVzKCkuCi0gICAgYmxvY2stPmRpZEFkZFRvQWxsb2NhdG9yKHRoaXMsIGluZGV4KTsK
LSAgICAKLSAgICBzZXRJc0xpdmUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBpbmRleCwgdHJ1ZSk7Ci0g
ICAgc2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGluZGV4LCB0cnVlKTsKLX0KLQotdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
KQotewotICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJU
KG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0gICAgCi0gICAgc3Vic3BhY2Uo
KS0+ZGlkUmVtb3ZlQmxvY2soYmxvY2stPmluZGV4KCkpOwotICAgIAotICAgIG1fYmxvY2tzW2Js
b2NrLT5pbmRleCgpXSA9IG51bGxwdHI7Ci0gICAgbV9mcmVlQmxvY2tJbmRpY2VzLmFwcGVuZChi
bG9jay0+aW5kZXgoKSk7Ci0gICAgCi0gICAgZm9yRWFjaEJpdFZlY3RvcigKLSAgICAgICAgaG9s
ZExvY2sobV9iaXR2ZWN0b3JMb2NrKSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0
b3IpIHsKLSAgICAgICAgICAgIHZlY3RvcltibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsKLSAgICAg
ICAgfSk7Ci0gICAgCi0gICAgYmxvY2stPmRpZFJlbW92ZUZyb21BbGxvY2F0b3IoKTsKLX0KLQot
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKLXsKLSAgICBpZiAoZmFsc2Up
Ci0gICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQWxsb2NhdG9yOjpz
dG9wQWxsb2NhdGluZyFcbiIpOwotICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwotICAg
IGlmICghbV9jdXJyZW50QmxvY2spIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2Nh
dGlvbldpbGxGYWlsKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fY3Vy
cmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG1fY3VycmVudEJsb2NrOwotICAgIG1fY3VycmVudEJsb2NrID0gMDsKLSAgICBtX2Zy
ZWVMaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxs
b2NhdGlvbigpCi17Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwotICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0KLSAgICBtX2Fs
bG9jYXRpb25DdXJzb3IgPSAwOwotICAgIG1fZW1wdHlDdXJzb3IgPSAwOwotICAgIG1fdW5zd2Vw
dEN1cnNvciA9IDA7Ci0gICAgCi0gICAgbV9lZGVuLmNsZWFyQWxsKCk7Ci0KLSAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6dXNlSW1tb3J0YWxPYmplY3RzKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYWtlIHRoaXMgd29yayBhZ2Fpbi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MjI5NgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0Zp
bmFsaXplKCkKLXsKLSAgICBmb3JFYWNoQmxvY2soCi0gICAgICAgIFsmXSAoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spIHsKLSAgICAgICAgICAgIGJsb2NrLT5sYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpOwotICAgICAgICB9KTsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9j
YXRpbmcoKQotewotICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwot
ICAgIG1fY3VycmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgbV9sYXN0QWN0aXZl
QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6YmVnaW5NYXJraW5n
Rm9yRnVsbENvbGxlY3Rpb24oKQotewotICAgIC8vIE1hcmsgYml0cyBhcmUgc3RpY2t5IGFuZCBz
byBpcyBvdXIgc3VtbWFyeSBvZiBtYXJrIGJpdHMuIFdlIG9ubHkgY2xlYXIgdGhlc2UgZHVyaW5n
IGZ1bGwKLSAgICAvLyBjb2xsZWN0aW9ucywgc28gaWYgeW91IHN1cnZpdmVkIHRoZSBsYXN0IGNv
bGxlY3Rpb24geW91IHdpbGwgc3Vydml2ZSB0aGUgbmV4dCBvbmUgc28gbG9uZwotICAgIC8vIGFz
IHRoZSBuZXh0IG9uZSBpcyBlZGVuLgotICAgIG1fbWFya2luZ05vdEVtcHR5LmNsZWFyQWxsKCk7
Ci0gICAgbV9tYXJraW5nUmV0aXJlZC5jbGVhckFsbCgpOwotfQotCi12b2lkIE1hcmtlZEFsbG9j
YXRvcjo6ZW5kTWFya2luZygpCi17Ci0gICAgbV9hbGxvY2F0ZWQuY2xlYXJBbGwoKTsKLSAgICAK
LSAgICAvLyBJdCdzIHN1cnByaXNpbmcgYW5kIGZydXN0cmF0aW5nIHRvIGNvbXByZWhlbmQsIGJ1
dCB0aGUgZW5kLW9mLW1hcmtpbmcgZmxpcCBkb2VzIG5vdCBuZWVkIHRvCi0gICAgLy8ga25vdyB3
aGF0IGtpbmQgb2YgY29sbGVjdGlvbiBpdCBpcy4gVGhhdCBrbm93bGVkZ2UgaXMgYWxyZWFkeSBl
bmNvZGVkIGluIHRoZSBtX21hcmtpbmdYWVoKLSAgICAvLyB2ZWN0b3JzLgotICAgIAotICAgIGlm
ICghdHJhZGVEZXN0cnVjdG9yQmxvY2tzICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgewotICAgICAg
ICBBU1NFUlQobV9lbXB0eS5pc0VtcHR5KCkpOwotICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90
RW1wdHkgPSBtX2xpdmUgJiB+bV9tYXJraW5nUmV0aXJlZDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX2VtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ05vdEVtcHR5OwotICAgICAgICBtX2NhbkFs
bG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiBtX21hcmtpbmdOb3RFbXB0eSAmIH5tX21hcmtp
bmdSZXRpcmVkOwotICAgIH0KLSAgICAKLSAgICBpZiAobmVlZHNEZXN0cnVjdGlvbigpKSB7Ci0g
ICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGJsb2NrcyB0aGF0IHdlIGRpZG4ndCBhbGxvY2F0ZSBv
dXQgb2YgaW4gdGhlIGxhc3QgY3ljbGUsIGJ1dCB3ZSBzd2VwdCB0aGVtLiBUaGlzCi0gICAgICAg
IC8vIHdpbGwgZm9yZ2V0IHRoYXQgd2UgZGlkIHRoYXQgYW5kIHdlIHdpbGwgZW5kIHVwIHN3ZWVw
aW5nIHRoZW0gYWdhaW4gYW5kIGF0dGVtcHRpbmcgdG8gY2FsbCB0aGVpcgotICAgICAgICAvLyBk
ZXN0cnVjdG9ycyBhZ2Fpbi4gVGhhdCdzIGZpbmUgYmVjYXVzZSBvZiB6YXBwaW5nLiBUaGUgb25s
eSB0aW1lIHdoZW4gd2UgY2Fubm90IGZvcmdldCBpcyB3aGVuCi0gICAgICAgIC8vIHdlIGp1c3Qg
YWxsb2NhdGUgYSBibG9jayBvciB3aGVuIHdlIG1vdmUgYSBibG9jayBmcm9tIG9uZSBzaXplIGNs
YXNzIHRvIGFub3RoZXIuIFRoYXQgZG9lc24ndAotICAgICAgICAvLyBoYXBwZW4gaGVyZS4KLSAg
ICAgICAgbV9kZXN0cnVjdGlibGUgPSBtX2xpdmU7Ci0gICAgfQotICAgIAotICAgIGlmIChmYWxz
ZSkgewotICAgICAgICBkYXRhTG9nKCJCaXRzIGZvciAiLCBtX2NlbGxTaXplLCAiLCAiLCBtX2F0
dHJpYnV0ZXMsICIgYWZ0ZXIgZW5kTWFya2luZzpcbiIpOwotICAgICAgICBkdW1wQml0cyhXVEY6
OmRhdGFGaWxlKCkpOwotICAgIH0KLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNuYXBzaG90
VW5zd2VwdEZvckVkZW5Db2xsZWN0aW9uKCkKLXsKLSAgICBtX3Vuc3dlcHQgfD0gbV9lZGVuOwot
fQotCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c25hcHNob3RVbnN3ZXB0Rm9yRnVsbENvbGxlY3Rp
b24oKQotewotICAgIG1fdW5zd2VwdCA9IG1fbGl2ZTsKLX0KLQotTWFya2VkQmxvY2s6OkhhbmRs
ZSogTWFya2VkQWxsb2NhdG9yOjpmaW5kQmxvY2tUb1N3ZWVwKCkKLXsKLSAgICBtX3Vuc3dlcHRD
dXJzb3IgPSBtX3Vuc3dlcHQuZmluZEJpdChtX3Vuc3dlcHRDdXJzb3IsIHRydWUpOwotICAgIGlm
IChtX3Vuc3dlcHRDdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV91bnN3ZXB0Q3Vyc29yXTsKLX0KLQotdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OnN3ZWVwKCkKLXsKLSAgICBtX3Vuc3dlcHQuZm9yRWFjaFNldEJpdCgK
LSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdOwotICAgICAgICAgICAgYmxvY2stPnN3ZWVw
KG51bGxwdHIpOwotICAgICAgICB9KTsKLX0KLQotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNocmlu
aygpCi17Ci0gICAgKG1fZW1wdHkgJiB+bV9kZXN0cnVjdGlibGUpLmZvckVhY2hTZXRCaXQoCi0g
ICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBtYXJrZWRTcGFjZSgpLmZy
ZWVCbG9jayhtX2Jsb2Nrc1tpbmRleF0pOwotICAgICAgICB9KTsKLX0KLQotdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCi17Ci0gICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX3Vuc3dlcHQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgZGF0YUxvZygiQXNzZXJ0aW9uIGZhaWxlZDogdW5zd2Vw
dCBub3QgZW1wdHkgaW4gIiwgKnRoaXMsICIuXG4iKTsKLSAgICBkdW1wQml0cygpOwotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1SZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6
SGFuZGxlKigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2Uo
KQotewotICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFu
ZGxlKigpPiB7Ci0gICAgcHVibGljOgotICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxs
b2NhdG9yKQotICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZG9uZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RF
bXB0eS5maW5kQml0KG1faW5kZXgsIHRydWUpOwotICAgICAgICAgICAgaWYgKG1faW5kZXggPj0g
bV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb25lID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9h
bGxvY2F0b3I7Ci0gICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OwotICAgICAgICBMb2NrIG1f
bG9jazsKLSAgICAgICAgYm9vbCBtX2RvbmUgeyBmYWxzZSB9OwotICAgIH07Ci0gICAgCi0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Ci19Ci0KLXZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KFJhd1Bv
aW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMpOwotfQotCi12
b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcEJpdHMoUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICB1
bnNpZ25lZCBtYXhOYW1lTGVuZ3RoID0gMDsKLSAgICBmb3JFYWNoQml0VmVjdG9yV2l0aE5hbWUo
Ci0gICAgICAgIE5vTG9ja2luZ05lY2Vzc2FyeSwKLSAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9y
JiwgY29uc3QgY2hhciogbmFtZSkgewotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
bGVuKG5hbWUpOwotICAgICAgICAgICAgbWF4TmFtZUxlbmd0aCA9IHN0ZDo6bWF4KG1heE5hbWVM
ZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIH0pOwotICAgIAotICAgIGZvckVhY2hCaXRWZWN0b3JX
aXRoTmFtZSgKLSAgICAgICAgTm9Mb2NraW5nTmVjZXNzYXJ5LAotICAgICAgICBbJl0gKEZhc3RC
aXRWZWN0b3ImIHZlY3RvciwgY29uc3QgY2hhciogbmFtZSkgewotICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgbmFtZSwgIjogIik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
YXhOYW1lTGVuZ3RoIC0gc3RybGVuKG5hbWUpOyBpLS07KQotICAgICAgICAgICAgICAgIG91dC5w
cmludCgiICIpOwotICAgICAgICAgICAgb3V0LnByaW50KHZlY3RvciwgIlxuIik7Ci0gICAgICAg
IH0pOwotfQotCi1NYXJrZWRTcGFjZSYgTWFya2VkQWxsb2NhdG9yOjptYXJrZWRTcGFjZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc3Vic3BhY2UtPnNwYWNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0jaW5jbHVkZSAiQWxsb2Nh
dG9yQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIkZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKLWNs
YXNzIEhlYXA7Ci1jbGFzcyBJc29DZWxsU2V0OwotY2xhc3MgTWFya2VkU3BhY2U7Ci1jbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLSNkZWZpbmUgRk9SX0VBQ0hfTUFSS0VEX0FMTE9DQVRP
Ul9CSVQobWFjcm8pIFwKLSAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9mIGJsb2Nr
IGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXAotICAgIG1hY3JvKGVtcHR5LCBF
bXB0eSkgLyogVGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBubyBsaXZlIG9iamVjdHMu
ICovIFwKLSAgICBtYWNybyhhbGxvY2F0ZWQsIEFsbG9jYXRlZCkgLyogVGhlIHNldCBvZiBhbGwg
YmxvY2tzIHRoYXQgYXJlIGZ1bGwgb2YgbGl2ZSBvYmplY3RzLiAqL1wKLSAgICBtYWNybyhjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5LCBDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KSAvKiBUaGUgc2V0IG9m
IGFsbCBibG9ja3MgYXJlIG5laXRoZXIgZW1wdHkgbm9yIHJldGlyZWQgKGkuZS4gYXJlIG1vcmUg
dGhhbiBtaW5NYXJrZWRCbG9ja1V0aWxpemF0aW9uIGZ1bGwpLiAqLyBcCi0gICAgbWFjcm8oZGVz
dHJ1Y3RpYmxlLCBEZXN0cnVjdGlibGUpIC8qIFRoZSBzZXQgb2YgYWxsIGJsb2NrcyB0aGF0IG1h
eSBoYXZlIGRlc3RydWN0b3JzIHRvIHJ1bi4gKi9cCi0gICAgbWFjcm8oZWRlbiwgRWRlbikgLyog
VGhlIHNldCBvZiBhbGwgYmxvY2tzIHRoYXQgaGF2ZSBuZXcgb2JqZWN0cyBzaW5jZSB0aGUgbGFz
dCBHQy4gKi9cCi0gICAgbWFjcm8odW5zd2VwdCwgVW5zd2VwdCkgLyogVGhlIHNldCBvZiBhbGwg
YmxvY2tzIHRoYXQgY291bGQgYmUgc3dlcHQgYnkgdGhlIGluY3JlbWVudGFsIHN3ZWVwZXIuICov
XAotICAgIFwKLSAgICAvKiBUaGVzZSBhcmUgY29tcHV0ZWQgZHVyaW5nIG1hcmtpbmcuICovXAot
ICAgIG1hY3JvKG1hcmtpbmdOb3RFbXB0eSwgTWFya2luZ05vdEVtcHR5KSAvKiBUaGUgc2V0IG9m
IGFsbCBibG9ja3MgdGhhdCBhcmUgbm90IGVtcHR5LiAqLyBcCi0gICAgbWFjcm8obWFya2luZ1Jl
dGlyZWQsIE1hcmtpbmdSZXRpcmVkKSAvKiBUaGUgc2V0IG9mIGFsbCBibG9ja3MgdGhhdCBhcmUg
cmV0aXJlZC4gKi8KLQotLy8gRklYTUU6IFdlIGRlZmluZWQgY2FuQWxsb2NhdGVCdXROb3RFbXB0
eSBhbmQgZW1wdHkgdG8gYmUgZXhjbHVzaXZlOgotLy8KLS8vICAgICBjYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5ICYgZW1wdHkgPT0gMAotLy8KLS8vIEluc3RlYWQgb2YgY2FsbGluZyBpdCBjYW5BbGxv
Y2F0ZSBhbmQgbWFraW5nIGl0IGluY2x1c2l2ZToKLS8vCi0vLyAgICAgY2FuQWxsb2NhdGUgJiBl
bXB0eSA9PSBlbXB0eQotLy8KLS8vIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgYmV0dGVyLiBJJ2xs
IGxlYXZlIGl0IHRvIGEgZnV0dXJlIGJ1ZyB0byBmaXggdGhhdCwgc2luY2UgYnJlYXRoaW5nIG9u
Ci0vLyB0aGlzIGNvZGUgbGVhZHMgdG8gcmVncmVzc2lvbnMgZm9yIGRheXMsIGFuZCBpdCdzIG5v
dCBjbGVhciB0aGF0IG1ha2luZyB0aGlzIGNoYW5nZSB3b3VsZAotLy8gaW1wcm92ZSBwZXJmIHNp
bmNlIGl0IHdvdWxkIG5vdCBjaGFuZ2UgdGhlIGNvbGxlY3RvcidzIGJlaGF2aW9yLCBhbmQgZWl0
aGVyIHdheSB0aGUgYWxsb2NhdG9yCi0vLyBoYXMgdG8gbG9vayBhdCBib3RoIGJpdHZlY3RvcnMu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTIxCi0KLWNs
YXNzIE1hcmtlZEFsbG9jYXRvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2VkQWxs
b2NhdG9yKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLSAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNl
bGxTaXplKCk7Ci0KLSAgICBNYXJrZWRBbGxvY2F0b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7
Ci0gICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFjZSopOwotICAgIHZvaWQgbGFzdENoYW5jZVRv
RmluYWxpemUoKTsKLSAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7Ci0gICAgdm9pZCBz
dG9wQWxsb2NhdGluZygpOwotICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZygpOwotICAgIHZvaWQg
YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICB2b2lkIGVuZE1hcmtpbmcoKTsK
LSAgICB2b2lkIHNuYXBzaG90VW5zd2VwdEZvckVkZW5Db2xsZWN0aW9uKCk7Ci0gICAgdm9pZCBz
bmFwc2hvdFVuc3dlcHRGb3JGdWxsQ29sbGVjdGlvbigpOwotICAgIHZvaWQgc3dlZXAoKTsKLSAg
ICB2b2lkIHNocmluaygpOwotICAgIHZvaWQgYXNzZXJ0Tm9VbnN3ZXB0KCk7Ci0gICAgc2l6ZV90
IGNlbGxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQotICAgIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KLSAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQotICAgIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsg
fQotICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7
IH0KLQotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29u
c3QgRnVuY3RvciYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwotICAgIAotICAgIFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2Uo
KTsKLSAgICAKLSAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKLSAgICB2
b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKLQotICAgIGJvb2wgaXNQYWdl
ZE91dChkb3VibGUgZGVhZGxpbmUpOwotICAgIAotICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXpl
Rm9yQnl0ZXMoc2l6ZV90KTsKLSAgICAKLSAgICBMb2NrJiBiaXR2ZWN0b3JMb2NrKCkgeyByZXR1
cm4gbV9iaXR2ZWN0b3JMb2NrOyB9Ci0gICAKLSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRf
QUNDRVNTT1JTKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCi0gICAgYm9vbCBp
cyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV8gIyMgbG93ZXJCaXROYW1lW2luZGV4XTsgfSBcCi0gICAgYm9vbCBp
cyAjIyBjYXBpdGFsQml0TmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jaykgY29uc3QgeyByZXR1cm4gaXMgIyMgY2FwaXRhbEJpdE5hbWUo
bG9ja2VyLCBibG9jay0+aW5kZXgoKSk7IH0gXAotICAgIHZvaWQgc2V0SXMgIyMgY2FwaXRhbEJp
dE5hbWUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBzaXplX3QgaW5kZXgsIGJvb2wgdmFsdWUpIHsg
bV8gIyMgbG93ZXJCaXROYW1lW2luZGV4XSA9IHZhbHVlOyB9IFwKLSAgICB2b2lkIHNldElzICMj
IGNhcGl0YWxCaXROYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrLCBib29sIHZhbHVlKSB7IHNldElzICMjIGNhcGl0YWxCaXROYW1lKGxv
Y2tlciwgYmxvY2stPmluZGV4KCksIHZhbHVlKTsgfQotICAgIEZPUl9FQUNIX01BUktFRF9BTExP
Q0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0FDQ0VTU09SUykKLSN1bmRlZiBNQVJLRURf
QUxMT0NBVE9SX0JJVF9BQ0NFU1NPUlMKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgdm9pZCBmb3JFYWNoQml0VmVjdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVu
YyYgZnVuYykKLSAgICB7Ci0jZGVmaW5lIE1BUktFRF9BTExPQ0FUT1JfQklUX0NBTExCQUNLKGxv
d2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpIFwKLSAgICAgICAgZnVuYyhtXyAjIyBsb3dlckJp
dE5hbWUpOwotICAgICAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9SX0JJVChNQVJLRURfQUxM
T0NBVE9SX0JJVF9DQUxMQkFDSyk7Ci0jdW5kZWYgTUFSS0VEX0FMTE9DQVRPUl9CSVRfQ0FMTEJB
Q0sKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZv
ckVhY2hCaXRWZWN0b3JXaXRoTmFtZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmMm
IGZ1bmMpCi0gICAgewotI2RlZmluZSBNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyhsb3dl
ckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSBcCi0gICAgICAgIGZ1bmMobV8gIyMgbG93ZXJCaXRO
YW1lLCAjY2FwaXRhbEJpdE5hbWUpOwotICAgICAgICBGT1JfRUFDSF9NQVJLRURfQUxMT0NBVE9S
X0JJVChNQVJLRURfQUxMT0NBVE9SX0JJVF9DQUxMQkFDSyk7Ci0jdW5kZWYgTUFSS0VEX0FMTE9D
QVRPUl9CSVRfQ0FMTEJBQ0sKLSAgICB9Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0
QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9yOyB9Ci0gICAgTWFya2Vk
QWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4
dEFsbG9jYXRvckluU3Vic3BhY2U7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KLSAgICAKLSAgICB2b2lkIHNldE5leHRBbGxv
Y2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9yID0gYWxs
b2NhdG9yOyB9Ci0gICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlID0gYWxsb2NhdG9y
OyB9Ci0gICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQotICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwotICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGZpbmRCbG9ja1RvU3dlZXAoKTsKLSAgICAKLSAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX3N1YnNwYWNlOyB9Ci0gICAgTWFya2VkU3BhY2UmIG1hcmtlZFNwYWNlKCkg
Y29uc3Q7Ci0gICAgCi0gICAgY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9mcmVlTGlzdDsgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwotICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7Ci0gICAgZnJpZW5kIGNs
YXNzIE1hcmtlZEJsb2NrOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9j
YXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpOwotICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgdm9pZCogdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRy
eUFsbG9jYXRlQmxvY2soKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpI
YW5kbGUqKTsKLSAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFs
Q29udGV4dCopOwotICAgIAotICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7Ci0gICAgCi0gICAgVmVj
dG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8dW5zaWduZWQ+
IG1fZnJlZUJsb2NrSW5kaWNlczsKLQotICAgIC8vIE11dGF0b3IgdXNlcyB0aGlzIHRvIGd1YXJk
IHJlc2l6aW5nIHRoZSBiaXR2ZWN0b3JzLiBUaG9zZSB0aGluZ3MgaW4gdGhlIEdDIHRoYXQgbWF5
IHJ1bgotICAgIC8vIGNvbmN1cnJlbnRseSB0byB0aGUgbXV0YXRvciBtdXN0IGxvY2sgdGhpcyB3
aGVuIGFjY2Vzc2luZyB0aGUgYml0dmVjdG9ycy4KLSAgICBMb2NrIG1fYml0dmVjdG9yTG9jazsK
LSNkZWZpbmUgTUFSS0VEX0FMTE9DQVRPUl9CSVRfREVDTEFSQVRJT04obG93ZXJCaXROYW1lLCBj
YXBpdGFsQml0TmFtZSkgXAotICAgIEZhc3RCaXRWZWN0b3IgbV8gIyMgbG93ZXJCaXROYW1lOwot
ICAgIEZPUl9FQUNIX01BUktFRF9BTExPQ0FUT1JfQklUKE1BUktFRF9BTExPQ0FUT1JfQklUX0RF
Q0xBUkFUSU9OKQotI3VuZGVmIE1BUktFRF9BTExPQ0FUT1JfQklUX0RFQ0xBUkFUSU9OCi0gICAg
Ci0gICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBv
ZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKLSAgICAvLyBjb3JyZXNw
b25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAg
c2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJs
b2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1w
dHlDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2Fu
ZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2Nrcyku
Ci0gICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0
IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgotICAg
IAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOwotICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrOwotCi0gICAgTG9jayBtX2xvY2s7Ci0gICAg
dW5zaWduZWQgbV9jZWxsU2l6ZTsKLSAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRl
czsKLSAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVu
Y2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5
ODgKLSAgICBIZWFwKiBtX2hlYXAgeyBudWxscHRyIH07Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3Bh
Y2UgeyBudWxscHRyIH07Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3IgeyBu
dWxscHRyIH07Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNl
IHsgbnVsbHB0ciB9OwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotfTsKLQotaW5saW5lIHB0cmRpZmZfdCBN
YXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQotewotICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoTWFya2VkQWxsb2NhdG9yLCBtX2ZyZWVMaXN0KTsKLX0KLQotaW5saW5lIHB0cmRp
ZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKQotewotICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoTWFya2VkQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiVk0uaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWlubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbChjb25z
dCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMo
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17Ci0gICAgcmV0dXJu
IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogewotICAg
ICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0oKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAgICAgfSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQotewotICAgIG1fbGl2ZS5mb3JFYWNoU2V0Qml0KAotICAgICAg
ICBbJl0gKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgZnVuY3RvcihtX2Jsb2Nrc1tpbmRl
eF0pOwotICAgICAgICB9KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKLXsKLSAgICBtX21hcmtpbmdOb3RFbXB0eS5mb3JFYWNoU2V0Qml0KAotICAg
ICAgICBbJl0gKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgZnVuY3RvcihtX2Jsb2Nrc1tp
bmRleF0pOwotICAgICAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyNjc4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAK
ICNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2lu
Y2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKQEAgLTc5LDcgKzc5LDcgQEAgTWFya2VkQmxvY2s6Okhh
bmRsZTo6fkhhbmRsZSgpCiAgICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJNYXJrZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsKICAgICB9
Ci0gICAgcmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAgIHJlbW92ZUZyb21EaXJlY3RvcnkoKTsK
ICAgICBtX2Jsb2NrLT5+TWFya2VkQmxvY2soKTsKICAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0
b3ItPmZyZWVBbGlnbmVkTWVtb3J5KG1fYmxvY2spOwogICAgIGhlYXAuZGlkRnJlZUJsb2NrKGJs
b2NrU2l6ZSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp1
bnN3ZWVwV2l0aE5vTgogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3Rl
ZCgpCiB7Ci0gICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0
aGlzLCBmYWxzZSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNz
YXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0cnVlOwogfQogCkBAIC0x
MTIsNyArMTEyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwog
ICAgIAogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyFcbiIpOwotICAgIEFTU0VSVCgh
YWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOworICAg
IEFTU0VSVCghZGlyZWN0b3J5KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cykpOwogCiAgICAgaWYgKCFpc0ZyZWVMaXN0ZWQoKSkgewogICAgICAgICBpZiAoZmFsc2UpCkBA
IC0xNTMsOCArMTUzLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGlu
ZwogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIHsK
LSAgICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
LCBmYWxzZSk7Ci0gICAgYWxsb2NhdG9yKCktPnNldElzRGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgZGlyZWN0b3J5KCktPnNldElzQWxsb2NhdGVkKE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIGRpcmVjdG9yeSgpLT5zZXRJc0Rl
c3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgIG1fYmxvY2st
Pm1fbWFya3MuY2xlYXJBbGwoKTsKICAgICBtX2Jsb2NrLT5jbGVhckhhc0FueU1hcmtlZCgpOwog
ICAgIG1fYmxvY2stPm1fbWFya2luZ1ZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubWFy
a2luZ1ZlcnNpb24oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpCiAgICAgICAgIAogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
c3VtZUFsbG9jYXRpbmchXG4iKTsKLSAgICAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxv
Y2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgICAgIEFTU0VSVCghZGlyZWN0
b3J5KCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOwogICAgICAgICBB
U1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaGFzQW55TmV3
bHlBbGxvY2F0ZWQoKSkgewpAQCAtMjA1LDkgKzIwNSw5IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNp
b24pKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBoYW5kbGUoKS5hbGxvY2F0b3IoKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5
ID0gaGFuZGxlKCkuZGlyZWN0b3J5KCk7CiAKLSAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCkt
PmlzQWxsb2NhdGVkKGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRs
ZSgpKQorICAgIGlmIChoYW5kbGUoKS5kaXJlY3RvcnkoKS0+aXNBbGxvY2F0ZWQoaG9sZExvY2so
ZGlyZWN0b3J5LT5iaXR2ZWN0b3JMb2NrKCkpLCAmaGFuZGxlKCkpCiAgICAgICAgIHx8ICFtYXJr
c0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikpIHsKICAgICAgICAg
aWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBDbGVh
cmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsKQEAgLTI0Miw3ICsy
NDIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgbV9t
YXJraW5nVmVyc2lvbiA9IG1hcmtpbmdWZXJzaW9uOwogICAgIAogICAgIC8vIFRoaXMgbWVhbnMg
d2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gbWFyayBhbnkgb2JqZWN0IGluIHRoaXMgYmxvY2suCi0g
ICAgYWxsb2NhdG9yLT5zZXRJc01hcmtpbmdOb3RFbXB0eShob2xkTG9jayhhbGxvY2F0b3ItPmJp
dHZlY3RvckxvY2soKSksICZoYW5kbGUoKSwgdHJ1ZSk7CisgICAgZGlyZWN0b3J5LT5zZXRJc01h
cmtpbmdOb3RFbXB0eShob2xkTG9jayhkaXJlY3RvcnktPmJpdHZlY3RvckxvY2soKSksICZoYW5k
bGUoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzZXRBbGxvY2F0
ZWQoKQpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29u
c3VtZUZyZWUKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9j
azo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAgICBBU1NFUlQoaXNGcmVlTGlz
dGVkKCkpOwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7Ci0gICAgYWxsb2NhdG9yKCktPnNl
dElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgZGlyZWN0
b3J5KCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiB9
CiAKIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKQEAgLTMwOCwzNCArMzA4LDM0IEBA
IHZvaWQgTWFya2VkQmxvY2s6OmNsZWFySGFzQW55TWFya2VkKCkKIAogdm9pZCBNYXJrZWRCbG9j
azo6bm90ZU1hcmtlZFNsb3coKQogewotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
aGFuZGxlKCkuYWxsb2NhdG9yKCk7Ci0gICAgYWxsb2NhdG9yLT5zZXRJc01hcmtpbmdSZXRpcmVk
KGhvbGRMb2NrKGFsbG9jYXRvci0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpLCB0cnVlKTsK
KyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5ID0gaGFuZGxlKCkuZGlyZWN0b3J5KCk7Cisg
ICAgZGlyZWN0b3J5LT5zZXRJc01hcmtpbmdSZXRpcmVkKGhvbGRMb2NrKGRpcmVjdG9yeS0+Yml0
dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpLCB0cnVlKTsKIH0KIAotdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZW1vdmVGcm9tQWxsb2NhdG9yKCkKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
cmVtb3ZlRnJvbURpcmVjdG9yeSgpCiB7Ci0gICAgaWYgKCFtX2FsbG9jYXRvcikKKyAgICBpZiAo
IW1fZGlyZWN0b3J5KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9hbGxvY2F0b3ItPnJl
bW92ZUJsb2NrKHRoaXMpOworICAgIG1fZGlyZWN0b3J5LT5yZW1vdmVCbG9jayh0aGlzKTsKIH0K
IAotdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0FsbG9jYXRvcihNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGluZGV4KQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpkaWRBZGRUb0RpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5LCBzaXplX3QgaW5k
ZXgpCiB7CiAgICAgQVNTRVJUKG1faW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSk7Ci0gICAgQVNTRVJUKCFtX2FsbG9jYXRvcik7CisgICAgQVNTRVJUKCFtX2RpcmVj
dG9yeSk7CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yLT5zdWJzcGFjZSgpLT5h
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChkaXJlY3RvcnktPnN1YnNwYWNlKCktPmFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSA9PSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOwogICAgIAogICAgIG1faW5kZXgg
PSBpbmRleDsKLSAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICBtX2Jsb2NrLT5tX3N1
YnNwYWNlID0gYWxsb2NhdG9yLT5zdWJzcGFjZSgpOworICAgIG1fZGlyZWN0b3J5ID0gZGlyZWN0
b3J5OworICAgIG1fYmxvY2stPm1fc3Vic3BhY2UgPSBkaXJlY3RvcnktPnN1YnNwYWNlKCk7CiAg
ICAgCi0gICAgc2l6ZV90IGNlbGxTaXplID0gYWxsb2NhdG9yLT5jZWxsU2l6ZSgpOworICAgIHNp
emVfdCBjZWxsU2l6ZSA9IGRpcmVjdG9yeS0+Y2VsbFNpemUoKTsKICAgICBtX2F0b21zUGVyQ2Vs
bCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20g
PSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOwogICAgIAotICAgIG1fYXR0cmli
dXRlcyA9IGFsbG9jYXRvci0+YXR0cmlidXRlcygpOworICAgIG1fYXR0cmlidXRlcyA9IGRpcmVj
dG9yeS0+YXR0cmlidXRlcygpOwogCiAgICAgaWYgKG1fYXR0cmlidXRlcy5jZWxsS2luZCAhPSBI
ZWFwQ2VsbDo6SlNDZWxsKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbik7CkBAIC0zNTAsMTMgKzM1MCwxMyBA
QCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZEFkZFRvQWxsb2NhCiAgICAgYmxvY2soKS5t
X2JpYXNlZE1hcmtDb3VudCA9IGJsb2NrKCkubV9tYXJrQ291bnRCaWFzID0gc3RhdGljX2Nhc3Q8
aW50MTZfdD4obWFya0NvdW50Qmlhcyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
ZGlkUmVtb3ZlRnJvbUFsbG9jYXRvcigpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZFJl
bW92ZUZyb21EaXJlY3RvcnkoKQogewogICAgIEFTU0VSVChtX2luZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CisgICAg
QVNTRVJUKG1fZGlyZWN0b3J5KTsKICAgICAKICAgICBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKTsKLSAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgbV9k
aXJlY3RvcnkgPSBudWxscHRyOwogICAgIG1fYmxvY2stPm1fc3Vic3BhY2UgPSBudWxscHRyOwog
fQogCkBAIC0zNzEsOCArMzcxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0VmFsaWRDZWxs
KFZNJiB2bQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkdW1wU3RhdGUoUHJpbnRTdHJlYW0m
IG91dCkKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgYWxsb2NhdG9yKCktPmZvckVh
Y2hCaXRWZWN0b3JXaXRoTmFtZSgKLSAgICAgICAgaG9sZExvY2soYWxsb2NhdG9yKCktPmJpdHZl
Y3RvckxvY2soKSksCisgICAgZGlyZWN0b3J5KCktPmZvckVhY2hCaXRWZWN0b3JXaXRoTmFtZSgK
KyAgICAgICAgaG9sZExvY2soZGlyZWN0b3J5KCktPmJpdHZlY3RvckxvY2soKSksCiAgICAgICAg
IFsmXSAoRmFzdEJpdFZlY3RvciYgYml0dmVjdG9yLCBjb25zdCBjaGFyKiBuYW1lKSB7CiAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5hbWUsICI6IiwgYml0dmVjdG9yW2luZGV4KCldID8g
IllFUyIgOiAibm8iKTsKICAgICAgICAgfSk7CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpkdW1wU3RhdGUoUHJpbgogCiBTdWJzcGFjZSogTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3Vic3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBhbGxvY2F0b3IoKS0+c3Vi
c3BhY2UoKTsKKyAgICByZXR1cm4gZGlyZWN0b3J5KCktPnN1YnNwYWNlKCk7CiB9CiAKIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0KQpAQCAtMzg5LDEy
ICszODksMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAg
IAogICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6
IFN3ZWVwT25seTsKICAgICAKLSAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIG1fZGlyZWN0b3J5LT5zZXRJc1Vuc3dlcHQo
Tm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3
ZWVwKCk7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gbV9hdHRyaWJ1dGVzLmRl
c3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24KLSAgICAgICAgJiYgbV9hbGxvY2F0b3ItPmlz
RGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7CisgICAgICAgICYmIG1fZGly
ZWN0b3J5LT5pc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOwogCiAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgIW5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAg
IHJldHVybjsKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwKEZyZWVMaXN0CiBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAogewogICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7
Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7CisgICAg
cmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0yMSw3ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNs
dWRlICJJdGVyYXRpb25TdGF0dXMuaCIKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjsgICAgCiBjbGFzcyBGcmVlTGlzdDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBK
U0NlbGw7Ci1jbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNs
YXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdWJzcGFjZTsKQEAg
LTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpOwogCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKCkgY29uc3Q7Cisg
ICAgICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkoKSBjb25zdDsKICAgICAgICAgU3Vic3Bh
Y2UqIHN1YnNwYWNlKCkgY29uc3Q7CiAgICAgICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgSGVhcCogaGVhcCgpIGNvbnN0
OwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7
CiAgICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CiAgICAgICAgIAotICAg
ICAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAg
ICAgIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgICAgIERl
c3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0OwogICAgICAgICBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24oKSBjb25zdDsKICAgICAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25z
dDsKQEAgLTE5NywxMCArMTk3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNpemVf
dCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgcmVtb3ZlRnJvbUFsbG9jYXRvcigpOworICAgICAgICB2b2lkIHJlbW92ZUZyb21EaXJlY3Rv
cnkoKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgZGlkQWRkVG9BbGxvY2F0b3IoTWFya2VkQWxs
b2NhdG9yKiwgc2l6ZV90IGluZGV4KTsKLSAgICAgICAgdm9pZCBkaWRSZW1vdmVGcm9tQWxsb2Nh
dG9yKCk7CisgICAgICAgIHZvaWQgZGlkQWRkVG9EaXJlY3RvcnkoQmxvY2tEaXJlY3RvcnkqLCBz
aXplX3QgaW5kZXgpOworICAgICAgICB2b2lkIGRpZFJlbW92ZUZyb21EaXJlY3RvcnkoKTsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CiAgICAgICAgIApA
QCAtMjMyLDExICsyMzIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIEJpdG1h
cDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOwogICAgICAgICAgICAgCi0gICAgICAg
IEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgICAgICBDZWxsQXR0cmlidXRl
cyBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9Owog
CiAgICAgICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvciB7IG51
bGxwdHIgfTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5IHsgbnVsbHB0ciB9
OwogICAgICAgICBzaXplX3QgbV9pbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkgfTsKICAgICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CiAgICAgICAgIApAQCAtMjY5LDcg
KzI2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTWFya2VkKGNvbnN0IHZvaWQqKTsKICAg
ICAKICAgICBzaXplX3QgY2VsbFNpemUoKTsKLSAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVz
JiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3QgQ2VsbEF0dHJpYnV0ZXMmIGF0dHJpYnV0
ZXMoKSBjb25zdDsKICAgICAKICAgICBib29sIGhhc0FueU1hcmtlZCgpIGNvbnN0OwogICAgIHZv
aWQgbm90ZU1hcmtlZCgpOwpAQCAtMzk3LDkgKzM5Nyw5IEBAIGlubGluZSBNYXJrZWRCbG9jayog
TWFya2VkQmxvY2s6OmJsb2NrRm8KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRC
bG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9ja01hc2spOwogfQogCi1pbmxp
bmUgTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6SGFuZGxlOjphbGxvY2F0b3IoKSBjb25z
dAoraW5saW5lIEJsb2NrRGlyZWN0b3J5KiBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaXJlY3Rvcnko
KSBjb25zdAogewotICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICByZXR1cm4gbV9kaXJlY3Rv
cnk7CiB9CiAKIGlubGluZSBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6SGFu
ZGxlOjphbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QKQEAgLTQ1NywxMiArNDU3LDEyIEBA
IGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6OmNlbGxTaXplKCkKICAgICByZXR1cm4gbV9oYW5k
bGUuY2VsbFNpemUoKTsKIH0KIAotaW5saW5lIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmF0dHJpYnV0ZXMoKSBjb25zdAoraW5saW5lIGNvbnN0IENlbGxB
dHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9hdHRyaWJ1dGVzOwogfQogCi1pbmxpbmUgY29uc3QgQWxsb2NhdG9yQXR0cmli
dXRlcyYgTWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMoKSBjb25zdAoraW5saW5lIGNvbnN0IENlbGxB
dHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6YXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1faGFuZGxlLmF0dHJpYnV0ZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC05MywxMiArOTMsMTIgQEAgaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0FsbG9jYXRlZCgpCiB7Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0FsbG9j
YXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworICAgIHJldHVybiBtX2RpcmVjdG9yeS0+
aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywg
Y29uc3QgSGVhcENlbGwqIGNlbGwpCiB7Ci0gICAgaWYgKGFsbG9jYXRvcigpLT5pc0FsbG9jYXRl
ZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQorICAgIGlmIChkaXJlY3RvcnkoKS0+aXNBbGxv
Y2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgCiAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVj
YXVzZSBtYXJrcyBtaWdodCBiZSBzdGFsZS4gSW4gdGhhdCBjYXNlLCBuZXdseQpAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAg
ICAgfQogICAgIH07CiAgICAgCi0gICAgbV9hbGxvY2F0b3ItPnNldElzRGVzdHJ1Y3RpYmxlKE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOworICAgIG1fZGlyZWN0b3J5LT5zZXRJc0Rl
c3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dXNlQnVtcEFsbG9jYXRvcigpCiAgICAgICAgICYmIGVtcHR5TW9kZSA9PSBJ
c0VtcHR5CkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVj
aWFsaXplZFN3ZQogICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoaGVhZCwgc2VjcmV0
LCBjb3VudCAqIGNlbGxTaXplKTsKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgfSBl
bHNlIGlmIChpc0VtcHR5KQotICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOworICAgICAgICBtX2RpcmVjdG9yeS0+c2V0SXNFbXB0
eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgIGlmIChmYWxzZSkKICAgICAg
ICAgZGF0YUxvZygiU2xvd2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIoJmJsb2NrKSwgIiB3
aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0
ZXMsICI6ICIsIHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CiB9CkBAIC00NDEsNyArNDQx
LDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1YwogCiBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKIHsKLSAgICByZXR1cm4gbV9hbGxv
Y2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKKyAgICByZXR1cm4gbV9k
aXJlY3RvcnktPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKIH0KIAogaW5saW5l
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjplbXB0
eU1vZGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC0yMSwxMSArMjEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgogCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTIxNiw5ICsyMTYsOSBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlTWVtb3J5KCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6bGFz
dENoYW5jZVRvRmluYWxpemUoKQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsm
XSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAg
ICAgICAgICBhbGxvY2F0b3IubGFzdENoYW5jZVRvRmluYWxpemUoKTsKKyAgICBmb3JFYWNoRGly
ZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3RvcnkubGFzdENoYW5jZVRvRmluYWxpemUo
KTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAg
ICB9KTsKICAgICBmb3IgKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA6IG1fbGFyZ2VBbGxv
Y2F0aW9ucykKQEAgLTIyOCw5ICsyMjgsOSBAQCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpCiB2b2lkIE1hcmtlZFNwYWNlOjpzd2VlcCgpCiB7CiAgICAgbV9oZWFwLT5z
d2VlcGVyKCkuc3RvcFN3ZWVwaW5nKCk7Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAg
WyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAg
ICAgICAgICAgIGFsbG9jYXRvci5zd2VlcCgpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAg
ICAgIFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsK
KyAgICAgICAgICAgIGRpcmVjdG9yeS5zd2VlcCgpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQpAQCAtMjk1LDkgKzI5NSw5IEBA
IHZvaWQgTWFya2VkU3BhY2U6OnJlYXBXZWFrU2V0cygpCiB2b2lkIE1hcmtlZFNwYWNlOjpzdG9w
QWxsb2NhdGluZygpCiB7CiAgICAgQVNTRVJUKCFpc0l0ZXJhdGluZygpKTsKLSAgICBmb3JFYWNo
QWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJ
dGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgYWxsb2NhdG9yLnN0b3BBbGxvY2F0aW5nKCk7
CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGly
ZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZGlyZWN0b3J5LnN0b3BB
bGxvY2F0aW5nKCk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKICAgICAgICAgfSk7CiB9CkBAIC0zMjYsOSArMzI2LDkgQEAgdm9pZCBNYXJrZWRTcGFjZTo6
cHJlcGFyZUZvck1hcmtpbmcoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5n
KCkKIHsKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRv
ciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgYWxsb2NhdG9y
LnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0g
KEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAg
ICAgICBkaXJlY3RvcnkucmVzdW1lQWxsb2NhdGluZygpOwogICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogICAgIC8vIE5vdGhpbmcgdG8g
ZG8gZm9yIExhcmdlQWxsb2NhdGlvbnMuCkBAIC0zMzcsOSArMzM3LDkgQEAgdm9pZCBNYXJrZWRT
cGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiBib29sIE1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KGRv
dWJsZSBkZWFkbGluZSkKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGZvckVhY2hB
bGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0
ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdG9yLmlzUGFnZWRPdXQoZGVh
ZGxpbmUpKSB7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVj
dG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgaWYgKGRp
cmVjdG9yeS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKICAg
ICAgICAgICAgIH0KQEAgLTM1MSw3ICszNTEsNyBAQCBib29sIE1hcmtlZFNwYWNlOjppc1BhZ2Vk
T3V0KGRvdWJsZSBkZWFkCiAKIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVCbG9jayhNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKIHsKLSAgICBibG9jay0+YWxsb2NhdG9yKCktPnJlbW92ZUJsb2Nr
KGJsb2NrKTsKKyAgICBibG9jay0+ZGlyZWN0b3J5KCktPnJlbW92ZUJsb2NrKGJsb2NrKTsKICAg
ICBtX2NhcGFjaXR5IC09IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7CiAgICAgbV9ibG9ja3MucmVt
b3ZlKCZibG9jay0+YmxvY2soKSk7CiAgICAgZGVsZXRlIGJsb2NrOwpAQCAtMzY5LDkgKzM2OSw5
IEBAIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVPclNocmlua0Jsb2NrKE1hcmsKIAogdm9pZCBNYXJr
ZWRTcGFjZTo6c2hyaW5rKCkKIHsKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0g
KE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAg
ICAgICAgYWxsb2NhdG9yLnNocmluaygpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAg
IFsmXSAoQmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAg
ICAgICAgICAgIGRpcmVjdG9yeS5zaHJpbmsoKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIH0KQEAgLTM3OSw5ICszNzksOSBAQCB2
b2lkIE1hcmtlZFNwYWNlOjpzaHJpbmsoKQogdm9pZCBNYXJrZWRTcGFjZTo6YmVnaW5NYXJraW5n
KCkKIHsKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpIHsKLSAgICAgICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgICAgIFsmXSAo
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAg
ICAgICAgICAgYWxsb2NhdG9yLmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAg
ICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBk
aXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5
LmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgICAgICB9KTsKIApAQCAtNDI5LDkg
KzQyOSw5IEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuZE1hcmtpbmcoKQogICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChhbGxvY2F0aW9uLCAhYWxsb2NhdGlvbi0+aXNOZXdseUFsbG9jYXRlZCgpKTsK
ICAgICB9CiAKLSAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgYWxsb2Nh
dG9yLmVuZE1hcmtpbmcoKTsKKyAgICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJs
b2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAg
ICBkaXJlY3RvcnkuZW5kTWFya2luZygpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogICAgIApAQCAtNTE0LDE1ICs1MTQsMTUgQEAg
dm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWxsb2NhdGVJbkJsb2NrKE1hcgogdm9pZCBNYXJrZWRTcGFj
ZTo6c25hcHNob3RVbnN3ZXB0KCkKIHsKICAgICBpZiAobV9oZWFwLT5jb2xsZWN0aW9uU2NvcGUo
KSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAgICAgICAgZm9yRWFjaEFsbG9jYXRvcigK
LSAgICAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlv
blN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnNuYXBzaG90VW5zd2VwdEZvckVk
ZW5Db2xsZWN0aW9uKCk7CisgICAgICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgICAgICBb
Jl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAg
ICAgICAgICAgICAgZGlyZWN0b3J5LnNuYXBzaG90VW5zd2VwdEZvckVkZW5Db2xsZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAg
ICAgICAgICB9KTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKAotICAg
ICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3Rh
dHVzIHsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3Iuc25hcHNob3RVbnN3ZXB0Rm9yRnVsbENv
bGxlY3Rpb24oKTsKKyAgICAgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgICAgIFsmXSAo
QmxvY2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAg
ICAgICAgICBkaXJlY3Rvcnkuc25hcHNob3RVbnN3ZXB0Rm9yRnVsbENvbGxlY3Rpb24oKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTUzMiwzMCArNTMyLDMwIEBAIHZvaWQgTWFya2VkU3BhY2U6OmFz
c2VydE5vVW5zd2VwdCgpCiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICBhbGxvY2F0b3Iu
YXNzZXJ0Tm9VbnN3ZXB0KCk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChC
bG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAg
ICAgZGlyZWN0b3J5LmFzc2VydE5vVW5zd2VwdCgpOwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCiB2b2lkIE1hcmtlZFNwYWNl
OjpkdW1wQml0cyhQcmludFN0cmVhbSYgb3V0KQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0g
ICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1
cyB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIkJpdHMgZm9yICIsIGFsbG9jYXRvciwgIjpcbiIp
OwotICAgICAgICAgICAgYWxsb2NhdG9yLmR1bXBCaXRzKG91dCk7CisgICAgZm9yRWFjaERpcmVj
dG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRp
b25TdGF0dXMgeworICAgICAgICAgICAgb3V0LnByaW50KCJCaXRzIGZvciAiLCBkaXJlY3Rvcnks
ICI6XG4iKTsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5kdW1wQml0cyhvdXQpOwogICAgICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogfQogCi12
b2lkIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3ZvaWQgTWFya2VkU3BhY2U6OmFkZEJsb2Nr
RGlyZWN0b3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9y
eSkKIHsKLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3IobnVsbHB0cik7CisgICAgZGly
ZWN0b3J5LT5zZXROZXh0RGlyZWN0b3J5KG51bGxwdHIpOwogICAgIAogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAKLSAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKHN0ZDo6bWVtX2ZuKCZNYXJr
ZWRBbGxvY2F0b3I6OnNldE5leHRBbGxvY2F0b3IpLCBhbGxvY2F0b3IpOworICAgIG1fZGlyZWN0
b3JpZXMuYXBwZW5kKHN0ZDo6bWVtX2ZuKCZCbG9ja0RpcmVjdG9yeTo6c2V0TmV4dERpcmVjdG9y
eSksIGRpcmVjdG9yeSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMSw5ICsyMSw5IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKICNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJMYXJnZUFsbG9jYXRpb24uaCIKLSNpbmNs
dWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSA8YXJyYXk+CkBAIC0xNTcsMTAgKzE1Nywx
MCBAQCBwdWJsaWM6CiAgICAgTGFyZ2VBbGxvY2F0aW9uKiogbGFyZ2VBbGxvY2F0aW9uc0ZvclRo
aXNDb2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhp
c0NvbGxlY3Rpb25FbmQ7IH0KICAgICB1bnNpZ25lZCBsYXJnZUFsbG9jYXRpb25zRm9yVGhpc0Nv
bGxlY3Rpb25TaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0Nv
bGxlY3Rpb25TaXplOyB9CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdG9ycy5maXJzdCgpOyB9CisgICAgQmxvY2tEaXJl
Y3RvcnkqIGZpcnN0RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rvcmllcy5maXJz
dCgpOyB9CiAgICAgCi0gICAgTG9jayYgYWxsb2NhdG9yTG9jaygpIHsgcmV0dXJuIG1fYWxsb2Nh
dG9yTG9jazsgfQotICAgIHZvaWQgYWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgTWFya2VkQWxsb2NhdG9yKik7CisgICAgTG9jayYgZGlyZWN0b3J5TG9jaygpIHsgcmV0
dXJuIG1fZGlyZWN0b3J5TG9jazsgfQorICAgIHZvaWQgYWRkQmxvY2tEaXJlY3RvcnkoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBCbG9ja0RpcmVjdG9yeSopOwogICAgIAogICAgIC8vIFdoZW4gdGhp
cyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBiaXRz
IGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNNYXJraW5nOyB9CkBAIC0xODEsNyArMTgxLDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQgY2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAg
Ly8gVXNlIHRoaXMgdmVyc2lvbiB3aGVuIGNhbGxpbmcgZnJvbSB3aXRoaW4gdGhlIEdDIHdoZXJl
IHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9ycworICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hl
biBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGRpcmVj
dG9yaWVzCiAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcHBlZC4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJik7CiAK
QEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN1
YnNwYWNlKFN1YnNwYWNlJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxp
bmUgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBmb3JFYWNoRGlyZWN0b3J5KGNvbnN0IEZ1bmN0
b3ImKTsKICAgICAKICAgICB2b2lkIGFkZEFjdGl2ZVdlYWtTZXQoV2Vha1NldCopOwogCkBAIC0y
MTQsMjYgKzIxNCwyNiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxXZWFrU2V0
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9hY3RpdmVXZWFrU2V0czsKICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8V2Vha1NldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8V2Vha1NldD4+
IG1fbmV3QWN0aXZlV2Vha1NldHM7CiAKLSAgICBMb2NrIG1fYWxsb2NhdG9yTG9jazsKLSAgICBT
aW5nbHlMaW5rZWRMaXN0V2l0aFRhaWw8TWFya2VkQWxsb2NhdG9yPiBtX2FsbG9jYXRvcnM7Cisg
ICAgTG9jayBtX2RpcmVjdG9yeUxvY2s7CisgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsPEJs
b2NrRGlyZWN0b3J5PiBtX2RpcmVjdG9yaWVzOwogCiAgICAgZnJpZW5kIGNsYXNzIEhlYXBWZXJp
ZmllcjsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJr
ZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgZm9y
RWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5mb3JFYWNoQmxvY2so
ZnVuY3Rvcik7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVj
dG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZGlyZWN0
b3J5LmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+Ci12b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCit2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoRGlyZWN0b3J5KGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiB7Ci0gICAgZm9yIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
YWxsb2NhdG9ycy5maXJzdCgpOyBhbGxvY2F0b3I7IGFsbG9jYXRvciA9IGFsbG9jYXRvci0+bmV4
dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIGlmIChmdW5jdG9yKCphbGxvY2F0b3IpID09IEl0ZXJh
dGlvblN0YXR1czo6RG9uZSkKKyAgICBmb3IgKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkgPSBt
X2RpcmVjdG9yaWVzLmZpcnN0KCk7IGRpcmVjdG9yeTsgZGlyZWN0b3J5ID0gZGlyZWN0b3J5LT5u
ZXh0RGlyZWN0b3J5KCkpIHsKKyAgICAgICAgaWYgKGZ1bmN0b3IoKmRpcmVjdG9yeSkgPT0gSXRl
cmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVk
ZSAiU3Vic3BhY2UuaCIKIAogI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwQ2VsbFR5cGUu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcmFs
bGVsU291cmNlQWRhcHRlci5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
QEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBTdWJzcGFjZTo6aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUq
IAogICAgIG1fYXR0cmlidXRlcyA9IGhlYXBDZWxsVHlwZS0+YXR0cmlidXRlcygpOwogICAgIG1f
aGVhcENlbGxUeXBlID0gaGVhcENlbGxUeXBlOwogICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciA9IGFsaWduZWRNZW1vcnlBbGxvY2F0b3I7Ci0gICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CisgICAg
bV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0RGlyZWN0b3J5KCk7CiAKICAgICBIZWFwJiBoZWFwID0gKm1fc3BhY2UuaGVhcCgpOwog
ICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZShoZWFwKTsK
QEAgLTcyLDY1ICs3Miw2NSBAQCB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxs
KiBjCiAKIHZvaWQgU3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBmb3JF
YWNoQWxsb2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7
Ci0gICAgICAgICAgICBhbGxvY2F0b3IucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICBmb3JF
YWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3RvcnkpIHsK
KyAgICAgICAgICAgIGRpcmVjdG9yeS5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9
KTsKIAotICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOworICAgIG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxv
Y2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdERpcmVjdG9yeSgpOwogfQog
CiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkK
IHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewotICAgICAgICBpZiAoTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkpCisgICAgZm9yICg7IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxv
Y2F0aW9uOyBtX2RpcmVjdG9yeUZvckVtcHR5QWxsb2NhdGlvbiA9IG1fZGlyZWN0b3J5Rm9yRW1w
dHlBbGxvY2F0aW9uLT5uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsK
KyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnlGb3JF
bXB0eUFsbG9jYXRpb24tPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKQogICAgICAgICAgICAgcmV0
dXJuIGJsb2NrOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291
cmNlKCkKK1JlZlB0cjxTaGFyZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPj4gU3Vic3BhY2U6OnBh
cmFsbGVsRGlyZWN0b3J5U291cmNlKCkKIHsKLSAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJl
ZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFy
ZWRUYXNrPEJsb2NrRGlyZWN0b3J5KigpPiB7CiAgICAgcHVibGljOgotICAgICAgICBUYXNrKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxv
Y2F0b3IpCisgICAgICAgIFRhc2soQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICAgICAg
ICAgIDogbV9kaXJlY3RvcnkoZGlyZWN0b3J5KQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgQmxv
Y2tEaXJlY3RvcnkqIHJ1bigpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogcmVzdWx0
ID0gbV9kaXJlY3Rvcnk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpOworICAgICAg
ICAgICAgICAgIG1fZGlyZWN0b3J5ID0gcmVzdWx0LT5uZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSgp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKICAgICBw
cml2YXRlOgotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAgICBC
bG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7CiAgICAgICAgIExvY2sgbV9sb2NrOwogICAgIH07
CiAgICAgCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdERpcmVjdG9yeSkpOwogfQogCiBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFs
bGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVBhcmFs
bGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4o
Ci0gICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCi0gICAgICAgIFtdIChNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6Okhh
bmRsZSooKT4+IHsKLSAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQorICAgIHJldHVybiBjcmVh
dGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRCbG9jazo6SGFu
ZGxlKj4oCisgICAgICAgIHBhcmFsbGVsRGlyZWN0b3J5U291cmNlKCksCisgICAgICAgIFtdIChC
bG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSAtPiBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4geworICAgICAgICAgICAgaWYgKCFkaXJlY3RvcnkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5wYXJh
bGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBkaXJlY3Rvcnkt
PnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOwogICAgICAgICB9KTsKIH0KIAogdm9pZCBT
dWJzcGFjZTo6c3dlZXAoKQogewotICAgIGZvckVhY2hBbGxvY2F0b3IoCi0gICAgICAgIFsmXSAo
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci5zd2Vl
cCgpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxvY2tEaXJlY3Rvcnkm
IGRpcmVjdG9yeSkgeworICAgICAgICAgICAgZGlyZWN0b3J5LnN3ZWVwKCk7CiAgICAgICAgIH0p
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9u
IDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDksMjcgKzQ5LDI3IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQogICAgIE1hcmtlZFNwYWNlJiBzcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BhY2U7IH0KICAgICAKLSAgICBjb25zdCBBbGxvY2F0b3JBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAg
Y29uc3QgQ2VsbEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXM7IH0KICAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGVhcENlbGxUeXBlOyB9CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsg
fQogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAw
OworICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9j
YXRvckZvck1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2
b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBkaWRDcmVhdGVGaXJz
dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX2FsbG9jYXRvckZvckVt
cHR5QWxsb2NhdGlvbiA9IGFsbG9jYXRvcjsgfQorICAgIHZvaWQgZGlkQ3JlYXRlRmlyc3REaXJl
Y3RvcnkoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkgeyBtX2RpcmVjdG9yeUZvckVtcHR5QWxs
b2NhdGlvbiA9IGRpcmVjdG9yeTsgfQogICAgIAogICAgIC8vIEZpbmRzIGFuIGVtcHR5IGJsb2Nr
IGZyb20gYW55IFN1YnNwYWNlIHRoYXQgYWdyZWVzIHRvIHRyYWRlIGJsb2NrcyB3aXRoIHVzLgog
ICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNv
bnN0IEZ1bmMmKTsKKyAgICB2b2lkIGZvckVhY2hEaXJlY3RvcnkoY29uc3QgRnVuYyYpOwogICAg
IAotICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IHBhcmFsbGVsQWxs
b2NhdG9yU291cmNlKCk7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8QmxvY2tEaXJlY3RvcnkqKCk+
PiBwYXJhbGxlbERpcmVjdG9yeVNvdXJjZSgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwpAQCAtMTA2
LDEzICsxMDYsMTMgQEAgcHJvdGVjdGVkOgogICAgIE1hcmtlZFNwYWNlJiBtX3NwYWNlOwogICAg
IAogICAgIENTdHJpbmcgbV9uYW1lOwotICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1
dGVzOworICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIAogICAgIEhlYXBDZWxsVHlw
ZSogbV9oZWFwQ2VsbFR5cGUgeyBudWxscHRyIH07CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2Vz
IHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCisgICAgQmxvY2tEaXJlY3Rv
cnkqIG1fZmlyc3REaXJlY3RvcnkgeyBudWxscHRyIH07CisgICAgQmxvY2tEaXJlY3RvcnkqIG1f
ZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2VzIHRoZSBNYXJr
ZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExh
cmdlQWxsb2NhdGlvbiwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TGFyZ2VBbGxvY2F0aW9uPj4gbV9s
YXJnZUFsbG9jYXRpb25zOwogICAgIFN1YnNwYWNlKiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
OCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNl
LmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKQEAgLTM0LDI3ICszNCwyNyBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIFN1YnNwYWNlOjpmb3JFYWNo
QWxsb2NhdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCit2b2lkIFN1YnNwYWNlOjpmb3JFYWNoRGlyZWN0
b3J5KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgZm9yIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1fZmlyc3RBbGxvY2F0b3I7IGFsbG9jYXRvcjsgYWxsb2NhdG9yID0gYWxsb2NhdG9y
LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpKQotICAgICAgICBmdW5jKCphbGxvY2F0b3IpOwor
ICAgIGZvciAoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSA9IG1fZmlyc3REaXJlY3Rvcnk7IGRp
cmVjdG9yeTsgZGlyZWN0b3J5ID0gZGlyZWN0b3J5LT5uZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSgp
KQorICAgICAgICBmdW5jKCpkaXJlY3RvcnkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
Ci0gICAgZm9yRWFjaEFsbG9jYXRvcigKLSAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvcikgewotICAgICAgICAgICAgYWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jKTsKKyAg
ICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3Rv
cnkpIHsKKyAgICAgICAgICAgIGRpcmVjdG9yeS5mb3JFYWNoQmxvY2soZnVuYyk7CiAgICAgICAg
IH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFj
aE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVuYyYgZnVuYykKIHsKLSAgICBmb3JFYWNoQWxs
b2NhdG9yKAotICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Ci0gICAg
ICAgICAgICBhbGxvY2F0b3IuZm9yRWFjaE5vdEVtcHR5QmxvY2soZnVuYyk7CisgICAgZm9yRWFj
aERpcmVjdG9yeSgKKyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSB7Cisg
ICAgICAgICAgICBkaXJlY3RvcnkuZm9yRWFjaE5vdEVtcHR5QmxvY2soZnVuYyk7CiAgICAgICAg
IH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBh
bGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9FUyBOT1QgbWVhbgogICAgIC8vIHRoYXQg
YWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwg
dGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BS
IGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJl
c3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIs
IEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxs
b2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVs
bHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0
Y2gKICAgICAgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCkBAIC0xNTA1LDIyICsxNTA1LDIyIEBAIHB1
YmxpYzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAgICBKdW1wIGRvbmU7CiAgICAgICAg
IAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1
bHRHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0
R1BSKTsKICAgICAgICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICAgICAgICAg
IG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwg
QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgc3Vi
MzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3Jh
dGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOwotICAgICAgICBBZGRy
ZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsK
KyAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tE
aXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmlu
ZygpKSk7CisgICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAgYWRk
UHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKQEAgLTE1MzIs
MTEgKzE1MzIsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcG9wUGF0aC5saW5rKHRo
aXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3Jh
bWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9m
ZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgaWYgKGlzWDg2KCkp
Ci0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0Rp
cmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CkBAIC0xNTQ0LDEy
ICsxNTQ0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9j
YXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3QsIGJ1dAogICAgICAg
ICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVM
aXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5Ojpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKQogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yR1BS
KSk7CkBAIC0xNTU3LDE0ICsxNTU3LDE0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2Vs
bChHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBK
dW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJl
c3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCiAgICAgewogICAgICAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBhbGxvY2F0b3Is
IGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVT
dHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFt
ZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVK
U09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0
b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1Bh
dGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNj
cmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNj
cmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhy
ZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTU3Niw3ICsxNTc2
LDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJS
ZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNs
b3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSklUOwogICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xhc3MgSW50ZXJwcmV0
ZXI7Ci0gICAgY2xhc3MgTWFya2VkQWxsb2NhdG9yOworICAgIGNsYXNzIEJsb2NrRGlyZWN0b3J5
OwogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogICAgIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQmxvY2tEaXJlY3Rvcnkq
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZXR1cm5WYWx1ZUdQUjsK
ICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQmxvY2tEaXJlY3Rvcnkq
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdp
c3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBKU0Rlc3RydWN0aWJsZU9iamVjdERlc3Ryb3lG
dW5jIHsKIH07CiAKIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCi0gICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKKyAgICA6IEhlYXBD
ZWxsVHlwZShDZWxsQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0RGVzdHJv
eUYKIH07CiAKIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQotICAgIDogSGVhcENlbGxUeXBlKEFsbG9j
YXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCisgICAg
OiBIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgSlNTdHJpbmdEZXN0cm95RnVu
YyB7CiB9OwogCiBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKQot
ICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCkpCisgICAgOiBIZWFwQ2VsbFR5cGUoQ2VsbEF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNjc4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDkgKzIyOCw5
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGZhc3RN
YWxsb2NBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcj4oKSkKICAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91
bmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZl
KSkKICAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQotICAgICwgYXV4
aWxpYXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihBbGxvY2F0
b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkp
KSkKLSAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+
KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCkpKQotICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5p
cXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUoc3RkOjptYWtl
X3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KENlbGxBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpKSkKKyAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjpt
YWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KENlbGxBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1
Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKSkKKyAgICAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KENlbGxBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKSkKICAgICAsIHN0cmluZ0hlYXBDZWxsVHlw
ZShzdGQ6Om1ha2VfdW5pcXVlPEpTU3RyaW5nSGVhcENlbGxUeXBlPigpKQogICAgICwgZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGU+KCkpCiAgICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGU+KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAko
cmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgc3RydWN0IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tEZXN0cm95RnVuYwogfTsKIAog
SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZSgpCi0gICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyhO
ZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKKyAgICA6IEhlYXBDZWxsVHlwZShD
ZWxsQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2ODEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTgtMDEtMTEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgTWFya2VkQWxsb2Nh
dG9yIHRvIEJsb2NrRGlyZWN0b3J5IGFuZCBBbGxvY2F0b3JBdHRyaWJ1dGVzIHRvIENlbGxBdHRy
aWJ1dGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODE1NDMKKworICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBNaWNoYWVsIFNhYm9mZi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBJJ20ganVzdCByZW5hbWluZyB0aGluZ3MuCisKKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL01hcmtl
ZEFsbG9jYXRvcklubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwOgorCiAyMDE4LTAxLTExICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBjYWxsIFJlbmRlckVsZW1lbnQ6OnNldFN0
eWxlIHdoZW4gbm90aGluZyBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNjc4MykJKGZyb20gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6MjI2NzgzKQorKysgU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGlu
ZXMuaAkocmV2aXNpb24gMjI2NzgzKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyICsx
LDIgQEAKICNwcmFnbWEgb25jZQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hcmtlZEFsbG9j
YXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CbG9ja0RpcmVjdG9yeUlu
bGluZXMuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjY3
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL01hcmtlZEFsbG9j
YXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIgKzAsMCBAQAotI3ByYWdtYSBvbmNl
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuY3BwCShyZXZpc2lvbiAyMjY3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4
IEBACiAjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMu
aD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaD4K
ICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0u
aD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>