<?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>148742</bug_id>
          
          <creation_ts>2015-09-03 11:15:56 -0700</creation_ts>
          <short_desc>Get rid of RepatchBuffer and replace it with static functions</short_desc>
          <delta_ts>2015-09-04 02:22:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148741</dependson>
    
    <dependson>148792</dependson>
          <blocked>148743</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1123095</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 11:15:56 -0700</bug_when>
    <thetext>Once RepatchBuffer is stateless, it won&apos;t make any sense to instantiate it or pass it around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123139</commentid>
    <comment_count>1</comment_count>
      <attachid>260516</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 13:26:48 -0700</bug_when>
    <thetext>Created attachment 260516
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123146</commentid>
    <comment_count>2</comment_count>
      <attachid>260518</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 13:47:36 -0700</bug_when>
    <thetext>Created attachment 260518
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123149</commentid>
    <comment_count>3</comment_count>
      <attachid>260519</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 13:57:57 -0700</bug_when>
    <thetext>Created attachment 260519
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123150</commentid>
    <comment_count>4</comment_count>
      <attachid>260519</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-03 13:59:07 -0700</bug_when>
    <thetext>Comment on attachment 260519
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123151</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-03 14:01:10 -0700</bug_when>
    <thetext>Attachment 260519 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/JIT.h:183:  The parameter name &quot;returnAddress&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 33 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>1123156</commentid>
    <comment_count>6</comment_count>
      <attachid>260519</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-03 14:05:19 -0700</bug_when>
    <thetext>Comment on attachment 260519
the patch

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

r=me

&gt; Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:-2003
&gt; -    &lt;ClInclude Include=&quot;..\assembler\RepatchBuffer.h&quot;&gt;
&gt; -      &lt;Filter&gt;assembler&lt;/Filter&gt;
&gt; -    &lt;/ClInclude&gt;

You also need to remove this from Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123158</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 14:12:09 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 260519 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=260519&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:-2003
&gt; &gt; -    &lt;ClInclude Include=&quot;..\assembler\RepatchBuffer.h&quot;&gt;
&gt; &gt; -      &lt;Filter&gt;assembler&lt;/Filter&gt;
&gt; &gt; -    &lt;/ClInclude&gt;
&gt; 
&gt; You also need to remove this from
&gt; Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj

Fixed, along with 32-bit builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123160</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-03 14:12:30 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/189288</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260516</attachid>
            <date>2015-09-03 13:26:48 -0700</date>
            <delta_ts>2015-09-03 13:47:36 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50537</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgVG9v
bHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVs
b3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0i
YXNzZW1ibGVyIj4KQEAgLTE5OTgsOSArMTk5OCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxhc3NlbWJsZXJcTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCI+CiAgICAgICA8
RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXFJlcGF0Y2hCdWZmZXIuaCI+Ci0gICAgICA8RmlsdGVy
PmFzc2VtYmxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYXNzZW1ibGVyXFg4NkFzc2VtYmxlci5oIj4KICAgICAgIDxGaWx0ZXI+YXNzZW1i
bGVyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00NjYxLDQgKzQ2NTgsNCBAQAogICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+CiAgIDwvSXRlbUdyb3VwPgotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTExMSw3ICsxMTExLDYgQEAKIAkJODZEM0IyQzUxMDE1NkJERTAwMjg2
NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNCMkMxMTAxNTZCREUwMDI4NjVFNyAv
KiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkQzQjJDMjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkQz
QjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IzQzExMDE1OUQ3RjAwMjg2NUU3IC8qIExp
bmtCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IzQzIxMDE1OUQ3RjAw
Mjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwICovOyB9OwogCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMg
LyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZFM0M2MTIxNjdC
QUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwpAQCAtMjk1NSw3ICsy
OTU0LDYgQEAKIAkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldp
dGhDb25zdGFudFBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkQzQjJDMjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IzQzExMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZm
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0J1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVw
YXRjaEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2REI2NDYzMEY5NUM2RkMwMEQ3
RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJD
IC8qIENvZGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rl
TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFM0M2MDYxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ4MSw3ICs1NDc5LDYg
QEAKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCAqLywKIAkJCQk4NkM1NjhERjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQ
U0Fzc2VtYmxlci5oICovLAotCQkJCTg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNo
QnVmZmVyLmggKi8sCiAJCQkJODZBRTY0QTcxMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxl
ci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJsZXIuaCAq
LywKIAkJCSk7CkBAIC02NzI0LDcgKzY3MjEsNiBAQAogCQkJCUE1QkExNUVCMTgyMzQwQjQwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcg
LyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAw
ODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3
RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlE
ODg2MEVEMjFDM0QwMEI4OTYxOSAvKiBTYW1wbGluZ1Rvb2wuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJ
KHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVw
YXRjaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUmVwYXRj
aEJ1ZmZlcl9oCi0jZGVmaW5lIFJlcGF0Y2hCdWZmZXJfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQot
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgPE1hY3JvQXNzZW1ibGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBSZXBhdGNo
QnVmZmVyOgotLy8KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtb2RpZnkgY29kZSBhZnRlciBj
b2RlIGdlbmVyYXRpb24gaGFzIGJlZW4gY29tcGxldGVkLAotLy8gYW5kIGFmdGVyIHRoZSBjb2Rl
IGhhcyBwb3RlbnRpYWxseSBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQuICBUaGlzIG1lY2hhbmlzbSBp
cwotLy8gdXNlZCB0byBhcHBseSBvcHRpbWl6YXRpb25zIHRvIHRoZSBjb2RlLgotLy8KLWNsYXNz
IFJlcGF0Y2hCdWZmZXIgewotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQ
dHI7Ci0KLXB1YmxpYzoKLSAgICBSZXBhdGNoQnVmZmVyKENvZGVCbG9jayopCi0gICAgewotICAg
IH0KLQotICAgIH5SZXBhdGNoQnVmZmVyKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
cmVsaW5rKENvZGVMb2NhdGlvbkp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRp
b24pCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoanVtcCwgZGVz
dGluYXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbkNhbGwgY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgZGVzdGluYXRpb24pOwotICAgIH0KLQotICAgIHZv
aWQgcmVsaW5rKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24p
Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgZGVzdGlu
YXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsIG5l
YXJDYWxsLCBDb2RlUHRyIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChuZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwoZGVzdGluYXRp
b24pKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFy
Q2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKG5lYXJDYWxsLCBkZXN0aW5hdGlvbik7Ci0gICAg
fQotCi0gICAgdm9pZCByZXBhdGNoKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMy
LCBpbnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJ
bnQzMihkYXRhTGFiZWwzMiwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgcmVwYXRjaChDb2Rl
TG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3QsIGludDMyX3QgdmFsdWUp
Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVs
Q29tcGFjdCwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgcmVwYXRjaChDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihkYXRhTGFiZWxQdHIsIHZhbHVlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlbGlua0NhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQotICAgIHsKLSAgICAgICAgcmVs
aW5rKENvZGVMb2NhdGlvbkNhbGwoQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIGxhYmVsKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCByZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUoUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDb2RlUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQotICAgIHsKLSAg
ICAgICAgcmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlv
bkxhYmVsKG5ld0NhbGxlZUZ1bmN0aW9uKSk7Ci0gICAgfQotCi0gICAgdm9pZCByZWxpbmtDYWxs
ZXJUb0Z1bmN0aW9uKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24pCi0gICAgewotICAgICAgICByZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChDb2RlUHRy
KHJldHVybkFkZHJlc3MpKSwgZnVuY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlbGlu
a05lYXJDYWxsZXJUb1RyYW1wb2xpbmUoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIHJlbGluayhDb2RlTG9jYXRp
b25OZWFyQ2FsbChDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgbGFiZWwpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHJlbGlua05lYXJDYWxsZXJUb1RyYW1wb2xpbmUoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBDb2RlUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAg
cmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25M
YWJlbChuZXdDYWxsZWVGdW5jdGlvbikpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlcGxhY2VX
aXRoTG9hZChDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgbGFiZWwpCi0gICAgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhMb2FkKGxhYmVsKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCByZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbihDb2RlTG9jYXRpb25Db252ZXJ0
aWJsZUxvYWQgbGFiZWwpCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldExv
YWRJbnN0cnVjdGlvbklzQWN0aXZlKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCwg
Ym9vbCBpc0FjdGl2ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0FjdGl2ZSkKLSAgICAgICAgICAg
IHJlcGxhY2VXaXRoTG9hZChsYWJlbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGxh
Y2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQ29k
ZUxvY2F0aW9uTGFiZWwgc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihsYWJlbCk7Ci0gICAg
fQotICAgIAotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhsYWJlbCk7Ci0gICAgfQotCi0gICAgc3RhdGljIENv
ZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVz
cyhDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBsYWJlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNz
KGxhYmVsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0
aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24p
Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0
aW9uU3RhcnQsIGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhICpi
aXQqIG9mIGEgc2lsbHkgQVBJLCBzaW5jZSB3ZSBjdXJyZW50bHkgYWx3YXlzIGFsc28gcmVwYXRj
aCB0aGUKLSAgICAvLyBpbW1lZGlhdGUgYWZ0ZXIgY2FsbGluZyB0aGlzLiBCdXQgSSdtIGZpbmUg
d2l0aCB0aGF0LCBzaW5jZSB0aGlzIGp1c3QgZmVlbHMKLSAgICAvLyBsZXNzIHl1Y2t5LgotICAg
IHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0
aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVn
LCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChpbnN0cnVjdGlvblN0YXJ0LCByZWcsIHZh
bHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MsIHZvaWQqIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQsIGFkZHJlc3MsIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzcywgaW50MzJfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKGlu
c3RydWN0aW9uU3RhcnQsIGFkZHJlc3MsIHZhbHVlKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCi0KLSNlbmRpZiAvLyBSZXBh
dGNoQnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJSZXBhdGNoLmgiCi0jaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC00
Niw3ICs0NSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhclN0dWIoKQogICAgIG1fc3R1YiA9
IG51bGxwdHI7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGNo
QnVmZmVyJiByZXBhdGNoQnVmZmVyKQordm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0p
CiB7CiAgICAgaWYgKCFpc0xpbmtlZCgpKSB7CiAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxl
ZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9y
cGhpYyBjYWxscwpAQCAtNTUsMTQgKzU0LDE0IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmso
Vk0mIHZtLCBSZXBhdGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICB1bmxpbmtG
b3Iodm0sIHJlcGF0Y2hCdWZmZXIsICp0aGlzKTsKKyAgICB1bmxpbmtGb3Iodm0sICp0aGlzKTsK
IAogICAgIC8vIEl0IHdpbGwgYmUgb24gYSBsaXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBi
bG9jay4KICAgICBpZiAoaXNPbkxpc3QoKSkKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKLXZvaWQg
Q2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyKQordm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBo
YW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CiAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChjYWxsZWUtPmV4ZWN1dGFibGUoKSkpCkBAIC03MywxNCArNzIs
MTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0sIFJlcAogICAgIAogICAg
IGlmIChpc0xpbmtlZCgpKSB7CiAgICAgICAgIGlmIChzdHViKCkpIHsKLSAgICAgICAgICAgIGlm
ICghc3R1YigpLT52aXNpdFdlYWsodm0sIHJlcGF0Y2hCdWZmZXIpKSB7CisgICAgICAgICAgICBp
ZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAg
ICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9zdXJlIGNhbGwgdG8gIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3REdW1wKHN0dWIoKS0+dmFyaWFudHMoKSksICIsIHN0dWIgcm91dGlu
ZSAiLCBSYXdQb2ludGVyKHN0dWIoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiLlxuIik7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVubGluayh2bSwgcmVwYXRjaEJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAgICAgICAgICBtX2Ns
ZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghSGVh
cDo6aXNNYXJrZWQobV9jYWxsZWUuZ2V0KCkpKSB7CkBAIC05Miw3ICs5MSw3IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtLCBSZXAKICAgICAgICAgICAgICAgICAgICAgIiku
XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGhhbmRsZVNwZWNpZmljQ2FsbGVlKG1f
Y2FsbGVlLmdldCgpKTsKLSAgICAgICAgICAgIHVubGluayh2bSwgcmVwYXRjaEJ1ZmZlcik7Cisg
ICAgICAgICAgICB1bmxpbmsodm0pOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChoYXZlTGFz
dFNlZW5DYWxsZWUoKSAmJiAhSGVhcDo6aXNNYXJrZWQobGFzdFNlZW5DYWxsZWUoKSkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJl
dmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogI2lmIEVOQUJMRShKSVQpCiAKLWNsYXNzIFJlcGF0Y2hCdWZmZXI7Ci0KIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1
YmxpYzoKICAgICBlbnVtIENhbGxUeXBlIHsgTm9uZSwgQ2FsbCwgQ2FsbFZhcmFyZ3MsIENvbnN0
cnVjdCwgQ29uc3RydWN0VmFyYXJncyB9OwpAQCAtOTAsNyArODgsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIG1fc3R1YiB8fCBtX2NhbGxlZTsgfQot
ICAgIHZvaWQgdW5saW5rKFZNJiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIHZvaWQgdW5saW5rKFZN
Jik7CiAKICAgICB2b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBjYWxsZWVHUFIpCiAgICAgewpAQCAtMjc4LDcgKzI3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZU9yaWdpbjsKICAgICB9CiAKLSAgICB2b2lk
IHZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKTsKKyAgICB2b2lkIHZpc2l0V2VhayhWTSYp
OwogCiBwcml2YXRlOgogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIG1fY2FsbFJldHVybkxvY2F0
aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAi
UHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKICNpbmNs
dWRlICJSZXBhdGNoLmgiCi0jaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUg
IlR5cGVMb2NhdGlvbkNhY2hlLmgiCkBAIC0yNjg0LDE4ICsyNjgzLDE2IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNpZiBFTkFCTEUoSklUKQogICAgIC8vIEhh
bmRsZSBpbmxpbmUgY2FjaGVzLgogICAgIGlmICghIWppdENvZGUoKSkgewotICAgICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7Ci0gICAgICAgIAogICAgICAgICBmb3IgKGF1
dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAg
ICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgICAg
ICAoKml0ZXIpLT52aXNpdFdlYWsoKnZtKCkpOwogCiAgICAgICAgIGZvciAoQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsg
KytpdGVyKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqKml0
ZXI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHViSW5mby52aXNpdFdlYWtSZWZl
cmVuY2VzKCp2bSgpLCByZXBhdGNoQnVmZmVyKSkKKyAgICAgICAgICAgIGlmIChzdHViSW5mby52
aXNpdFdlYWtSZWZlcmVuY2VzKCp2bSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgICAgICByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFs
KHN0dWJJbmZvKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMjc4MiwxMSArMjc3OSwx
MCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJCiAgICAgCiAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7Ci0gICAgcmVzZXRTdHViSW50ZXJuYWwocmVwYXRjaEJ1
ZmZlciwgc3R1YkluZm8pOworICAgIHJlc2V0U3R1YkludGVybmFsKHN0dWJJbmZvKTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQ29kZUJsb2NrOjpyZXNl
dFN0dWJJbnRlcm5hbChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSk7CiAgICAgCkBAIC0yNzk5LDIwICsyNzk1LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNl
dFN0dWJJbnRlcm5hbChSZXBhdGMKICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0pJVChq
aXRUeXBlKCkpKTsKICAgICAKICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQot
ICAgICAgICByZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgdGhpcywgc3R1YkluZm8pOworICAg
ICAgICByZXNldEdldEJ5SUQodGhpcywgc3R1YkluZm8pOwogICAgIGVsc2UgaWYgKGlzUHV0QnlJ
ZEFjY2VzcyhhY2Nlc3NUeXBlKSkKLSAgICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIs
IHRoaXMsIHN0dWJJbmZvKTsKKyAgICAgICAgcmVzZXRQdXRCeUlEKHRoaXMsIHN0dWJJbmZvKTsK
ICAgICBlbHNlIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhhY2Nlc3NUeXBl
KSk7Ci0gICAgICAgIHJlc2V0SW4ocmVwYXRjaEJ1ZmZlciwgdGhpcywgc3R1YkluZm8pOworICAg
ICAgICByZXNldEluKHRoaXMsIHN0dWJJbmZvKTsKICAgICB9CiAgICAgCiAgICAgc3R1YkluZm8u
cmVzZXQoKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQordm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQogewotICAgIHJlc2V0U3R1YkludGVybmFsKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvKTsKKyAgICByZXNldFN0dWJJbnRlcm5hbChzdHViSW5mbyk7CiAgICAgc3R1Yklu
Zm8ucmVzZXRCeUdDID0gdHJ1ZTsKIH0KIApAQCAtMzAzNCwxMSArMzAzMCwxMCBAQCB2b2lkIENv
ZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
bV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIodGhpcyk7CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygq
dm0oKSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51
bmxpbmsoKnZtKCkpOwogICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdp
bigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCksIHJlcGF0Y2hCdWZmZXIp
OworICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsoKnZt
KCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKIGNsYXNzIFR5cGVMb2Nh
dGlvbjsKIAogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGltaXphdGlv
biwgQ291bnRSZW9wdGltaXphdGlvbiB9OwpAQCAtOTgyLDggKzk4MSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIo
VmVjdG9yPEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mKTsKIAogI2lmIEVO
QUJMRShKSVQpCi0gICAgdm9pZCByZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICB2b2lkIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgdm9pZCByZXNldFN0dWJJbnRl
cm5hbChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHZvaWQgcmVzZXRTdHViRHVyaW5nR0NJbnRl
cm5hbChTdHJ1Y3R1cmVTdHViSW5mbyYpOwogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICB9CiB9CiAKLWJvb2wg
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoVk0mIHZtLCBSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyhWTSYgdm0pCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgaWYg
KCF1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSwgcmVwYXRjaEJ1ZmZlcikpCisgICAg
ICAgIGlmICghdS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04OCw3ICs4OCw3IEBAIGJv
b2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6
Ci0gICAgICAgIGlmICghdS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0sIHJlcGF0Y2hC
dWZmZXIpKQorICAgICAgICBpZiAoIXUucHV0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nl
c3NfaW5fbGlzdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjUsNyArMTY1LDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAvLyBvdXRn
b2luZyBHQyBwb2ludGVycyBhcmUga25vd24gdG8gcG9pbnQgdG8gY3VycmVudGx5IG1hcmtlZCBv
YmplY3RzOyB0aGlzIG1ldGhvZCBpcwogICAgIC8vIGFsbG93ZWQgdG8gYWNjb21wbGlzaCB0aGlz
IGJ5IGVpdGhlciBjbGVhcmluZyB0aG9zZSBwb2ludGVycyBzb21laG93IG9yIGJ5IHByb3Zpbmcg
dGhhdAogICAgIC8vIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gbWFya2VkLiBJdCBpcyBub3QgYWxs
b3dlZCB0byBtYXJrIG5ldyBvYmplY3RzLgotICAgIGJvb2wgdmlzaXRXZWFrUmVmZXJlbmNlcyhW
TSYsIFJlcGF0Y2hCdWZmZXImKTsKKyAgICBib29sIHZpc2l0V2Vha1JlZmVyZW5jZXMoVk0mKTsK
ICAgICAgICAgCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBA
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWwKIHsKIH0KIAotYm9vbCBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKFZNJiB2bSwgUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlcikKK2Jvb2wgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OnZpc2l0
V2VhayhWTSYgdm0pCiB7Ci0gICAgbV9jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSwgcmVwYXRj
aEJ1ZmZlcik7CisgICAgbV9jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+QWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRX
ZWFrKFZNJiwgUmVwYXRjaEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFdlYWsoVk0mKSBvdmVycmlkZTsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mbzsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRydWUgaWYgeW91IGFyZSBzdGlsbCB2YWxpZCBh
ZnRlci4gUmV0dXJuIGZhbHNlIGlmIHlvdSBhcmUgbm93IGludmFsaWQuIElmIHlvdSByZXR1cm4K
ICAgICAvLyBmYWxzZSwgeW91IHdpbGwgdXN1YWxseSBub3QgZG8gYW55IGNsZWFyaW5nIGJlY2F1
c2UgdGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2lsbCBzaW1wbHkgYmUKICAgICAvLyBkZXN0cm95ZWQu
Ci0gICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKTsKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZNJik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9u
IDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgUG9seW1vcnBo
aWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZAogICAgICAgICByZW1vdmUoKTsKIH0KIAot
dm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyKQordm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQog
ewogICAgIGlmIChtX2NhbGxMaW5rSW5mbykgewogICAgICAgICBpZiAoT3B0aW9uczo6c2hvd0Rp
c2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgcG9seW1vcnBoaWMg
Y2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCksICIsICIsIG1f
Y2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCksICJcbiIpOwogCi0gICAgICAgIG1fY2FsbExpbmtJ
bmZvLT51bmxpbmsodm0sIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICBtX2NhbGxMaW5rSW5mby0+
dW5saW5rKHZtKTsKICAgICB9CiAKICAgICBpZiAoaXNPbkxpc3QoKSkKQEAgLTExNyw3ICsxMTcs
NyBAQCB2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpjbGVhckNhCiAgICAgfQogfQog
Ci1ib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoVk0mLCBSZXBhdGNo
QnVmZmVyJikKK2Jvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYp
CiB7CiAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykgewogICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKHZhcmlhbnQuZ2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNp
b24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB+UG9seW1vcnBoaWNDYWxsTm9kZSgpOwogICAgIAotICAgIHZvaWQgdW5saW5rKFZN
JiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIHZvaWQgdW5saW5rKFZNJik7CiAKICAgICBib29sIGhh
c0NhbGxMaW5rSW5mbyhDYWxsTGlua0luZm8qIGluZm8pIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
ID09IGluZm87IH0KICAgICB2b2lkIGNsZWFyQ2FsbExpbmtJbmZvKCk7CkBAIC05Niw3ICs5Niw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJDYWxsTm9kZXNGb3IoQ2FsbExpbmtJbmZvKik7
CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mLCBSZXBhdGNoQnVmZmVyJikgb3ZlcnJpZGU7
CisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24g
MTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVn
RXhwTWF0Y2hlc0FycmF5LmgiCi0jaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCkBAIC03NSw3ICs3NCw3IEBA
IHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlQmwKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5j
dGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3N0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0Nh
bGxlZUZ1bmN0aW9uKQogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKQEAgLTkxLDEzICs5MCw3IEBAIHN0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKFJlcGF0Y2hCdWZmZXImIHIKICNlbHNlIC8vIEVOQUJMRShGVExf
SklUKQogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsK
LX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVM
b2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0gICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaENhbGwo
cmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0K
IAogc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKApAQCAtMTA4LDI2ICsxMDEsMzAg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgIGlmIChzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hDYWxs
KHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBz
bG93UGF0aEZ1bmN0aW9uKTsKKyAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAvLyBQYXRjaCB0aGUg
c3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgYml0d2lz
ZV9jYXN0PGludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0
TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZl
cnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQp
LCBpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEludDMyKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLAor
ICAgICAgICBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKSk7CisgICAgQ29k
ZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGNvbnZlcnRpYmxlTG9hZCA9IHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1N0b3JhZ2VMb2FkKTsKKyAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoTG9hZChjb252ZXJ0aWJsZUxvYWQp
OworICAgIGVsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRkcmVzc0Nv
bXB1dGF0aW9uKGNvbnZlcnRpYmxlTG9hZCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAo
Y29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZz
ZXQpKTsKICAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7
CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2Fk
TG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2Fk
TG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2Fk
TG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwog
ICAgIH0KICNlbmRpZgogfQpAQCAtMTYxLDE4ICsxNTgsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcmVwbGFjZVdp
dGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKK3N0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCiB7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5K
dW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3Rh
cnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKAogICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KAogICAgICAg
ICAgICAgICAgICAgICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwpAQCAtNjgxLDkgKzY3
OCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAg
ICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAgICAgcmVwYXRjaENh
bGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZv
LCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgICAgICAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZCk7CiAKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAg
IH0KQEAgLTcxNCw5ICs3MTAsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlECiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CiAKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICByZXBhdGNoQ2FsbChy
ZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZCk7CisgICAgICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAK
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9CkBAIC03NjEsMTYgKzc1Niwx
NSBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiBzdGF0aWMgdm9p
ZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgaWYg
KHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SnVtcCgKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0
Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVw
bGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiB9CiAK
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTEyNTcs
MTMgKzEyNTEsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAog
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAg
ICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLAogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2Fs
bChyZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwor
ICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFu
c2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAg
CkBAIC0xMzIwLDkgKzEzMTMsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlECiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCiAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXBhdGNoQ2FsbChy
ZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVM
aXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbGlzdC0+aXNGdWxsKCkpOwogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwogICAgIH0KQEAgLTEzOTMsMTAgKzEzODUsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91
dGluZSkpOwogICAgICAgICB9Ci0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCks
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIGlmIChsaXN0LT5p
c0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9j
aywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAKICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKICAgICB9CkBAIC0xNDQyLDEwICsxNDMzLDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
ID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAog
ICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCks
IHN0dWJSb3V0aW5lKSk7CiAKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgaWYgKGxpc3QtPmlz
RnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2Nr
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIAogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwogICAgIH0KQEAgLTE1NzMsOCArMTU2Myw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlSZXBhdGNoSW4oCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgdHJ1ZSk7CiAgICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUrKzsKICAg
ICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKICAgICAKICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDEpID8gUmV0cnlDYWNoZUxhdGVyIDogR2l2ZVVwT25DYWNoZTsKIH0KQEAg
LTE1ODcsMjQgKzE1NzYsMjAgQEAgdm9pZCByZXBhdGNoSW4oCiAgICAgICAgIHJlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkluKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoCi0gICAgUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSosIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKIHsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLCBjb2RlUmVmLmNvZGUoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgY29kZVJlZi5jb2RlKCkp
OwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcigKLSAgICBSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgbGlu
a1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIo
Z2VuZXJhdG9yKSk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENU
SVN0dWIoZ2VuZXJhdG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKAotICAgIFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBsaW5rU2xvd0Zv
cih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwogICAgIGNhbGxMaW5rSW5mby5zZXRT
bG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssICp2bSwgbnVsbHB0ciwg
dHJ1ZSkpOwogfQogCkBAIC0xNjE4LDI2ICsxNjAzLDIzIEBAIHZvaWQgbGlua0ZvcigKIAogICAg
IFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKLSAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKICAgICBBU1NFUlQoIWNhbGxM
aW5rSW5mby5pc0xpbmtlZCgpKTsKICAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKGV4ZWMtPmNh
bGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSwgY2FsbGVyQ29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICBjYWxsTGlua0luZm8uc2V0
TGFzdFNlZW5DYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBp
biAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIGF0ICIsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCks
ICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAi
LCBjb2RlUHRyLCAiXG4iKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyKCksIGNvZGVQdHIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVt
cChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIGNvZGVQdHIpOwogICAgIAogICAgIGlmIChj
YWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoY2Fs
bExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAg
IGxpbmtTbG93Rm9yKAotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5m
bywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8pOworICAgIGxpbmtTbG93Rm9yKHZtLCBj
YWxsTGlua0luZm8pOwogfQogCiB2b2lkIGxpbmtTbG93Rm9yKApAQCAtMTY0NiwxOCArMTYyOCwx
NSBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
ZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZtID0gY2FsbGVyQ29k
ZUJsb2NrLT52bSgpOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxs
ZXJDb2RlQmxvY2spOwotICAgIAotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBj
YWxsTGlua0luZm8pOworICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi1z
dGF0aWMgdm9pZCByZXZlcnRDYWxsKAotICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIs
IFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlUmVmKQorc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKIHsKLSAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKAotICAg
ICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihj
YWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQ
YXRoQmVnaW4oKSksCiAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKCkpLCAwKTsKLSAgICBsaW5rU2xvd0ZvcihyZXBh
dGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKyAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CiAgICAgY2FsbExpbmtJbmZvLmNsZWFy
U3R1YigpOwpAQCAtMTY2NiwxMyArMTY0NSwxMiBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKAog
ICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7CiB9CiAKLXZvaWQgdW5saW5rRm9yKAotICAg
IFZNJiB2bSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCit2b2lkIHVubGlua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKQogewogICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0
YUxvZygiVW5saW5raW5nIGNhbGwgZnJvbSAiLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0
aW9uKCksICJcbiIpOwogICAgIAotICAgIHJldmVydENhbGwocmVwYXRjaEJ1ZmZlciwgJnZtLCBj
YWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpOworICAg
IHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikpOwogfQogCiB2b2lkIGxpbmtWaXJ0dWFsRm9yKApAQCAtMTY4NCw5ICsxNjYy
LDggQEAgdm9pZCBsaW5rVmlydHVhbEZvcigKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5
Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgdmlydHVhbCBj
YWxsIGF0ICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29k
ZU9yaWdpbigpLCAiXG4iKTsKICAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y2FsbGVyQ29kZUJsb2NrKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5r
ID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIHJldmVydENhbGwocmVw
YXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICByZXZlcnRD
YWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZvLnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgKnZtLCBudWxscHRy
LCB0cnVlKSk7CiB9CiAKQEAgLTE5MTYsMTUgKzE4OTMsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBX
VEY6Om1vdmUoZmFzdENvdW50cykpKTsKICAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VX
aXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRj
aE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwK
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMs
IGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwg
Y2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCi0gICAgbGlu
a1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBw
cmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdD
IHJ1bnMgYW5kIHNlZXMKICAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgpAQCAt
MTkzNiwyOSArMTkxMSwyOSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNh
bGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZl
ciwgY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk7CisgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhz
dHJ1Y3R1cmVMYWJlbCksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ojo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAogICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKSwKICAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikp
OwogICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHN0YXRp
Y19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2lu
dGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwog
I2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
KTsKIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQg
cmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCiB7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNv
ZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwpAQCAtMTk3
MiwyOSArMTk0NywyOSBAQCB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNo
CiAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIHJlcGF0
Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKICAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFD
aGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICAg
ICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRy
ZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0
cnVjdHVyZUxhYmVsKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAogICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHVi
SW5mby5wYXRjaC5iYXNlR1BSKSwKICAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRl
cikpOwogICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHN0
YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQ
b2ludGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwogI2Vsc2UKLSAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRM
b2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRp
ZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAotdm9pZCByZXNldEluKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3ZvaWQgcmVzZXRJbihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
CiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9K
dW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTIgKzQyLDEyIEBAIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHUKIHZv
aWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29s
IHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9p
ZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0ZvcihWTSYsIFJlcGF0Y2hCdWZm
ZXImLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rRm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7
CiB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50
KTsKLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260518</attachid>
            <date>2015-09-03 13:47:36 -0700</date>
            <delta_ts>2015-09-03 13:57:57 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>83902</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5Mjg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNyBA
QAorMjAxNS0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgUmVwYXRjaEJ1ZmZlciBhbmQgcmVwbGFjZSBpdCB3aXRoIHN0YXRpYyBmdW5j
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGF0Y2hCdWZmZXIgaXMgYW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBzdGF0ZS4gQWxs
IG9mIGl0cyBpbnN0YW5jZSBtZXRob2RzIGFyZQorICAgICAgICBqdXN0IHdyYXBwZXJzIGZvciBt
ZXRob2RzIG9uIE1hY3JvQXNzZW1ibGVyLiBTbywgd2Ugc2hvdWxkIG1ha2UgdGhvc2UgTWFjcm9B
c3NlbWJsZXIKKyAgICAgICAgbWV0aG9kcyBwdWJsaWMgYW5kIGNhbGwgdGhlbSBkaXJlY3RseS4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXApOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcik6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJDYWxsUmV0dXJuT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXApOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwpOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVhZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aExvYWQpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbik6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1ha2VC
cmFuY2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpsaW5rQ2FsbCk6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bGlua0NhbGwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojp0cnVzdGVkSW1tMzJGcm9tUHRyKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODY6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwYXRjaENh
bGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6bGlua0NhbGwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0
Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bGlua0NhbGwpOgorICAgICAgICAq
IGFzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclN0dWIp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8u
aDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmlzTGlua2VkKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNv
ZGVPcmlnaW4pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlc2V0U3R1Yik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHVi
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc2V0U3R1YkR1cmluZ0dDSW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVm
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjpzZWVuT25jZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlND
OjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAg
ICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKToK
KyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKToK
KyAgICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpjdGlQYXRjaE5lYXJDYWxs
QnlSZXR1cm5BZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5oOgorICAg
ICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2RlKToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU6OmNsZWFyQ2FsbE5vZGVzRm9yKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6CisgICAgICAgICogaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbE5v
ZGU6Omhhc0NhbGxMaW5rSW5mbyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hDYWxsKToKKyAg
ICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6Y2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXAp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpwYXRjaEp1
bXBUb0dldEJ5SWRTdHViKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6Cisg
ICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0
QnlJZExpc3QpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpy
ZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6Omxp
bmtGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6dW5saW5r
Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5r
UG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEKToKKyAgICAgICAg
KEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRJbik6CisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKwogMjAxNS0wOS0wMyAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29s
c2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFdlYkFz
c2VtYmx5IGZ1bmN0aW9uIGNvbXBpbGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4KIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3Nj
aGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91
cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9ImFzc2VtYmxlciI+CkBAIC0xOTk4LDkgKzE5OTgsNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLmgiPgogICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxSZXBhdGNo
QnVmZmVyLmgiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxYODZBc3NlbWJsZXIu
aCI+CiAgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpA
QCAtNDY2MSw0ICs0NjU4LDQgQEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9N
QVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCis8L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg5MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTEsNyArMTExMSw2IEBA
CiAJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3Rh
bnRQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzIxMDE1NkJERTAwMjg2
NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEM0IzQzMxMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNC
M0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODZEM0IzQzQxMDE1OUQ3RjAwMjg2NUU3IC8q
IFJlcGF0Y2hCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEQjY0NjQwRjk1
QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkRCNjQ2MzBGOTVDNkZD
MDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLzsgfTsKIAkJ
ODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFMTE2QjAwRkU3NUFDODAwQjUxMkJD
IC8qIENvZGVMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTg2RTNDNjEyMTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwNjE2N0JBQjg3
MDA2RDc2MEEgLyogSlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKQEAgLTI5NTUsNyArMjk1NCw2IEBACiAJCTg2RDNCMkMxMTAxNTZCREUwMDI4
NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3IC8qIE1h
Y3JvQXNzZW1ibGVyQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNCM0MxMTAx
NTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExpbmtCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZEM0Iz
QzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0ODEsNyArNTQ3OSw2IEBACiAJCQkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8sCiAJCQkJNjU4NjAxNzcxODVBOEY1RTAw
MDMwRUVFIC8qIE1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJODZDNTY4
REYxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLywKLQkJCQk4NkQzQjNDMjEw
MTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oICovLAogCQkJCTg2QUU2NEE3MTM1RTVF
MUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAx
RDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi8sCiAJCQkpOwpAQCAtNjcyNCw3ICs2NzIxLDYgQEAK
IAkJCQlBNUJBMTVFQjE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2
OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
ODZEM0IzQzQxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDg4NjBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdU
b29sLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODky
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTM1LDYgKzkzNSw2NiBAQCBwdWJsaWM6CiAKICAg
ICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOwogICAgIAorICAgIHN0YXRpYyB2b2lkIGxpbmtK
dW1wKHZvaWQqIGNvZGUsIEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQorICAg
IHsKKyAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua0p1bXAoY29kZSwganVtcC5tX2xhYmVsLCB0
YXJnZXQuZGF0YUxvY2F0aW9uKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQb2lu
dGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCB2b2lkKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldExpbmtlckFkZHJlc3Modm9pZCogY29kZSwg
QXNzZW1ibGVyTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlw
ZTo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBsYWJlbCk7CisgICAgfQorCisgICAgc3RhdGlj
IHVuc2lnbmVkIGdldExpbmtlckNhbGxSZXR1cm5PZmZzZXQoQ2FsbCBjYWxsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldENhbGxSZXR1cm5PZmZzZXQoY2FsbC5tX2xh
YmVsKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSnVtcChDb2RlTG9jYXRpb25K
dW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QXNzZW1ibGVyVHlwZTo6cmVsaW5rSnVtcChqdW1wLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlv
bi5kYXRhTG9jYXRpb24oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaE5lYXJD
YWxsKENvZGVMb2NhdGlvbk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0
aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0NhbGwobmVhckNh
bGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJl
bENvbXBhY3QgZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QuZGF0YUxvY2F0
aW9uKCksIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyLCBpbnQzMl90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwYXRjaEludDMyKGRhdGFMYWJlbDMyLmRhdGFM
b2NhdGlvbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50
ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0ciwgdm9pZCogdmFsdWUpCisg
ICAgeworICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoUG9pbnRlcihkYXRhTGFiZWxQdHIu
ZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQqIHJl
YWRQb2ludGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIpCisgICAgewor
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6cmVhZFBvaW50ZXIoZGF0YUxhYmVsUHRyLmRh
dGFMb2NhdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhM
b2FkKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKKyAgICB7CisgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoTG9hZChsYWJlbC5kYXRhTG9jYXRpb24oKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKENv
ZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKKyAgICB7CisgICAgICAgIEFzc2VtYmxl
clR5cGU6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigp
KTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyKCkKICAg
ICAgICAgOiBtX3JhbmRvbVNvdXJjZShjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpKQpA
QCAtMTAzMSw2NyArMTA5MSw2IEBAIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBtX3RlbXBSZWdp
c3RlcnNWYWxpZEJpdHM7CiAKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKLSAgICBmcmll
bmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLQotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQq
IGNvZGUsIEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgQXNzZW1ibGVyVHlwZTo6bGlua0p1bXAoY29kZSwganVtcC5tX2xhYmVsLCB0YXJnZXQuZGF0
YUxvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQq
IGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQqIGdldExpbmtlckFkZHJlc3Modm9pZCogY29kZSwgQXNzZW1ibGVy
TGFiZWwgbGFiZWwpCi0gICAgewotICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Z2V0UmVs
b2NhdGVkQWRkcmVzcyhjb2RlLCBsYWJlbCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHVuc2lnbmVk
IGdldExpbmtlckNhbGxSZXR1cm5PZmZzZXQoQ2FsbCBjYWxsKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEFzc2VtYmxlclR5cGU6OmdldENhbGxSZXR1cm5PZmZzZXQoY2FsbC5tX2xhYmVsKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoSnVtcChDb2RlTG9jYXRpb25KdW1wIGp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgQXNzZW1ibGVy
VHlwZTo6cmVsaW5rSnVtcChqdW1wLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9j
YXRpb24oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaE5lYXJDYWxsKENvZGVM
b2NhdGlvbk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikK
LSAgICB7Ci0gICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0NhbGwobmVhckNhbGwuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Qg
ZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFzc2VtYmxl
clR5cGU6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QuZGF0YUxvY2F0aW9uKCksIHZh
bHVlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMyLCBpbnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgQXNzZW1ibGVyVHlwZTo6cmVwYXRjaEludDMyKGRhdGFMYWJlbDMyLmRhdGFMb2NhdGlvbigp
LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0ciwgdm9pZCogdmFsdWUpCi0gICAgewotICAg
ICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxvY2F0
aW9uKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVy
KENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRhTGFiZWxQdHIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQXNzZW1ibGVyVHlwZTo6cmVhZFBvaW50ZXIoZGF0YUxhYmVsUHRyLmRhdGFMb2NhdGlv
bigpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVM
b2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIEFzc2VtYmxlclR5
cGU6OnJlcGxhY2VXaXRoTG9hZChsYWJlbC5kYXRhTG9jYXRpb24oKSk7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKENvZGVMb2NhdGlv
bkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIEFzc2VtYmxlclR5cGU6OnJl
cGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKLSAgICB9
CiAKIHByaXZhdGU6CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUwNiw2ICsyNTA2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIEFSTTY0QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJl
bFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9u
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVz
dGluYXRpb24pCisgICAgeworICAgICAgICBBUk02NEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
Y2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIp
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9
CisKIHByb3RlY3RlZDoKICAgICBBTFdBWVNfSU5MSU5FIEp1bXAgbWFrZUJyYW5jaChBUk02NEFz
c2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCiAgICAgewpAQCAtMjg3OCwxNiArMjg4OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBBUk02NEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2Fs
bC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKSwg
ZnVuY3Rpb24udmFsdWUoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFSTTY0QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJl
bFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9u
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVz
dGluYXRpb24pCi0gICAgewotICAgICAgICBBUk02NEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
Y2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIp
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9
Ci0KICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIgbV9kYXRhTWVtb3J5VGVtcFJlZ2lzdGVyOwogICAg
IENhY2hlZFRlbXBSZWdpc3RlciBtX2NhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcjsKICAgICBib29s
IG1fbWFrZUp1bXBQYXRjaGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMTg5MjY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MDEsNiArMTkwMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRp
b24pCisgICAgeworICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0Nh
bGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgfQorCiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAgICAgdm9pZCBwcm9iZShQcm9iZUZ1
bmN0aW9uLCB2b2lkKiBhcmcxID0gMCwgdm9pZCogYXJnMiA9IDApOwogI2VuZGlmIC8vIEVOQUJM
RShNQVNNX1BST0JFKQpAQCAtMjAwNSwxNiArMjAxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIEFS
TXY3QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVl
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNh
bGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBB
Uk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNo
Q2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQotICAg
IHsKLSAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24o
KSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCiAjaWYgRU5BQkxF
KE1BU01fUFJPQkUpCiAgICAgaW5saW5lIFRydXN0ZWRJbW0zMiB0cnVzdGVkSW1tMzJGcm9tUHRy
KHZvaWQqIHB0cikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0NSwxNSArMzQ1LDYgQEAgcHVibGljOgogICAgICAgICBYODZBc3NlbWJsZXI6
OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxl
QWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIDAsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCi1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwotICAgIGZyaWVuZCBjbGFzcyBSZXBh
dGNoQnVmZmVyOwotCi0gICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgWDg2QXNzZW1ibGVyOjpy
ZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwpAQCAtMzYzLDYgKzM1NCwxNSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgWDg2
QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
TGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAgIHN0YXRp
YyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rp
b24pCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9s
YWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg1NCw2ICs4NTQsMTYgQEAgcHVibGljOgogICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1
bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzY3JhdGNoUmVnaXN0ZXIpOwog
ICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBYODZBc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hf
T0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4
NkFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQ
QVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtC
dWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC04NjUsMTYgKzg3NSw2
IEBAIHByaXZhdGU6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlu
a0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKICAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxM
X1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBYODZBc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VU
X0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2aXNpb24gMTg5Mjc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBSZXBhdGNoQnVmZmVyX2gKLSNkZWZp
bmUgUmVwYXRjaEJ1ZmZlcl9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSA8TWFjcm9Bc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vIFJlcGF0Y2hCdWZmZXI6Ci0vLwotLy8g
VGhpcyBjbGFzcyBpcyB1c2VkIHRvIG1vZGlmeSBjb2RlIGFmdGVyIGNvZGUgZ2VuZXJhdGlvbiBo
YXMgYmVlbiBjb21wbGV0ZWQsCi0vLyBhbmQgYWZ0ZXIgdGhlIGNvZGUgaGFzIHBvdGVudGlhbGx5
IGFscmVhZHkgYmVlbiBleGVjdXRlZC4gIFRoaXMgbWVjaGFuaXNtIGlzCi0vLyB1c2VkIHRvIGFw
cGx5IG9wdGltaXphdGlvbnMgdG8gdGhlIGNvZGUuCi0vLwotY2xhc3MgUmVwYXRjaEJ1ZmZlciB7
Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKLQotcHVibGljOgot
ICAgIFJlcGF0Y2hCdWZmZXIoQ29kZUJsb2NrKikKLSAgICB7Ci0gICAgfQotCi0gICAgflJlcGF0
Y2hCdWZmZXIoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZWxpbmsoQ29kZUxvY2F0
aW9uSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChqdW1wLCBkZXN0aW5hdGlvbik7Ci0gICAg
fQotCi0gICAgdm9pZCByZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbChjYWxsLCBkZXN0aW5hdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCByZWxpbmsoQ29kZUxv
Y2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBkZXN0aW5hdGlvbik7Ci0gICAgfQot
Ci0gICAgdm9pZCByZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVQdHIg
ZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKG5lYXJDYWxsLCBDb2RlTG9jYXRpb25MYWJlbChkZXN0aW5hdGlvbikpOwotICAgIH0KLQot
ICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlTG9jYXRp
b25MYWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwobmVhckNhbGwsIGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJl
cGF0Y2goQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzIsIGludDMyX3QgdmFsdWUp
Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKGRhdGFMYWJlbDMy
LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXBhdGNoKENvZGVMb2NhdGlvbkRhdGFMYWJl
bENvbXBhY3QgZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0LCB2YWx1ZSk7
Ci0gICAgfQotCi0gICAgdm9pZCByZXBhdGNoKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBkYXRh
TGFiZWxQdHIsIHZvaWQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGRhdGFMYWJlbFB0ciwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgcmVs
aW5rQ2FsbGVyVG9UcmFtcG9saW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFiZWwpCi0gICAgewotICAgICAgICByZWxpbmsoQ29kZUxvY2F0aW9u
Q2FsbChDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgbGFiZWwpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIHJlbGlua0NhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIENvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi0gICAgewotICAgICAgICByZWxpbmtDYWxs
ZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwobmV3Q2FsbGVl
RnVuY3Rpb24pKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGlua0NhbGxlclRvRnVuY3Rpb24oUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKLSAgICB7
Ci0gICAgICAgIHJlbGluayhDb2RlTG9jYXRpb25DYWxsKENvZGVQdHIocmV0dXJuQWRkcmVzcykp
LCBmdW5jdGlvbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVsaW5rTmVhckNhbGxlclRvVHJh
bXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVs
IGxhYmVsKQotICAgIHsKLSAgICAgICAgcmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQ
dHIocmV0dXJuQWRkcmVzcykpLCBsYWJlbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVsaW5r
TmVhckNhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENv
ZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi0gICAgewotICAgICAgICByZWxpbmtOZWFyQ2FsbGVy
VG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKG5ld0NhbGxlZUZ1
bmN0aW9uKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVwbGFjZVdpdGhMb2FkKENvZGVMb2Nh
dGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBsYWNlV2l0aExvYWQobGFiZWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9uKENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCBsYWJlbCkK
LSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRh
dGlvbihsYWJlbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0TG9hZEluc3RydWN0aW9uSXNB
Y3RpdmUoQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsLCBib29sIGlzQWN0aXZlKQot
ICAgIHsKLSAgICAgICAgaWYgKGlzQWN0aXZlKQotICAgICAgICAgICAgcmVwbGFjZVdpdGhMb2Fk
KGxhYmVsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwbGFjZVdpdGhBZGRyZXNzQ29t
cHV0YXRpb24obGFiZWwpOwotICAgIH0KLQotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBz
dGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgbGFiZWwpCi0gICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZC
cmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGxhYmVsKTsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hP
bkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxhYmVsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
T25BZGRyZXNzKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwg
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyIGxhYmVsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpz
dGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MobGFiZWwpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVj
dGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydCwgZGVzdGlu
YXRpb24pOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgKmJpdCogb2YgYSBzaWxseSBB
UEksIHNpbmNlIHdlIGN1cnJlbnRseSBhbHdheXMgYWxzbyByZXBhdGNoIHRoZQotICAgIC8vIGlt
bWVkaWF0ZSBhZnRlciBjYWxsaW5nIHRoaXMuIEJ1dCBJJ20gZmluZSB3aXRoIHRoYXQsIHNpbmNl
IHRoaXMganVzdCBmZWVscwotICAgIC8vIGxlc3MgeXVja3kuCi0gICAgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVj
dGlvblN0YXJ0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcsIHZvaWQqIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJh
bmNoUHRyV2l0aFBhdGNoKGluc3RydWN0aW9uU3RhcnQsIHJlZywgdmFsdWUpOwotICAgIH0KLQot
ICAgIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzcywgdm9pZCogdmFsdWUpCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goaW5z
dHJ1Y3Rpb25TdGFydCwgYWRkcmVzcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgcmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25M
YWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzLCBp
bnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25TdGFydCwg
YWRkcmVzcywgdmFsdWUpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKLQotI2VuZGlmIC8vIFJlcGF0Y2hCdWZmZXJfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJ
KHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
REZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2gu
aCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTQ2LDcgKzQ1LDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmNsZWFyU3R1YigpCiAgICAgbV9zdHViID0gbnVsbHB0cjsKIH0KIAot
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIpCit2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKIHsKICAgICBpZiAoIWlz
TGlua2VkKCkpIHsKICAgICAgICAgLy8gV2UgY291bGQgYmUgY2FsbGVkIGV2ZW4gaWYgd2UncmUg
bm90IGxpbmtlZCBhbnltb3JlIGJlY2F1c2Ugb2YgaG93IHBvbHltb3JwaGljIGNhbGxzCkBAIC01
NSwxNCArNTQsMTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0Ywog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIHVubGlua0Zvcih2bSwgcmVwYXRjaEJ1
ZmZlciwgKnRoaXMpOworICAgIHVubGlua0Zvcih2bSwgKnRoaXMpOwogCiAgICAgLy8gSXQgd2ls
bCBiZSBvbiBhIGxpc3QgaWYgdGhlIGNhbGxlZSBoYXMgYSBjb2RlIGJsb2NrLgogICAgIGlmIChp
c09uTGlzdCgpKQogICAgICAgICByZW1vdmUoKTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OnZp
c2l0V2VhayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit2b2lkIENhbGxM
aW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2Fs
bGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKICAgICAgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKGNhbGxlZS0+ZXhlY3V0YWJsZSgpKSkKQEAgLTczLDE0ICs3MiwxNCBAQCB2b2lkIENhbGxM
aW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSwgUmVwCiAgICAgCiAgICAgaWYgKGlzTGlua2VkKCkp
IHsKICAgICAgICAgaWYgKHN0dWIoKSkgewotICAgICAgICAgICAgaWYgKCFzdHViKCktPnZpc2l0
V2Vhayh2bSwgcmVwYXRjaEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGlmICghc3R1YigpLT52aXNp
dFdlYWsodm0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
ewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAg
IkNsZWFyaW5nIGNsb3N1cmUgY2FsbCB0byAiLAogICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dER1bXAoc3R1YigpLT52YXJpYW50cygpKSwgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIo
c3R1YigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICIuXG4iKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdW5saW5rKHZtLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICB1bmxpbmsodm0pOwogICAgICAgICAgICAgICAgIG1fY2xlYXJlZEJ5R0MgPSB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFIZWFwOjppc01hcmtlZChtX2Nh
bGxlZS5nZXQoKSkpIHsKQEAgLTkyLDcgKzkxLDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0
V2VhayhWTSYgdm0sIFJlcAogICAgICAgICAgICAgICAgICAgICAiKS5cbiIpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaGFuZGxlU3BlY2lmaWNDYWxsZWUobV9jYWxsZWUuZ2V0KCkpOwot
ICAgICAgICAgICAgdW5saW5rKHZtLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIHVubGlu
ayh2bSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhhdmVMYXN0U2VlbkNhbGxlZSgpICYm
ICFIZWFwOjppc01hcmtlZChsYXN0U2VlbkNhbGxlZSgpKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTg5Mjc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw4ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJ
VCkKIAotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLQogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGlj
IEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgogICAgIGVudW0g
Q2FsbFR5cGUgeyBOb25lLCBDYWxsLCBDYWxsVmFyYXJncywgQ29uc3RydWN0LCBDb25zdHJ1Y3RW
YXJhcmdzIH07CkBAIC05MCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIGlz
TGlua2VkKCkgeyByZXR1cm4gbV9zdHViIHx8IG1fY2FsbGVlOyB9Ci0gICAgdm9pZCB1bmxpbmso
Vk0mLCBSZXBhdGNoQnVmZmVyJik7CisgICAgdm9pZCB1bmxpbmsoVk0mKTsKIAogICAgIHZvaWQg
c2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2ln
bmVkIGNhbGxlZUdQUikKICAgICB7CkBAIC0yNzgsNyArMjc2LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9jb2RlT3JpZ2luOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRXZWFrKFZNJiwg
UmVwYXRjaEJ1ZmZlciYpOworICAgIHZvaWQgdmlzaXRXZWFrKFZNJik7CiAKIHByaXZhdGU6CiAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJuTG9jYXRpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg5
Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIK
LSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2Fj
aGUuaCIKQEAgLTI2ODQsMTggKzI2ODMsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KAogI2lmIEVOQUJMRShKSVQpCiAgICAgLy8gSGFuZGxlIGlubGluZSBjYWNo
ZXMuCiAgICAgaWYgKCEhaml0Q29kZSgpKSB7Ci0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcih0aGlzKTsKLSAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byBpdGVyID0gY2FsbExp
bmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAgICAgKCppdGVyKS0+dmlz
aXRXZWFrKCp2bSgpLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICgqaXRlciktPnZpc2l0
V2Vhaygqdm0oKSk7CiAKICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVy
YXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRlcjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMoKnZtKCksIHJl
cGF0Y2hCdWZmZXIpKQorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5j
ZXMoKnZtKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
KTsKKyAgICAgICAgICAgIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoc3R1YkluZm8pOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0yNzgyLDExICsyNzc5LDEwIEBAIHZvaWQgQ29kZUJs
b2NrOjpyZXNldFN0dWIoU3RydWN0dXJlU3R1YkkKICAgICAKICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cih0aGlzKTsKLSAgICByZXNldFN0dWJJbnRlcm5hbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7
CisgICAgcmVzZXRTdHViSW50ZXJuYWwoc3R1YkluZm8pOwogfQogCi12b2lkIENvZGVCbG9jazo6
cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKICAgICAKQEAg
LTI3OTksMjAgKzI3OTUsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJl
cGF0YwogICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpOwogICAg
IAogICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgIHJlc2V0R2V0
QnlJRChyZXBhdGNoQnVmZmVyLCB0aGlzLCBzdHViSW5mbyk7CisgICAgICAgIHJlc2V0R2V0QnlJ
RCh0aGlzLCBzdHViSW5mbyk7CiAgICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5
cGUpKQotICAgICAgICByZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZlciwgdGhpcywgc3R1YkluZm8p
OworICAgICAgICByZXNldFB1dEJ5SUQodGhpcywgc3R1YkluZm8pOwogICAgIGVsc2UgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsKLSAgICAgICAgcmVz
ZXRJbihyZXBhdGNoQnVmZmVyLCB0aGlzLCBzdHViSW5mbyk7CisgICAgICAgIHJlc2V0SW4odGhp
cywgc3R1YkluZm8pOwogICAgIH0KICAgICAKICAgICBzdHViSW5mby5yZXNldCgpOwogfQogCi12
b2lkIENvZGVCbG9jazo6cmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIENvZGVCbG9j
azo6cmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
CiB7Ci0gICAgcmVzZXRTdHViSW50ZXJuYWwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAg
IHJlc2V0U3R1YkludGVybmFsKHN0dWJJbmZvKTsKICAgICBzdHViSW5mby5yZXNldEJ5R0MgPSB0
cnVlOwogfQogCkBAIC0zMDM0LDExICszMDMwLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJ
bmNvbWluZ0NhbGxzKCkKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChtX2luY29taW5nQ2FsbHMu
aXNFbXB0eSgpICYmIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICB3
aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQot
ICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpLCByZXBhdGNoQnVm
ZmVyKTsKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CiAg
ICAgd2hpbGUgKG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGxzLmJlZ2luKCktPnVubGluaygqdm0oKSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgIG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMTg5MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci1jbGFzcyBSZXBhdGNoQnVmZmVyOwogY2xhc3MgVHlwZUxvY2F0aW9uOwogCiBlbnVtIFJl
b3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1p
emF0aW9uIH07CkBAIC05ODIsOCArOTgxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGluc2VydEJh
c2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihWZWN0b3I8SW5zdHJ1Y3Rp
b24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYpOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2
b2lkIHJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwotICAgIHZvaWQgcmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICB2b2lkIHJlc2V0U3R1YkludGVybmFsKFN0cnVjdHVyZVN0
dWJJbmZvJik7CisgICAgdm9pZCByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1f
dW5saW5rZWRDb2RlOwogICAgIGludCBtX251bVBhcmFtZXRlcnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJl
dmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgIH0KIH0KIAotYm9vbCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIpCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFZNJiB2bSkK
IHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
c2VsZjoKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFr
UmVmZXJlbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBpZiAoIXUuZ2V0QnlJZExpc3Qu
bGlzdC0+dmlzaXRXZWFrKHZtLCByZXBhdGNoQnVmZmVyKSkKKyAgICAgICAgaWYgKCF1LmdldEJ5
SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgaWYgKCF1
LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSwgcmVwYXRjaEJ1ZmZlcikpCisgICAgICAg
IGlmICghdS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19pbl9saXN0OiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBA
QCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIC8vIG91dGdvaW5nIEdDIHBvaW50ZXJz
IGFyZSBrbm93biB0byBwb2ludCB0byBjdXJyZW50bHkgbWFya2VkIG9iamVjdHM7IHRoaXMgbWV0
aG9kIGlzCiAgICAgLy8gYWxsb3dlZCB0byBhY2NvbXBsaXNoIHRoaXMgYnkgZWl0aGVyIGNsZWFy
aW5nIHRob3NlIHBvaW50ZXJzIHNvbWVob3cgb3IgYnkgcHJvdmluZyB0aGF0CiAgICAgLy8gdGhl
eSBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIG1hcmsgbmV3
IG9iamVjdHMuCi0gICAgYm9vbCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZNJiwgUmVwYXRjaEJ1ZmZl
ciYpOworICAgIGJvb2wgdmlzaXRXZWFrUmVmZXJlbmNlcyhWTSYpOwogICAgICAgICAKICAgICBi
b29sIHNlZW5PbmNlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTY3LDEwICsxNjYsNyBAQCB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdu
b3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSkpOwogICAgIH0KICAg
ICAKLSAgICB7Ci0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2sp
OwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0
Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7Ci0g
ICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgp
KSk7CiAgICAgCiAgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg5MjY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBA
QAogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNjE5LDggKzYxOCw2IEBAIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotCiAgICAgYXV0byBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNr
bWFwSUQpOwogICAgIC8vIEl0J3Mgc29ydCBvZiByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlIHdv
bid0IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24gaGFuZGxpbmcKICAgICAvLyBwYXRoLCBmb3Ig
c29tZSBraW5kcyBvZiBmdW5jdGlvbnMuCkBAIC02MzMsNyArNjMwLDcgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGFja092ZXJmbG93RXhjZXB0aW9uLmlzU2V0KCkpOwogCi0gICAgICAgICAgICByZXBhdGNo
QnVmZmVyLnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhj
ZXB0aW9uc0xpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhY2tPdmVyZmxvd0V4Y2VwdGlvbikpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIHN0YXRl
LmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhY2tP
dmVyZmxvd0V4Y2VwdGlvbikpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNjQ3LDcgKzY0
NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlvbkxhYmVsKAogICAgICAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3Jk
Lmluc3RydWN0aW9uT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBsYWNlV2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2Vw
dGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0
aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC02NzAsNyArNjY3LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICAgICAgICAgIGlmIChpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCkKICAgICAg
ICAgICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1
bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhK
dW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoc291cmNlLCBpbmZvLm1fdGh1bmtBZGRyZXNz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE4
OTI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIk9wZXJhbmRzSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNTIzLDggKzUyMiw3IEBAIGV4
dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICAKICAgICBjb21waWxl
U3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2spOwogICAgIAotICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKAorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgZXhpdC5j
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQu
bV9jb2RlLmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBleGl0Lm1fY29kZS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxODkyNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZTo6fkFjY2Vzc29yQ2FsCiB7CiB9CiAKLWJvb2wgQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmU6OnZpc2l0V2VhayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCiti
b29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoVk0mIHZtKQogewotICAg
IG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0sIHJlcGF0Y2hCdWZmZXIpOworICAgIG1fY2Fs
bExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lKCk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZm
ZXImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZNJikgb3ZlcnJpZGU7
CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTg5MjY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgot
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCkBAIC01NCwy
MiArNTMsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZv
aWQgY3RpUGF0Y2hOZWFyQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDb2RlQmxvY2sqIGNvZGVibG9jaywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbmV3
Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQog
ewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBuZXdD
YWxsZWVGdW5jdGlvbik7Ci19Ci0KLXZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENv
ZGVCbG9jayogY29kZWJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLXZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2NrLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9u
KQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBuZXdDYWxs
ZWVGdW5jdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKAorICAgICAgICBD
b2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksCisg
ICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAogSklUOjpKSVQoVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTg5
MjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDEwICsxODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm87CiAgICAgfTsKIAotICAgIC8vIE5lYXIgY2FsbHMgY2FuIG9ubHkgYmUg
cGF0Y2hlZCB0byBvdGhlciBKSVQgY29kZSwgcmVndWxhciBjYWxscyBjYW4gYmUgcGF0Y2hlZCB0
byBKSVQgY29kZSBvciByZWxpbmtlZCB0byBzdHViIGZ1bmN0aW9ucy4KLSAgICB2b2lkIGN0aVBh
dGNoTmVhckNhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG5ld0NhbGxlZUZ1
bmN0aW9uKTsKLSAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDb2RlQmxvY2sq
IGNvZGVibG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pOwotICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKKyAgICB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxODkyNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZm
ZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgi
CiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg5MjY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NiBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgot
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKQEAg
LTEwODUsOSArMTA4NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXIKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwogICAg
IAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFi
ZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihv
cGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDYgQEAKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlByb3Bl
cnR5TmFtZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0
aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCkBAIC02NDYsNyArNjQ1LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aQogICAgIGlmICh0cnlQdXRC
eVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAgICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRV
Uk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKICAg
ICB9CiAgICAgcHV0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZh
bEluZm8pOwogfQpAQCAtNzI4LDcgKzcyNyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25EaXJlY3RQdXRCeVYKICAgICBpZiAodHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShleGVjLCBv
YmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUykpID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7CiAgICAgICAgIC8vIERv
bid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhleGVjLT5jb2Rl
QmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0
cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKSk7CiAgICAgfQogCiAgICAg
ZGlyZWN0UHV0QnlWYWwoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8p
OwpAQCAtMTU5Myw3ICsxNTkyLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRl
KiBleGVjLAogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAg
ICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIGlmIChhc1N0cmlu
ZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0
aW9uR2V0QnlWYWxTdHJpbmcpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
eVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKQEAgLTE3MTYsNyArMTcx
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBpZiAo
dHJ5R2V0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAg
ICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoZXhl
Yy0+Y29kZUJsb2NrKCksIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSk7CkBAIC0xNzU2LDcgKzE3NTUsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhCiAgICAgICAgIGlmICgr
K2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMAogICAgICAgICAgICAgfHwgb2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgZXZl
ciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOworICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
R2VuZXJpYykpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODA1LDcgKzE4MDQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgICAgICByZXN1bHQg
PSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNv
ZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9u
UHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMgOiBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CisgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIoYnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJp
YyA6IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNs
dWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUg
IlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAi
SlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlJl
c3VsdFR5cGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHMuaCIKQEAgLTEwNzksOSArMTA3OCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAogICAg
ICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7
CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFk
ZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7CiB9CiAKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKQEAgLTExMTEsOSArMTEwOSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfdmFsIHdpdGgg
Y2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwg
cHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKICAgICBieVZhbEluZm8tPnN0dWJJ
bmZvID0gZ2VuLnN0dWJJbmZvKCk7CiAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
bV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+bm90SW5k
ZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFs
R2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQpAQCAtMTE3OSw5ICsxMTc2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LAogICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKTsKICAgICB9Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5
cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEyMDgsOSArMTIwNCw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlf
dmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5
TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEo
KSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CiAgICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdl
bi5zdHViSW5mbygpOwogCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPm5vdEluZGV4SnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwo
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihy
ZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKHB1dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAJ
KHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJv
dXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBKSVRTdHViUm91dGluZTo6fkpJVFN0dWJSb3V0aW5lKCkgeyB9CiAKLWJvb2wgSklUU3R1
YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKQorYm9vbCBKSVRTdHViUm91
dGluZTo6dmlzaXRXZWFrKFZNJikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE4OTI3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5
b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVyLiBSZXR1cm4gZmFsc2UgaWYgeW91IGFyZSBub3cgaW52
YWxpZC4gSWYgeW91IHJldHVybgogICAgIC8vIGZhbHNlLCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBk
byBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0aGUgaWRlYSBpcyB0aGF0IHlvdSB3aWxsIHNpbXBseSBi
ZQogICAgIC8vIGRlc3Ryb3llZC4KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZNJiwgUmVw
YXRjaEJ1ZmZlciYpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFdlYWsoVk0mKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEz
ICs0MSwxMyBAQCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kCiAgICAg
ICAgIHJlbW92ZSgpOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbE5vZGU6OnVubGluayhWTSYg
dm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit2b2lkIFBvbHltb3JwaGljQ2FsbE5v
ZGU6OnVubGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJbmZvKSB7CiAgICAgICAg
IGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIlVu
bGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24oKSwgIiwgIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKSwgIlxuIik7CiAK
LSAgICAgICAgbV9jYWxsTGlua0luZm8tPnVubGluayh2bSwgcmVwYXRjaEJ1ZmZlcik7CisgICAg
ICAgIG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIAogICAgIGlmIChpc09uTGlz
dCgpKQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6
OmNsZWFyQ2EKICAgICB9CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZp
c2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKQorYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZTo6dmlzaXRXZWFrKFZNJikKIHsKICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKSB7CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodmFyaWFudC5nZXQoKSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDcgQEAgcHVibGljOgogICAgIAogICAgIH5Qb2x5bW9ycGhpY0NhbGxOb2RlKCk7CiAgICAg
Ci0gICAgdm9pZCB1bmxpbmsoVk0mLCBSZXBhdGNoQnVmZmVyJik7CisgICAgdm9pZCB1bmxpbmso
Vk0mKTsKIAogICAgIGJvb2wgaGFzQ2FsbExpbmtJbmZvKENhbGxMaW5rSW5mbyogaW5mbykgeyBy
ZXR1cm4gbV9jYWxsTGlua0luZm8gPT0gaW5mbzsgfQogICAgIHZvaWQgY2xlYXJDYWxsTGlua0lu
Zm8oKTsKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckNhbGxOb2Rl
c0ZvcihDYWxsTGlua0luZm8qKTsKICAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYsIFJlcGF0
Y2hCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIG92ZXJyaWRlOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKLSNpbmNsdWRlICJSZXBhdGNo
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCIKQEAgLTc1LDcgKzc0LDcgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENv
ZGVCbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9j
YXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQorc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgewpAQCAt
OTEsMTMgKzkwLDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoUmVwYXRjaEJ1ZmZlciYgcgog
I2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwg
bmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxs
ZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIGNhbGwsIG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3
Q2FsbGVlRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
CkBAIC0xMDgsMjYgKzEwMSwzMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
CiAgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAg
ICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUs
IHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAgCi0gICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0KICAgICAvLyBPbmx5IG9wdGltaXplIG9u
Y2UhCi0gICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsK
IAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBs
b2FkLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hl
Y2tJbW1Ub0NhbGwpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKSk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVs
dGFDaGVja0ltbVRvQ2FsbCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxpbnQzMl90PihzdHJ1Y3R1
cmUtPmlkKCkpKTsKKyAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgY29udmVydGlibGVM
b2FkID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQpOworICAgIGlmIChpc091dE9m
TGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhM
b2FkKGNvbnZlcnRpYmxlTG9hZCk7CisgICAgZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oY29udmVydGlibGVMb2FkKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1Bh
dGNoZWRTdG9yYWdlKG9mZnNldCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENv
bXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShvZmZzZXQpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGNv
bXBhY3QpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZz
ZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdl
KG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xNjEsMTggKzE1OCwxOCBA
QCBzdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uCiAgICAgfQogfQogCi1z
dGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
dGFyZ2V0KQorc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKIHsKICAgICBpZiAo
TWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2go
KSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgICAg
IFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVz
cygKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJl
c3MoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCkpLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFy
Z2V0KSk7CkBAIC02ODEsOSArNjc4LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnlJRAogICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgICAgICAgICByZXBs
YWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIAogICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtNzE0LDkgKzcxMCw4IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4
ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgcmVwbGFjZVdpdGhK
dW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAg
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25HZXRCeUlkKTsKIAogICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAg
IH0KQEAgLTc2MSwxNiArNzU2LDE1IEBAIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1YKIHN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0
dWJSb3V0aW5lKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2dldF9ieV9pZF9saXN0KTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKICAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxm
UGF0Y2hpbmcoKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBy
ZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKKyAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQpAQCAtMTI1NywxMyArMTI1MSwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CiAgICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1Yihl
eGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCiAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAg
ICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHVi
SW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwdXRLaW5kID09IERp
cmVjdCk7CiAgICAgICAgICAgICAKQEAgLTEzMjAsOSArMTMxMyw4IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNl
dHRlciwKICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNl
dHRlcigpLCBzdHViUm91dGluZSkpOwogCi0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1bGwoKSk7CiAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQpAQCAtMTM5MywxMCArMTM4NSw5IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CiAgICAgICAgIH0KLSAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwocmVw
YXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIAogICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KQEAgLTE0NDIsMTAgKzE0MzMsOSBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNj
ZXNzOjpDdXN0b21TZXR0ZXIsCiAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
c2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKIAotICAgICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwog
ICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBh
dGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogCiAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQpAQCAtMTU3Myw4ICsxNTYzLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKICAgICBzdHViSW5mby51Lmlu
TGlzdC5saXN0U2l6ZSsrOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBsaXN0SW5kZXgg
PCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBH
aXZlVXBPbkNhY2hlOwogfQpAQCAtMTU4NywyNCArMTU3NiwyMCBAQCB2b2lkIHJlcGF0Y2hJbigK
ICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcigK
LSAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSosIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKK3N0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFZNKiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjb2RlUmVmKQogewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBj
YWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIGNvZGVSZWYuY29kZSgpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bigpLCBjb2RlUmVmLmNvZGUoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKAotICAg
IFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK3N0YXRpYyB2b2lkIGxpbmtTbG93
Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJ
bmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2Fs
bExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpKTsKIH0KIAotc3RhdGljIHZvaWQg
bGlua1Nsb3dGb3IoCi0gICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAg
ICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1
bmspOworICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAg
ICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxU
aHVuaywgKnZtLCBudWxscHRyLCB0cnVlKSk7CiB9CiAKQEAgLTE2MTgsMjYgKzE2MDMsMjMgQEAg
dm9pZCBsaW5rRm9yKAogCiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAg
IAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAg
IAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgIGNhbGxMaW5rSW5m
by5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBh
dGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwog
ICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZShleGVjLT5jYWxsZXJGcmFtZSgpLT52
bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgIGlm
IChzaG91bGRTaG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0
YUxvZygiTGlua2luZyBjYWxsIGluICIsICpjYWxsZXJDb2RlQmxvY2ssICIgYXQgIiwgY2FsbExp
bmtJbmZvLmNvZGVPcmlnaW4oKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2sp
LCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgY29kZVB0cik7CisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgY29kZVB0
cik7CiAgICAgCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8p
OwogICAgIAogICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNhbGwpIHsKLSAgICAgICAgbGlua1Nsb3dGb3IoCi0gICAgICAgICAgICByZXBhdGNoQnVm
ZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFT
U0VSVChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVj
dCk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbyk7Cisg
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKIHZvaWQgbGlua1Nsb3dGb3Io
CkBAIC0xNjQ2LDE4ICsxNjI4LDE1IEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAg
ICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Io
cmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNh
bGxMaW5rSW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJldmVydENhbGwoCi0gICAgUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYpCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZN
KiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlUmVmKQogewotICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJX
aXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCisgICAgTWFj
cm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0
ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwot
ICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYp
OworICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwogICAgIGNhbGxM
aW5rSW5mby5jbGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsKICAg
ICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CkBAIC0xNjY2LDEzICsxNjQ1LDEyIEBAIHN0YXRp
YyB2b2lkIHJldmVydENhbGwoCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAot
dm9pZCB1bmxpbmtGb3IoCi0gICAgVk0mIHZtLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3Nl
bWJseSgpKQogICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBmcm9tICIsIGNhbGxMaW5r
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgIlxuIik7CiAgICAgCi0gICAgcmV2ZXJ0Q2FsbChy
ZXBhdGNoQnVmZmVyLCAmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKSk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSk7CiB9CiAKIHZvaWQgbGlua1ZpcnR1YWxG
b3IoCkBAIC0xNjg0LDkgKzE2NjIsOCBAQCB2b2lkIGxpbmtWaXJ0dWFsRm9yKAogICAgIGlmIChz
aG91bGRTaG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxv
ZygiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBleGVj
LT5jYWxsZXJGcmFtZSgpLT5jb2RlT3JpZ2luKCksICJcbiIpOwogICAgIAotICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7
Ci0gICAgcmV2ZXJ0Q2FsbChyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFs
VGh1bmspOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsK
ICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVh
bFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIApAQCAtMTkxNiwxNSArMTg5MywxMyBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBj
YWxsQ2FzZXMsCiAgICAgICAgIFdURjo6bW92ZShmYXN0Q291bnRzKSkpOwogICAgIAotICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHJl
cGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFy
dE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2lu
KCkpLAorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0lu
Zm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5y
ZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJp
dHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRo
ZSBzbG93IHBhdGgKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJ
bmZvKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKICAgICAKICAgICAvLyBJ
ZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBk
aWUgYXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBs
b25nZXIgb24gc3RhY2suCkBAIC0xOTM2LDI5ICsxOTExLDI5IEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbCgKICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lkIHJlc2V0
R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldEdldEJ5SUQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICByZXBh
dGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpj
YW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAogICAgICAgICAgICAgICAgIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih1bnVzZWRQb2ludGVyKSk7CiAgICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0
PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0xvYWRPclN0b3JlKSwgMCk7CiAjZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
VGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwogI2VuZGlmCi0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQordm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJ
IHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpK
ST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1p
emVkRnVuY3Rpb247CkBAIC0xOTcyLDI5ICsxOTQ3LDI5IEBAIHZvaWQgcmVzZXRQdXRCeUlEKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2gKICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwogICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKICAgICB9Ci0gICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVu
Y3Rpb24pOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAogICAgICAgICAgICAgICAg
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CiAgICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19j
YXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlKSwgMCk7CiAjZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSksIDApOwogI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi12b2lk
IHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldEluKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJl
dmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMTIgQEAgdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdQogdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29u
c3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVj
dHVyZVN0dWJJbmZvJik7CiB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwg
Q29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwog
dm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5r
Rm9yKFZNJiwgUmVwYXRjaEJ1ZmZlciYsIENhbGxMaW5rSW5mbyYpOwordm9pZCB1bmxpbmtGb3Io
Vk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExp
bmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0UHV0QnlJRChSZXBh
dGNoQnVmZmVyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJ
bihSZXBhdGNoQnVmZmVyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQg
cmVzZXRHZXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0
UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldEluKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260519</attachid>
            <date>2015-09-03 13:57:57 -0700</date>
            <delta_ts>2015-09-03 13:59:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>89762</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5Mjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBA
QAorMjAxNS0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgUmVwYXRjaEJ1ZmZlciBhbmQgcmVwbGFjZSBpdCB3aXRoIHN0YXRpYyBmdW5j
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGF0Y2hCdWZmZXIgaXMgYW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBzdGF0ZS4gQWxs
IG9mIGl0cyBpbnN0YW5jZSBtZXRob2RzIGFyZQorICAgICAgICBqdXN0IHdyYXBwZXJzIGZvciBt
ZXRob2RzIG9uIE1hY3JvQXNzZW1ibGVyLiBTbywgd2Ugc2hvdWxkIG1ha2UgdGhvc2UgTWFjcm9B
c3NlbWJsZXIKKyAgICAgICAgbWV0aG9kcyBwdWJsaWMgYW5kIGNhbGwgdGhlbSBkaXJlY3RseS4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXApOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsaW5rUG9pbnRlcik6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtlckFkZHJlc3MpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJDYWxsUmV0dXJuT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXApOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwpOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVhZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aExvYWQpOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbik6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1ha2VC
cmFuY2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpsaW5rQ2FsbCk6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bGlua0NhbGwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojp0cnVzdGVkSW1tMzJGcm9tUHRyKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODY6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwYXRjaENh
bGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6bGlua0NhbGwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0
Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bGlua0NhbGwpOgorICAgICAgICAq
IGFzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclN0dWIp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8u
aDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmlzTGlua2VkKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNv
ZGVPcmlnaW4pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlc2V0U3R1Yik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHVi
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc2V0U3R1YkR1cmluZ0dDSW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpmcm9t
U3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWspOgor
ICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZEFjY2Vzczo6ZG9lc0NhbGxzKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFr
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5
SWRBY2Nlc3M6OmN1c3RvbVNldHRlcik6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmtpbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpzZWVuT25jZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVE
YXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGppdC9BY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBqaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklU
OjpKSVQpOgorICAgICAgICAoSlNDOjpjdGlQYXRjaE5lYXJDYWxsQnlSZXR1cm5BZGRyZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJSb3V0aW5l
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5KSVRTdHViUm91dGluZSk6Cisg
ICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjp2aXNpdFdlYWspOgorICAgICAgICAqIGppdC9K
SVRTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0Nh
bGxOb2RlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OmNsZWFyQ2FsbE5vZGVzRm9y
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6
CisgICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljQ2FsbE5vZGU6Omhhc0NhbGxMaW5rSW5mbyk6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChK
U0M6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToK
KyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOgorICAgICAgICAo
SlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnBhdGNoSnVtcFRv
R2V0QnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlk
TGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zv
cik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5
bW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAgICAoSlND
OjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldEluKToKKyAgICAgICAgKiBqaXQv
UmVwYXRjaC5oOgorCiAyMDE1LTA5LTAzICBTdWtvbHNhayBTYWtzaHV3b25nICA8c3Vrb2xzYWtA
Z21haWwuY29tPgogCiAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgV2ViQXNzZW1i
bHkgZnVuY3Rpb24gY29tcGlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgogPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1h
cy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgog
ICAgIDxGaWx0ZXIgSW5jbHVkZT0iYXNzZW1ibGVyIj4KQEAgLTE5OTgsOSArMTk5OCw2IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCI+CiAgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXFJlcGF0Y2hCdWZm
ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXFg4NkFzc2VtYmxlci5oIj4K
ICAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00
NjYxLDQgKzQ2NTgsNCBAQAogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+
CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
KzwvUHJvamVjdD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
ODkyNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTExMSw3ICsxMTExLDYgQEAKIAkJ
ODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBv
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNC
MkMxMTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEM0Iy
QzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMjEwMTU2QkRFMDAyODY1RTcg
LyogTWFjcm9Bc3NlbWJsZXJBUk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk4NkQzQjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IzQzEx
MDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVw
YXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkRCNjQ2NDBGOTVDNkZD
MDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2REI2NDYzMEY5NUM2RkMwMEQ3
RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovOyB9OwogCQk4NkUx
MTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA2MTY3QkFCODcwMDZE
NzYwQSAvKiBKU1ZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwpAQCAtMjk1NSw3ICsyOTU0LDYgQEAKIAkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3
IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjJDMjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9B
c3NlbWJsZXJBUk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3Nl
bWJsZXJBUk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IzQzExMDE1OUQ3
RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGlua0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkQzQjNDMjEw
MTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBhdGNoQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRvckZpeGVkVk1Qb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZF
MTE2QjAwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTQ4MSw3ICs1NDc5LDYgQEAKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBF
RUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKIAkJCQk4NkM1NjhERjEx
QTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oICovLAotCQkJCTg2RDNCM0MyMTAxNTlE
N0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi8sCiAJCQkJODZBRTY0QTcxMzVFNUUxQzAw
OTYzMDEyIC8qIFNINEFzc2VtYmxlci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5
RiAvKiBYODZBc3NlbWJsZXIuaCAqLywKIAkJCSk7CkBAIC02NzI0LDcgKzY3MjEsNiBAQAogCQkJ
CUE1QkExNUVCMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29u
bmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRF
NTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkQz
QjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEODg2MEVEMjFDM0QwMEI4OTYxOSAvKiBTYW1wbGluZ1Rvb2wu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4OTI2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MzUsNiArOTM1LDY2IEBAIHB1YmxpYzoKIAogICAgIEFz
c2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CiAgICAgCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAo
dm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCisgICAgewor
ICAgICAgICBBc3NlbWJsZXJUeXBlOjpsaW5rSnVtcChjb2RlLCBqdW1wLm1fbGFiZWwsIHRhcmdl
dC5kYXRhTG9jYXRpb24oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIo
dm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3Nl
bWJsZXJMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpn
ZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGxhYmVsKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgZ2V0TGlua2VyQ2FsbFJldHVybk9mZnNldChDYWxsIGNhbGwpCisgICAgeworICAgICAg
ICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Z2V0Q2FsbFJldHVybk9mZnNldChjYWxsLm1fbGFiZWwp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wKENvZGVMb2NhdGlvbkp1bXAg
anVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBc3Nl
bWJsZXJUeXBlOjpyZWxpbmtKdW1wKGp1bXAuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRh
dGFMb2NhdGlvbigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTmVhckNhbGwo
Q29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5k
YXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29t
cGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXNz
ZW1ibGVyVHlwZTo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVsQ29tcGFjdC5kYXRhTG9jYXRpb24o
KSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzIsIGludDMyX3QgdmFsdWUpCisgICAgewor
ICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIuZGF0YUxvY2F0
aW9uKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcihD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFMYWJlbFB0ci5kYXRh
TG9jYXRpb24oKSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCogcmVhZFBv
aW50ZXIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0cikKKyAgICB7CisgICAg
ICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpyZWFkUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxv
Y2F0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aExvYWQo
Q29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQorICAgIHsKKyAgICAgICAgQXNzZW1i
bGVyVHlwZTo6cmVwbGFjZVdpdGhMb2FkKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxv
Y2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwuZGF0YUxvY2F0aW9uKCkpOwor
ICAgIH0KKwogcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIoKQogICAgICAg
ICA6IG1fcmFuZG9tU291cmNlKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpCkBAIC0x
MDMxLDY3ICsxMDkxLDYgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1fdGVtcFJlZ2lzdGVy
c1ZhbGlkQml0czsKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwotICAgIGZyaWVuZCBj
bGFzcyBSZXBhdGNoQnVmZmVyOwotCi0gICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29k
ZSwgSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCi0gICAgewotICAgICAgICBB
c3NlbWJsZXJUeXBlOjpsaW5rSnVtcChjb2RlLCBqdW1wLm1fbGFiZWwsIHRhcmdldC5kYXRhTG9j
YXRpb24oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29k
ZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIHZvaWQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgQXNz
ZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJl
bCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0
ZWRBZGRyZXNzKGNvZGUsIGxhYmVsKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgZ2V0
TGlua2VyQ2FsbFJldHVybk9mZnNldChDYWxsIGNhbGwpCi0gICAgewotICAgICAgICByZXR1cm4g
QXNzZW1ibGVyVHlwZTo6Z2V0Q2FsbFJldHVybk9mZnNldChjYWxsLm1fbGFiZWwpOwotICAgIH0K
LQotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wKENvZGVMb2NhdGlvbkp1bXAganVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBBc3NlbWJsZXJUeXBl
OjpyZWxpbmtKdW1wKGp1bXAuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlv
bigpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoTmVhckNhbGwoQ29kZUxvY2F0
aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAg
IHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRp
b24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENvbXBhY3QoQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCBkYXRh
TGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVwYXRjaENvbXBhY3QoZGF0YUxhYmVsQ29tcGFjdC5kYXRhTG9jYXRpb24oKSwgdmFsdWUp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIoQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIgZGF0YUxhYmVsMzIsIGludDMyX3QgdmFsdWUpCi0gICAgewotICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIuZGF0YUxvY2F0aW9uKCksIHZh
bHVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcihDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFMYWJlbFB0ci5kYXRhTG9jYXRpb24o
KSwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIoQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0cikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBBc3NlbWJsZXJUeXBlOjpyZWFkUG9pbnRlcihkYXRhTGFiZWxQdHIuZGF0YUxvY2F0aW9uKCkp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aExvYWQoQ29kZUxvY2F0
aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQotICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6
cmVwbGFjZVdpdGhMb2FkKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKLSAgICB9Ci0gICAgCi0gICAg
c3RhdGljIHZvaWQgcmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkIGxhYmVsKQotICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVwbGFj
ZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwuZGF0YUxvY2F0aW9uKCkpOwotICAgIH0KIAog
cHJpdmF0ZToKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTA2LDYgKzI1MDYsMTYgQEAgcHVibGljOgogICAgICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsK
KyAgICAgICAgQVJNNjRBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5h
dGlvbikKKyAgICB7CisgICAgICAgIEFSTTY0QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxs
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIEFMV0FZU19JTkxJTkUgSnVtcCBtYWtlQnJhbmNoKEFSTTY0QXNzZW1i
bGVyOjpDb25kaXRpb24gY29uZCkKICAgICB7CkBAIC0yODc4LDE2ICsyODg4LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEFSTTY0QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1f
bGFiZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLCBmdW5j
dGlvbi52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAgIHsK
LSAgICAgICAgQVJNNjRBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5h
dGlvbikKLSAgICB7Ci0gICAgICAgIEFSTTY0QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxs
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQog
ICAgIENhY2hlZFRlbXBSZWdpc3RlciBtX2RhdGFNZW1vcnlUZW1wUmVnaXN0ZXI7CiAgICAgQ2Fj
aGVkVGVtcFJlZ2lzdGVyIG1fY2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVyOwogICAgIGJvb2wgbV9t
YWtlSnVtcFBhdGNoYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAxODkyNjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkwMSw2ICsxOTAxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikK
KyAgICB7CisgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChj
YWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICB9CisKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKICAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rp
b24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7CiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCkBAIC0yMDA1LDE2ICsyMDE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVJNdjdB
c3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIEFSTXY3
QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCi0gICAgewot
ICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBk
ZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9Ci0KICNpZiBFTkFCTEUoTUFT
TV9QUk9CRSkKICAgICBpbmxpbmUgVHJ1c3RlZEltbTMyIHRydXN0ZWRJbW0zMkZyb21QdHIodm9p
ZCogcHRyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQ1LDE1ICszNDUsNiBAQCBwdWJsaWM6CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2
ZXJ0SnVtcFRvX2NtcGxfaW1fZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRy
ZXNzKCksIGluaXRpYWxWYWx1ZSwgMCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hC
dWZmZXI7Ci0KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5r
Q2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOwotICAgIH0KLQogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlbGlu
a0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CkBAIC0zNjMsNiArMzU0LDE1IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBYODZBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiAgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5r
QnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAgc3RhdGljIHZv
aWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikK
KyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtODU0
LDYgKzg1NCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRv
X21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSksIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAg
fQogCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBD
b2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFg4NkFzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZT
RVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgWDg2QXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENI
X09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZl
cjsKICAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKQEAgLTg2NSwxNiArODc1LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgZWxzZQogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rQ2Fs
bChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOwogICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9u
TGFiZWwgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjEx
KS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBG
dW5jdGlvblB0ciBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIFg4NkFzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FM
TF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
LSAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZpc2lvbiAxODkyNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFJlcGF0Y2hCdWZmZXJfaAotI2RlZmluZSBS
ZXBhdGNoQnVmZmVyX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2su
aCIKLSNpbmNsdWRlIDxNYWNyb0Fzc2VtYmxlci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gUmVwYXRjaEJ1ZmZlcjoKLS8vCi0vLyBUaGlz
IGNsYXNzIGlzIHVzZWQgdG8gbW9kaWZ5IGNvZGUgYWZ0ZXIgY29kZSBnZW5lcmF0aW9uIGhhcyBi
ZWVuIGNvbXBsZXRlZCwKLS8vIGFuZCBhZnRlciB0aGUgY29kZSBoYXMgcG90ZW50aWFsbHkgYWxy
ZWFkeSBiZWVuIGV4ZWN1dGVkLiAgVGhpcyBtZWNoYW5pc20gaXMKLS8vIHVzZWQgdG8gYXBwbHkg
b3B0aW1pemF0aW9ucyB0byB0aGUgY29kZS4KLS8vCi1jbGFzcyBSZXBhdGNoQnVmZmVyIHsKLSAg
ICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwotCi1wdWJsaWM6Ci0gICAg
UmVwYXRjaEJ1ZmZlcihDb2RlQmxvY2sqKQotICAgIHsKLSAgICB9Ci0KLSAgICB+UmVwYXRjaEJ1
ZmZlcigpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25K
dW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGp1bXAsIGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
IGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KGNhbGwsIGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRp
b25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2FsbCwgQ29kZVB0ciBkZXN0
aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
bmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKGRlc3RpbmF0aW9uKSk7Ci0gICAgfQotCi0gICAg
dm9pZCByZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChuZWFyQ2FsbCwgZGVzdGluYXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgcmVwYXRj
aChDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBkYXRhTGFiZWwzMiwgaW50MzJfdCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIsIHZh
bHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlcGF0Y2goQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29t
cGFjdCBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QsIHZhbHVlKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJlcGF0Y2goQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJl
bFB0ciwgdm9pZCogdmFsdWUpCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoZGF0YUxhYmVsUHRyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZWxpbmtD
YWxsZXJUb1RyYW1wb2xpbmUoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDb2RlTG9j
YXRpb25MYWJlbCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIHJlbGluayhDb2RlTG9jYXRpb25DYWxs
KENvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBsYWJlbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
cmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Q29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJlbGlua0NhbGxlclRv
VHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChuZXdDYWxsZWVGdW5j
dGlvbikpOwotICAgIH0KLQotICAgIHZvaWQgcmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQotICAgIHsKLSAg
ICAgICAgcmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIGZ1
bmN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZWxpbmtOZWFyQ2FsbGVyVG9UcmFtcG9s
aW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwgbGFi
ZWwpCi0gICAgewotICAgICAgICByZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoQ29kZVB0cihy
ZXR1cm5BZGRyZXNzKSksIGxhYmVsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZWxpbmtOZWFy
Q2FsbGVyVG9UcmFtcG9saW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0
ciBuZXdDYWxsZWVGdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJlbGlua05lYXJDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwobmV3Q2FsbGVlRnVuY3Rp
b24pKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZXBsYWNlV2l0aExvYWQoQ29kZUxvY2F0aW9u
Q29udmVydGlibGVMb2FkIGxhYmVsKQotICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGxhY2VXaXRoTG9hZChsYWJlbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVwbGFjZVdpdGhB
ZGRyZXNzQ29tcHV0YXRpb24oQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkIGxhYmVsKQotICAg
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9u
KGxhYmVsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2
ZShDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQgbGFiZWwsIGJvb2wgaXNBY3RpdmUpCi0gICAg
ewotICAgICAgICBpZiAoaXNBY3RpdmUpCi0gICAgICAgICAgICByZXBsYWNlV2l0aExvYWQobGFi
ZWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRh
dGlvbihsYWJlbCk7Ci0gICAgfQotCi0gICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0
T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBs
YWJlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIobGFiZWwpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
Q29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRk
cmVzcyhDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCi0gICAgewotICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFk
ZHJlc3MobGFiZWwpOwotICAgIH0KLQotICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFy
dE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIgbGFiZWwpCi0gICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhsYWJlbCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9u
U3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LCBkZXN0aW5hdGlv
bik7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgaXMgYSAqYml0KiBvZiBhIHNpbGx5IEFQSSwg
c2luY2Ugd2UgY3VycmVudGx5IGFsd2F5cyBhbHNvIHJlcGF0Y2ggdGhlCi0gICAgLy8gaW1tZWRp
YXRlIGFmdGVyIGNhbGxpbmcgdGhpcy4gQnV0IEknbSBmaW5lIHdpdGggdGhhdCwgc2luY2UgdGhp
cyBqdXN0IGZlZWxzCi0gICAgLy8gbGVzcyB5dWNreS4KLSAgICB2b2lkIHJldmVydEp1bXBSZXBs
YWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9u
U3RhcnQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZywgdm9pZCogdmFsdWUpCi0gICAg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQ
dHJXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25TdGFydCwgcmVnLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAg
dm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhZGRyZXNzLCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChpbnN0cnVj
dGlvblN0YXJ0LCBhZGRyZXNzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVs
IGluc3RydWN0aW9uU3RhcnQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MsIGludDMy
X3QgdmFsdWUpCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaChpbnN0cnVjdGlvblN0YXJ0LCBhZGRy
ZXNzLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoQVNTRU1CTEVSKQotCi0jZW5kaWYgLy8gUmVwYXRjaEJ1ZmZlcl9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJERkdU
aHVua3MuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgot
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNDYsNyArNDUsNyBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6Y2xlYXJTdHViKCkKICAgICBtX3N0dWIgPSBudWxscHRyOwogfQogCi12b2lk
IENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
cikKK3ZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogewogICAgIGlmICghaXNMaW5r
ZWQoKSkgewogICAgICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQgZXZlbiBpZiB3ZSdyZSBub3Qg
bGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBob3cgcG9seW1vcnBoaWMgY2FsbHMKQEAgLTU1LDE0
ICs1NCwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgdW5saW5rRm9yKHZtLCByZXBhdGNoQnVmZmVy
LCAqdGhpcyk7CisgICAgdW5saW5rRm9yKHZtLCAqdGhpcyk7CiAKICAgICAvLyBJdCB3aWxsIGJl
IG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhhcyBhIGNvZGUgYmxvY2suCiAgICAgaWYgKGlzT25M
aXN0KCkpCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRX
ZWFrKFZNJiB2bSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3ZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUg
PSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewogICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
Y2FsbGVlLT5leGVjdXRhYmxlKCkpKQpAQCAtNzMsMTQgKzcyLDE0IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtLCBSZXAKICAgICAKICAgICBpZiAoaXNMaW5rZWQoKSkgewog
ICAgICAgICBpZiAoc3R1YigpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFr
KHZtLCByZXBhdGNoQnVmZmVyKSkgeworICAgICAgICAgICAgaWYgKCFzdHViKCktPnZpc2l0V2Vh
ayh2bSkpIHsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xl
YXJpbmcgY2xvc3VyZSBjYWxsIHRvICIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0RHVt
cChzdHViKCktPnZhcmlhbnRzKCkpLCAiLCBzdHViIHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHVi
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIi5cbiIpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB1bmxpbmsodm0sIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAg
ICAgIHVubGluayh2bSk7CiAgICAgICAgICAgICAgICAgbV9jbGVhcmVkQnlHQyA9IHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIUhlYXA6OmlzTWFya2VkKG1fY2FsbGVl
LmdldCgpKSkgewpAQCAtOTIsNyArOTEsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KFZNJiB2bSwgUmVwCiAgICAgICAgICAgICAgICAgICAgICIpLlxuIik7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBoYW5kbGVTcGVjaWZpY0NhbGxlZShtX2NhbGxlZS5nZXQoKSk7Ci0gICAg
ICAgICAgICB1bmxpbmsodm0sIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgdW5saW5rKHZt
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoaGF2ZUxhc3RTZWVuQ2FsbGVlKCkgJiYgIUhl
YXA6OmlzTWFya2VkKGxhc3RTZWVuQ2FsbGVlKCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDggKzM5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQog
Ci1jbGFzcyBSZXBhdGNoQnVmZmVyOwotCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6CiAgICAgZW51bSBDYWxs
VHlwZSB7IE5vbmUsIENhbGwsIENhbGxWYXJhcmdzLCBDb25zdHJ1Y3QsIENvbnN0cnVjdFZhcmFy
Z3MgfTsKQEAgLTkwLDcgKzg4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNMaW5r
ZWQoKSB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWU7IH0KLSAgICB2b2lkIHVubGluayhWTSYs
IFJlcGF0Y2hCdWZmZXImKTsKKyAgICB2b2lkIHVubGluayhWTSYpOwogCiAgICAgdm9pZCBzZXRV
cENhbGwoQ2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQg
Y2FsbGVlR1BSKQogICAgIHsKQEAgLTI3OCw3ICsyNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2NvZGVPcmlnaW47CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdFdlYWsoVk0mLCBSZXBh
dGNoQnVmZmVyJik7CisgICAgdm9pZCB2aXNpdFdlYWsoVk0mKTsKIAogcHJpdmF0ZToKICAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBtX2NhbGxSZXR1cm5Mb2NhdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODkyNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgotI2lu
Y2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5o
IgpAQCAtMjY4NCwxOCArMjY4MywxNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBIYW5kbGUgaW5saW5lIGNhY2hlcy4K
ICAgICBpZiAoISFqaXRDb2RlKCkpIHsKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKHRoaXMpOwotICAgICAgICAKICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0lu
Zm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLT52aXNpdFdl
YWsoKnZtKCksIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFr
KCp2bSgpKTsKIAogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcygqdm0oKSwgcmVwYXRj
aEJ1ZmZlcikpCisgICAgICAgICAgICBpZiAoc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcygq
dm0oKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwor
ICAgICAgICAgICAgcmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChzdHViSW5mbyk7CiAgICAgICAg
IH0KICAgICB9CiAjZW5kaWYKQEAgLTI3ODIsMTEgKzI3NzksMTAgQEAgdm9pZCBDb2RlQmxvY2s6
OnJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSQogICAgIAogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRo
aXMpOwotICAgIHJlc2V0U3R1YkludGVybmFsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAg
ICByZXNldFN0dWJJbnRlcm5hbChzdHViSW5mbyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpyZXNl
dFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogICAgIApAQCAtMjc5
OSwyMCArMjc5NSwyMCBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRj
CiAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CiAgICAgCiAg
ICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKLSAgICAgICAgcmVzZXRHZXRCeUlE
KHJlcGF0Y2hCdWZmZXIsIHRoaXMsIHN0dWJJbmZvKTsKKyAgICAgICAgcmVzZXRHZXRCeUlEKHRo
aXMsIHN0dWJJbmZvKTsKICAgICBlbHNlIGlmIChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkp
Ci0gICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCB0aGlzLCBzdHViSW5mbyk7Cisg
ICAgICAgIHJlc2V0UHV0QnlJRCh0aGlzLCBzdHViSW5mbyk7CiAgICAgZWxzZSB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOwotICAgICAgICByZXNldElu
KHJlcGF0Y2hCdWZmZXIsIHRoaXMsIHN0dWJJbmZvKTsKKyAgICAgICAgcmVzZXRJbih0aGlzLCBz
dHViSW5mbyk7CiAgICAgfQogICAgIAogICAgIHN0dWJJbmZvLnJlc2V0KCk7CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpyZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQ29kZUJsb2NrOjpy
ZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsK
LSAgICByZXNldFN0dWJJbnRlcm5hbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgcmVz
ZXRTdHViSW50ZXJuYWwoc3R1YkluZm8pOwogICAgIHN0dWJJbmZvLnJlc2V0QnlHQyA9IHRydWU7
CiB9CiAKQEAgLTMwMzQsMTEgKzMwMzAsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29t
aW5nQ2FsbHMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKG1faW5jb21pbmdDYWxscy5pc0Vt
cHR5KCkgJiYgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOwogICAgIHdoaWxl
IChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAg
ICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCksIHJlcGF0Y2hCdWZmZXIp
OworICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKICAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKCp2bSgpLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgbV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxODkyNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
LWNsYXNzIFJlcGF0Y2hCdWZmZXI7CiBjbGFzcyBUeXBlTG9jYXRpb247CiAKIGVudW0gUmVvcHRp
bWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRp
b24gfTsKQEAgLTk4Miw4ICs5ODEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5zZXJ0QmFzaWNC
bG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFZlY3RvcjxJbnN0cnVjdGlvbiwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Jik7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQg
cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgdm9pZCByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOworICAgIHZvaWQgcmVzZXRTdHViSW50ZXJuYWwoU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKyAgICB2b2lkIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoU3RydWN0dXJlU3R1Yklu
Zm8mKTsKICNlbmRpZgogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxp
bmtlZENvZGU7CiAgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5j
cHAJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTMgKzY1LDEz
IEBAIEdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0sIFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0Citib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0
V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01h
cmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0sIHJlcGF0Y2hCdWZmZXIpKQorICAg
IGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTM5LDEwICsxMzksMTAgQEAgYm9vbCBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0YwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtLCBSZXBhdGNoQnVmZmVy
JiByZXBhdGNoQnVmZmVyKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSwgcmVwYXRjaEJ1ZmZlcikpCisg
ICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9u
IDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8
fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0m
LCBSZXBhdGNoQnVmZmVyJikgY29uc3Q7CisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtMTE1LDcgKzExNSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBB
cmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/CiAgICAgCi0gICAgYm9vbCB2aXNp
dFdlYWsoVk0mLCBSZXBhdGNoQnVmZmVyJikgY29uc3Q7CisgICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIFB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhW
TSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0Citib29sIFB1dEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNl
dC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODgsNyArODgsNyBA
QCBib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0sIFJlCiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0sIHJlcGF0Y2hCdWZmZXIpKQorICAg
IGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQyLDEwICsxNDIsMTAgQEAgdm9pZCBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0OjphZGRBY2Nlc3MoYwogICAgIG1fbGlzdC5sYXN0KCkgPSBwdXRCeUlk
QWNjZXNzOwogfQogCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYg
dm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpIGNvbnN0Citib29sIFBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFr
KHZtLCByZXBhdGNoQnVmZmVyKSkKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY3VzdG9tU2V0dGVyOwogICAg
IH0KIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJiwgUmVwYXRjaEJ1ZmZlciYpIGNvbnN0OworICAg
IGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljOgogICAgIAogICAgIFB1
dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAotICAgIGJvb2wgdmlz
aXRXZWFrKFZNJiwgUmVwYXRjaEJ1ZmZlciYpIGNvbnN0OworICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgIH0KIH0KIAotYm9vbCBT
dHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhWTSYgdm0sIFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIpCitib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuY2VzKFZNJiB2bSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjoKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBpZiAo
IXUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtLCByZXBhdGNoQnVmZmVyKSkKKyAgICAg
ICAgaWYgKCF1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4LDcgKzg4LDcgQEAgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoK
LSAgICAgICAgaWYgKCF1LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSwgcmVwYXRjaEJ1
ZmZlcikpCisgICAgICAgIGlmICghdS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NSw3ICsxNjUsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIC8vIG91dGdv
aW5nIEdDIHBvaW50ZXJzIGFyZSBrbm93biB0byBwb2ludCB0byBjdXJyZW50bHkgbWFya2VkIG9i
amVjdHM7IHRoaXMgbWV0aG9kIGlzCiAgICAgLy8gYWxsb3dlZCB0byBhY2NvbXBsaXNoIHRoaXMg
YnkgZWl0aGVyIGNsZWFyaW5nIHRob3NlIHBvaW50ZXJzIHNvbWVob3cgb3IgYnkgcHJvdmluZyB0
aGF0CiAgICAgLy8gdGhleSBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQuIEl0IGlzIG5vdCBhbGxv
d2VkIHRvIG1hcmsgbmV3IG9iamVjdHMuCi0gICAgYm9vbCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZN
JiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIGJvb2wgdmlzaXRXZWFrUmVmZXJlbmNlcyhWTSYpOwog
ICAgICAgICAKICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODky
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgot
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTY3LDEwICsxNjYs
NyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAg
ICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEo
KSkpOwogICAgIH0KICAgICAKLSAgICB7Ci0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhleGl0LmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2Nv
ZGUuY29kZSgpKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0
LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhp
dC5tX2NvZGUuY29kZSgpKSk7CiAgICAgCiAgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24g
PSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg5MjY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiTExWTUFQ
SS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNjE5LDggKzYxOCw2IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfSk7CiAg
ICAgfQogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwot
CiAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxv
d0V4Y2VwdGlvblN0YWNrbWFwSUQpOwogICAgIC8vIEl0J3Mgc29ydCBvZiByZW1vdGVseSBwb3Nz
aWJsZSB0aGF0IHdlIHdvbid0IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24gaGFuZGxpbmcKICAg
ICAvLyBwYXRoLCBmb3Igc29tZSBraW5kcyBvZiBmdW5jdGlvbnMuCkBAIC02MzMsNyArNjMwLDcg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdGFja092ZXJmbG93RXhjZXB0aW9uLmlzU2V0KCkpOwogCi0gICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIHN0YXRlLmZpbmFs
aXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhY2tPdmVyZmxv
d0V4Y2VwdGlvbikpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVt
cChzb3VyY2UsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmxv
Y2F0aW9uT2Yoc3RhY2tPdmVyZmxvd0V4Y2VwdGlvbikpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNjQ3LDcgKzY0NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlv
bkxhYmVsKAogICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6
ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIHN0YXRlLmZpbmFsaXpl
ci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC02NzAsNyArNjY3LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIGlmIChpbmZvLm1faXNJbnZhbGlkYXRp
b25Qb2ludCkKICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNl
bWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3Mp
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwbGFjZVdpdGhKdW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoc291cmNlLCBpbmZv
Lm1fdGh1bmtBZGRyZXNzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE4OTI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1
ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJSZXBh
dGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNTIz
LDggKzUyMiw3IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAg
ICAKICAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2sp
OwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgK
ICAgICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2Nh
dGlvbkxhYmVsKGV4aXQubV9jb2RlLmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBleGl0Lm1f
Y29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCShy
ZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZTo6fkFjY2Vzc29yQ2FsCiB7CiB9CiAKLWJvb2wgQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJl
cGF0Y2hCdWZmZXIpCitib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2aXNpdFdlYWso
Vk0mIHZtKQogewotICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0sIHJlcGF0Y2hCdWZm
ZXIpOworICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfkFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKCk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhW
TSYsIFJlcGF0Y2hCdWZmZXImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFr
KFZNJikgb3ZlcnJpZGU7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4g
bV9jYWxsTGlua0luZm87CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMTg5MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJSZXN1
bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCkBAIC01NCwyMiArNTMsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgY3RpUGF0Y2hOZWFyQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDb2RlQmxv
Y2sqIGNvZGVibG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0Nh
bGxlZUZ1bmN0aW9uKQogewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShyZXR1
cm5BZGRyZXNzLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLXZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBuZXdDYWxsZWVGdW5j
dGlvbik7Ci19Ci0KLXZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENvZGVCbG9jayog
Y29kZWJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5l
d0NhbGxlZUZ1bmN0aW9uKQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
YmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKAorICAgICAgICBDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1
cm5BZGRyZXNzKSksCisgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAogSklUOjpKSVQo
Vk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMTg5MjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTgwLDEwICsxODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgfTsKIAotICAgIC8vIE5lYXIgY2Fs
bHMgY2FuIG9ubHkgYmUgcGF0Y2hlZCB0byBvdGhlciBKSVQgY29kZSwgcmVndWxhciBjYWxscyBj
YW4gYmUgcGF0Y2hlZCB0byBKSVQgY29kZSBvciByZWxpbmtlZCB0byBzdHViIGZ1bmN0aW9ucy4K
LSAgICB2b2lkIGN0aVBhdGNoTmVhckNhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2Rl
YmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhDb2RlQmxvY2sqIGNvZGVibG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pOwotICAgIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2NrLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKKyAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJ
VCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xv
d1BhdGhDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAxODkyNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1
ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAi
U2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg5MjY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKQEAgLTEwODUsOSArMTA4NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXIKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAogICAg
ICAgICAoIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTI2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKLSNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVk
ZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCkBAIC02
NDYsNyArNjQ1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aQog
ICAgIGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0
aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRy
ZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZh
bEdlbmVyaWMpKTsKICAgICB9CiAgICAgcHV0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIHZhbHVlLCBieVZhbEluZm8pOwogfQpAQCAtNzI4LDcgKzcyNyw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICBpZiAodHJ5RGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZShleGVjLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUykpID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7
CiAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhleGVjLT5jb2RlQmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJF
U1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVS
Tl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKSk7
CiAgICAgfQogCiAgICAgZGlyZWN0UHV0QnlWYWwoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIHZh
bHVlLCBieVZhbEluZm8pOwpAQCAtMTU5Myw3ICsxNTkyLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFz
VUludDMyKCk7CiAgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAg
ICAgIGlmIChhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgcmV0
dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcpKTsKKyAgICAg
ICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcpKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsK
QEAgLTE3MTYsNyArMTcxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKICAgICBpZiAodHJ5R2V0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnZXRCeVZhbChleGVj
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSk7CkBAIC0x
NzU2LDcgKzE3NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhh
CiAgICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMAogICAgICAgICAg
ICAgfHwgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewogICAgICAgICAg
ICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
R2VuZXJpYykpOworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODA1LDcg
KzE4MDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAg
ICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYg
KCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Ynl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQURE
UkVTUyksIEZ1bmN0aW9uUHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CisgICAgICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVS
Tl9BRERSRVNTKSwgRnVuY3Rpb25QdHIoYnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlv
bkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE4
OTI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJKU0Vudmly
b25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlw
ZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBACiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNp
bmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKQEAgLTEwNzksOSArMTA3OCw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAgICAgbV9jb2RlQmxvY2ssIHBh
dGNoQnVmZmVyLAogICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSk7CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElk
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTExMTEsOSArMTEwOSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICAgICAgKCJCYXNlbGluZSBn
ZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3Ry
aW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKICAgICBi
eVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7CiAKLSAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5
VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdElu
ZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQpAQCAtMTE3OSw5ICsxMTc2LDggQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLAogICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVj
dCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKICAgICB9Ci0gICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1
dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEyMDgsOSArMTIwNCw4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICAgICAgKCJC
YXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3Qi
IDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CiAgICAgYnlWYWxJbmZv
LT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwogCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8t
Pm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKHB1dEtpbmQgPT0gRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljKSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
Um91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHViUm91dGluZS5jcHAJKHJldmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBKSVRTdHViUm91dGluZTo6fkpJVFN0dWJSb3V0aW5lKCkgeyB9
CiAKLWJvb2wgSklUU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKQor
Ym9vbCBKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKFZNJikKIHsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJl
dmlzaW9uIDE4OTI3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVyLiBSZXR1cm4gZmFsc2UgaWYg
eW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJldHVybgogICAgIC8vIGZhbHNlLCB5b3Ugd2ls
bCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0aGUgaWRlYSBpcyB0aGF0IHlv
dSB3aWxsIHNpbXBseSBiZQogICAgIC8vIGRlc3Ryb3llZC4KLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRXZWFrKFZNJiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFdlYWso
Vk0mKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMTg5Mjc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1vcnBo
aWNDYWxsTm9kCiAgICAgICAgIHJlbW92ZSgpOwogfQogCi12b2lkIFBvbHltb3JwaGljQ2FsbE5v
ZGU6OnVubGluayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit2b2lkIFBv
bHltb3JwaGljQ2FsbE5vZGU6OnVubGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJ
bmZvKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAg
ICAgIGRhdGFMb2coIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKSwgIiwgIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmln
aW4oKSwgIlxuIik7CiAKLSAgICAgICAgbV9jYWxsTGlua0luZm8tPnVubGluayh2bSwgcmVwYXRj
aEJ1ZmZlcik7CisgICAgICAgIG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIAog
ICAgIGlmIChpc09uTGlzdCgpKQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6OmNsZWFyQ2EKICAgICB9CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKQorYm9vbCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZWFrKFZNJikKIHsKICAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKSB7CiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodmFyaWFu
dC5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIAogICAgIH5Qb2x5bW9ycGhpY0Nh
bGxOb2RlKCk7CiAgICAgCi0gICAgdm9pZCB1bmxpbmsoVk0mLCBSZXBhdGNoQnVmZmVyJik7Cisg
ICAgdm9pZCB1bmxpbmsoVk0mKTsKIAogICAgIGJvb2wgaGFzQ2FsbExpbmtJbmZvKENhbGxMaW5r
SW5mbyogaW5mbykgeyByZXR1cm4gbV9jYWxsTGlua0luZm8gPT0gaW5mbzsgfQogICAgIHZvaWQg
Y2xlYXJDYWxsTGlua0luZm8oKTsKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjbGVhckNhbGxOb2Rlc0ZvcihDYWxsTGlua0luZm8qKTsKICAgICAKLSAgICBib29sIHZpc2l0
V2VhayhWTSYsIFJlcGF0Y2hCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0V2VhayhW
TSYpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODkyNzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2
IEBACiAjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKLSNp
bmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCIKQEAgLTc1LDcgKzc0LDcgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIHJl
YWRDYWxsVGFyZ2V0KENvZGVCbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lk
IHJlcGF0Y2hDYWxsKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVM
b2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYg
RU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkZUTEpJVCkgewpAQCAtOTEsMTMgKzkwLDcgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoUmVw
YXRjaEJ1ZmZlciYgcgogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFN
KGNvZGVCbG9jayk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCByZXBh
dGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5j
dGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjb2RlQmxv
Y2ssIGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoCkBAIC0xMDgsMjYgKzEwMSwzMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoCiAgICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAgICAg
Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0KICAgICAvLyBP
bmx5IG9wdGltaXplIG9uY2UhCi0gICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOworICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93
UGF0aEZ1bmN0aW9uKTsKIAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUg
b2Zmc2V0IG9mIHRoZSBsb2FkLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oc3RydWN0
dXJlLT5pZCgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2
ZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9m
ZnNldCkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoCisgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1
YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxp
bnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQgY29udmVydGlibGVMb2FkID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRp
YmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQpOwor
ICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhMb2FkKGNvbnZlcnRpYmxlTG9hZCk7CisgICAgZWxzZQorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24oY29udmVydGlibGVM
b2FkKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwogICAgIGVsc2UKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgaWYgKGNvbXBhY3QpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hl
ZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBh
Y3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENv
bXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0x
NjEsMTggKzE1OCwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9u
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgdGFyZ2V0KQorc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdl
dCkKIHsKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVt
cCgKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcygKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVt
cCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2hPbkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIC0oaW50cHRy
X3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCkpLAogICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAogICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwodGFyZ2V0KSk7CkBAIC02ODEsOSArNjc4LDggQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
KmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cisg
ICAgICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIAogICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQpAQCAtNzE0LDkgKzcxMCw4IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAg
ICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9j
aywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAg
ICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIAogICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogICAgIH0KQEAgLTc1OCwxOSArNzUzLDE4IEBAIHZvaWQgcmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0
aW5lKQorc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCk7Ci0g
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgaWYgKHN0dWJJ
bmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZm
ZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwbGFjZVdp
dGhKdW1wKHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiB9CiAKIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTg1Miw3ICs4NDYs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwKICAgICAgICAgY29uZGl0aW9uU2V0KSk7CiAgICAgCi0gICAgcGF0Y2hKdW1w
VG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Cisg
ICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwog
ICAgIAogICAgIHJldHVybiBsaXN0LT5pc0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7CiB9CkBAIC0xMjU3LDEzICsxMjUxLDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHVi
KGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xk
U3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwot
ICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5
SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0g
RGlyZWN0KTsKICAgICAgICAgICAgIApAQCAtMTMyMCw5ICsxMzEzLDggQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9t
U2V0dGVyLAogICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9t
U2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7CiAKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LSAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKyAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QtPmlzRnVsbCgpKTsKICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9CkBAIC0xMzkzLDEwICsxMzg1LDkgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKICAgICAgICAgfQotICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwogICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2FsbChy
ZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogCiAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQpAQCAtMTQ0MiwxMCArMTQzMyw5IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWQKICAgICAgICAgICAgIHNs
b3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRB
Y2Nlc3M6OkN1c3RvbVNldHRlciwKICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwogCi0gICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJl
cGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAKICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9CkBAIC0xNTczLDggKzE1NjMsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwogICAgIHN0dWJJbmZvLnUu
aW5MaXN0Lmxpc3RTaXplKys7CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAgcmV0dXJuIGxpc3RJbmRl
eCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSA/IFJldHJ5Q2FjaGVMYXRlciA6
IEdpdmVVcE9uQ2FjaGU7CiB9CkBAIC0xNTg3LDI0ICsxNTc2LDIwIEBAIHZvaWQgcmVwYXRjaElu
KAogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9y
KAotICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQorc3RhdGljIHZvaWQg
bGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYpCiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAg
IGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgY29kZVJlZi5jb2RlKCkpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLmNvZGUoKSkpOwogfQogCi1zdGF0
aWMgdm9pZCBsaW5rU2xvd0ZvcigKLSAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBW
TSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgbGlua1Nsb3dGb3IocmVw
YXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKSk7
CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIoZ2VuZXJh
dG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKAotICAgIFJlcGF0Y2hCdWZmZXIm
IHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitzdGF0
aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQog
ewogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0s
IGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwogICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihjcmVh
dGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssICp2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQog
CkBAIC0xNjE4LDI2ICsxNjAzLDIzIEBAIHZvaWQgbGlua0ZvcigKIAogICAgIFZNKiB2bSA9IGNh
bGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xp
bmtlZCgpKTsKICAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKGV4ZWMtPmNhbGxlckZyYW1lKCkt
PnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxs
ZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgY2FsbGVlKTsKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5Rm9yKGNhbGxl
ckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCAqY2FsbGVy
Q29kZUJsb2NrLCAiIGF0ICIsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCksICIgdG8gIiwgcG9p
bnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAi
XG4iKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
KCksIGNvZGVQdHIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExp
bmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CiAgICAg
CiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5r
SW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8pOwogICAgIAog
ICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwp
IHsKLSAgICAgICAgbGlua1Nsb3dGb3IoCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLCB2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtH
ZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjYWxs
TGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAg
bGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Ns
b3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKIHZvaWQgbGlua1Nsb3dGb3IoCkBAIC0xNjQ2
LDE4ICsxNjI4LDE1IEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICBWTSogdm0g
PSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1
ZmZlciwgdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5m
byk7CiB9CiAKLXN0YXRpYyB2b2lkIHJldmVydENhbGwoCi0gICAgUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGVSZWYpCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQog
ewotICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2goCi0gICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hP
blJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExp
bmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwotICAgIGxpbmtT
bG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOworICAgIGxp
bmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwogICAgIGNhbGxMaW5rSW5mby5j
bGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsKICAgICBjYWxsTGlu
a0luZm8uY2xlYXJTdHViKCk7CkBAIC0xNjY2LDEzICsxNjQ1LDEyIEBAIHN0YXRpYyB2b2lkIHJl
dmVydENhbGwoCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxp
bmtGb3IoCi0gICAgVk0mIHZtLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQog
ICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBmcm9tICIsIGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24oKSwgIlxuIik7CiAgICAgCi0gICAgcmV2ZXJ0Q2FsbChyZXBhdGNoQnVm
ZmVyLCAmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKSk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKSk7CiB9CiAKIHZvaWQgbGlua1ZpcnR1YWxGb3IoCkBAIC0x
Njg0LDkgKzE2NjIsOCBAQCB2b2lkIGxpbmtWaXJ0dWFsRm9yKAogICAgIGlmIChzaG91bGRTaG93
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyB2aXJ0dWFsIGNhbGwgYXQgIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBleGVjLT5jYWxsZXJG
cmFtZSgpLT5jb2RlT3JpZ2luKCksICJcbiIpOwogICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2
ZXJ0Q2FsbChyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwor
ICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCAq
dm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIApAQCAtMTkxNiwxNSArMTg5MywxMyBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMs
CiAgICAgICAgIFdURjo6bW92ZShmYXN0Q291bnRzKSkpOwogICAgIAotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAorICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luKCkpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUg
b24gNjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2Ug
YSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBh
dGgKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvKTsKKyAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKICAgICAKICAgICAvLyBJZiB0aGVyZSBo
YWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29v
biBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24g
c3RhY2suCkBAIC0xOTM2LDI5ICsxOTExLDI5IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgK
ICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lkIHJlc2V0R2V0QnlJRChS
ZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICByZXBhdGNoQ2FsbChy
ZXBhdGNoQnVmZmVyLCBjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBD
b2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVw
bGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAg
ICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
T25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVy
dEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRy
ZXNzKHN0cnVjdHVyZUxhYmVsKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKICAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2Vk
UG9pbnRlcikpOwogICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFi
ZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1
bnVzZWRQb2ludGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSksIDApOwogI2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRpZgotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3ZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCiB7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXpl
ZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxs
VGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9u
OwpAQCAtMTk3MiwyOSArMTk0NywyOSBAQCB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiByZXBhdGNoCiAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQot
ICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKICAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1w
UmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKICAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51
c2VkUG9pbnRlcikpOwogICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJl
TGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90
Pih1bnVzZWRQb2ludGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwog
I2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50
MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAw
KTsKICNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAotdm9pZCByZXNldEluKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgcmVzZXRJbihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxODky
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsMTIgKzQyLDEyIEBAIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBK
U1ZhbHUKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZp
ZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwogdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKIHZvaWQgbGlua1Ns
b3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0ZvcihWTSYsIFJl
cGF0Y2hCdWZmZXImLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rRm9yKFZNJiwgQ2FsbExp
bmtJbmZvJik7CiB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYp
Owogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENh
bGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1
ZmZlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0R2V0QnlJ
RChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5SUQoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbihDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAo=
</data>
<flag name="review"
          id="285700"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>