<?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>151002</bug_id>
          
          <creation_ts>2015-11-07 18:40:36 -0800</creation_ts>
          <short_desc>B3 should be able to compile a program with a double constant</short_desc>
          <delta_ts>2015-11-09 16:01:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150991</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140225</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-07 18:40:36 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140226</commentid>
    <comment_count>1</comment_count>
      <attachid>265009</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-07 18:42:09 -0800</bug_when>
    <thetext>Created attachment 265009
building up the support for the compiler returning byproducts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140235</commentid>
    <comment_count>2</comment_count>
      <attachid>265011</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-07 21:42:52 -0800</bug_when>
    <thetext>Created attachment 265011
some more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140272</commentid>
    <comment_count>3</comment_count>
      <attachid>265021</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-08 11:57:52 -0800</bug_when>
    <thetext>Created attachment 265021
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140279</commentid>
    <comment_count>4</comment_count>
      <attachid>265025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-08 17:00:18 -0800</bug_when>
    <thetext>Created attachment 265025
almost done

Now I just need to compile and run it.  And actually write tests for returning double constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140284</commentid>
    <comment_count>5</comment_count>
      <attachid>265026</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-08 17:57:52 -0800</bug_when>
    <thetext>Created attachment 265026
probably done

Still want to run a perf test, but otherwise it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140285</commentid>
    <comment_count>6</comment_count>
      <attachid>265027</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-08 18:10:41 -0800</bug_when>
    <thetext>Created attachment 265027
the patch

No change to compile times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140286</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-08 18:13:04 -0800</bug_when>
    <thetext>Attachment 265027 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:1833:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1834:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1834:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1858:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1859:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1859:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1891:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1892:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1892:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1921:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1922:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1922:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1951:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1952:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1952:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1984:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1985:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1985:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2014:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2015:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2015:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2047:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2048:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2048:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2077:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2078:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2078:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2110:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2111:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2399:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2399:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2400:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3Procedure.h:205:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3DataSection.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 35 in 29 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>1140539</commentid>
    <comment_count>8</comment_count>
      <attachid>265027</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-09 14:30:29 -0800</bug_when>
    <thetext>Comment on attachment 265027
the patch

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

&gt; Source/JavaScriptCore/b3/B3Compilation.h:49
&gt; +// Then you keep the Compilation object alive for as lok as you want to be able to run the code. If

&quot;as lok as&quot; -&gt; &quot;as long as&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140576</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-09 16:01:34 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192183</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265009</attachid>
            <date>2015-11-07 18:42:09 -0800</date>
            <delta_ts>2015-11-07 21:42:52 -0800</delta_ts>
            <desc>building up the support for the compiler returning byproducts</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13139</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21w
aWxhdGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJhdGUu
aCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MpCit7
CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxwdHIpOworCisgICAgbV9jb2Rl
UmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpDb21waWxhdGlvbiIpKTsKKyAg
ICBtX2J5cHJvZHVjdHMgPSBwcm9jLnRha2VCeXByb2R1Y3RzKCk7Cit9CisKK0NvbXBpbGF0aW9u
Ojp+Q29tcGlsYXRpb24oKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tcGlsYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tcGlsYXRp
b25faAorI2RlZmluZSBCM0NvbXBpbGF0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IE9wYXF1ZUJ5cHJvZHVjdHM7CitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgaXMgYSBmb29s
LXByb29mIEFQSSBmb3IgY29tcGlsaW5nIGEgUHJvY2VkdXJlIHRvIGNvZGUgYW5kIHRoZW4gcnVu
bmluZyB0aGF0IGNvZGUuIFlvdSBjb21waWxlCisvLyBhIFByb2NlZHVyZSB1c2luZyB0aGlzIEFQ
SSBieSBkb2luZzoKKy8vCisvLyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOworLy8KKy8vIFRo
ZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9rIGFzIHlv
dSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLiBJZgorLy8gdGhpcyBBUEkgZmVlbHMg
dG9vIGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgorCitj
bGFzcyBDb21waWxhdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGlsYXRpb24p
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgQ29tcGlsYXRp
b24oVk0mLCBQcm9jZWR1cmUmKTsKKyAgICB+Q29tcGlsYXRpb24oKTsKKworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQor
Citwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGVSZWY7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29tcGlsYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGFxdWVCeXByb2R1Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGFxdWVCeXByb2R1Y3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M09wYXF1ZUJ5cHJvZHVjdF9oCisjZGVmaW5lIEIzT3BhcXVlQnlwcm9kdWN0X2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgT3BhcXVlQnlwcm9kdWN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVCeXBy
b2R1Y3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9wYXF1
ZUJ5cHJvZHVjdCgpIHsgfQorICAgIHZpcnR1YWwgfk9wYXF1ZUJ5cHJvZHVjdCgpIHsgfQorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNPcGFxdWVCeXByb2R1Y3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9k
dWN0cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK09wYXF1ZUJ5cHJvZHVjdHM6Ok9wYXF1ZUJ5cHJvZHVjdHMoKQoreworfQorCitP
cGFxdWVCeXByb2R1Y3RzOjp+T3BhcXVlQnlwcm9kdWN0cygpCit7Cit9CisKK3ZvaWQgT3BhcXVl
Qnlwcm9kdWN0czo6YWRkKHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Q+IGJ5cHJvZHVj
dCkKK3sKKyAgICBtX2J5cHJvZHVjdHMuYXBwZW5kKFdURjo6bW92ZShieXByb2R1Y3QpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9k
dWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wYXF1ZUJ5cHJvZHVjdHNf
aAorI2RlZmluZSBCM09wYXF1ZUJ5cHJvZHVjdHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIE9wYXF1ZUJ5cHJvZHVjdHMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZUJ5
cHJvZHVjdHMpCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT3Bh
cXVlQnlwcm9kdWN0cygpOworICAgIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisKKyAgICB2b2lkIGFk
ZChzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0Pik7CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Q+PiBtX2J5cHJvZHVjdHM7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM09wYXF1ZUJ5cHJvZHVjdHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICsz
MSwxNCBAQAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tVdGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUg
IkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBQcm9jZWR1cmU6OlByb2NlZHVyZSgpCiAg
ICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQorICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6
bWFrZV91bmlxdWU8T3BhcXVlQnlwcm9kdWN0cz4oKSkKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiAr
MjAxLDE3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RQaGFzZU5hbWU7IH0KIAorICAgIE9wYXF1ZUJ5cHJvZHVjdHMmIGJ5
cHJvZHVjdHMoKSB7IHJldHVybiAqbV9ieXByb2R1Y3RzOyB9CisKKyAgICAvLyBCZWxvdyBhcmUg
bWV0aG9kcyB0aGF0IG1ha2Ugc2Vuc2UgdG8gY2FsbCBhZnRlciB5b3UgaGF2ZSBnZW5lcmF0ZWQg
Y29kZSBmb3IgdGhlIHByb2NlZHVyZS4KKworICAgIC8vIFlvdSBoYXZlIHRvIGNhbGwgdGhpcyBt
ZXRob2QgYWZ0ZXIgY2FsbGluZyBnZW5lcmF0ZSgpLiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgQjM6
OmdlbmVyYXRlKCkKKyAgICAvLyB3aWxsIHJlcXVpcmUgeW91IHRvIGtlZXAgdGhpcyBvYmplY3Qg
YWxpdmUgZm9yIGFzIGxvbmcgYXMgdGhhdCBjb2RlIGlzIHJ1bm5hYmxlLiBVc3VhbGx5LCB0aGlz
CisgICAgLy8ganVzdCBrZWVwcyBhbGl2ZSB0aGluZ3MgbGlrZSB0aGUgZG91YmxlIGNvbnN0YW50
IHBvb2wgYW5kIHN3aXRjaCBsb29rdXAgdGFibGVzLiBJZiB0aGlzIHNvdW5kcworICAgIC8vIGNv
bmZ1c2luZywgeW91IHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyB0aGUgQjM6OkNvbXBpbGF0aW9u
IEFQSSB0byBjb21waWxlIGNvZGUuIElmIHlvdSB1c2UKKyAgICAvLyB0aGF0IEFQSSwgdGhlbiB5
b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxP
cGFxdWVCeXByb2R1Y3RzPiB0YWtlQnlwcm9kdWN0cygpIHsgcmV0dXJuIFdURjo6bW92ZShtX2J5
cHJvZHVjdHMpOyB9CisKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGFk
ZFZhbHVlSW5kZXgoKTsKICAgICAKQEAgLTIwOCw2ICsyMTksNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKICAgICBWZWN0b3I8c2l6ZV90
PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CisgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265011</attachid>
            <date>2015-11-07 21:42:52 -0800</date>
            <delta_ts>2015-11-08 11:57:52 -0800</delta_ts>
            <desc>some more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29465</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21w
aWxhdGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJhdGUu
aCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MpCit7
CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxwdHIpOworCisgICAgbV9jb2Rl
UmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpDb21waWxhdGlvbiIpKTsKKyAg
ICBtX2J5cHJvZHVjdHMgPSBwcm9jLnRha2VCeXByb2R1Y3RzKCk7Cit9CisKK0NvbXBpbGF0aW9u
Ojp+Q29tcGlsYXRpb24oKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tcGlsYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tcGlsYXRp
b25faAorI2RlZmluZSBCM0NvbXBpbGF0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IE9wYXF1ZUJ5cHJvZHVjdHM7CitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgaXMgYSBmb29s
LXByb29mIEFQSSBmb3IgY29tcGlsaW5nIGEgUHJvY2VkdXJlIHRvIGNvZGUgYW5kIHRoZW4gcnVu
bmluZyB0aGF0IGNvZGUuIFlvdSBjb21waWxlCisvLyBhIFByb2NlZHVyZSB1c2luZyB0aGlzIEFQ
SSBieSBkb2luZzoKKy8vCisvLyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOworLy8KKy8vIFRo
ZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9rIGFzIHlv
dSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLiBJZgorLy8gdGhpcyBBUEkgZmVlbHMg
dG9vIGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgorCitj
bGFzcyBDb21waWxhdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGlsYXRpb24p
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgQ29tcGlsYXRp
b24oVk0mLCBQcm9jZWR1cmUmKTsKKyAgICB+Q29tcGlsYXRpb24oKTsKKworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQor
Citwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGVSZWY7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29tcGlsYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNN
b3ZlQ29uc3RhbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNb3ZlQ29uc3RhbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0lu
c2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBtb3ZlQ29uc3RhbnRzKFByb2Nl
ZHVyZSYgcHJvYykKK3sKKyAgICAKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNb3ZlQ29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTW92ZUNvbnN0YW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTW92ZUNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01v
dmVDb25zdGFudHNfaAorI2RlZmluZSBCM01vdmVDb25zdGFudHNfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVy
ZTsKKworLy8gTW92ZXMgbGFyZ2UgY29uc3RhbnRzIGFyb3VuZCwgd2l0aCB0aGUgZ29hbCBvZiBw
bGFjaW5nIHRoZW0gaW4gdGhlIG9wdGltYWwgcG9pbnRzIGluIHRoZSBwcm9ncmFtLgorCitib29s
IG1vdmVDb25zdGFudHMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTW92ZUNvbnN0YW50c19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9k
dWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3BhcXVlQnlwcm9kdWN0X2gK
KyNkZWZpbmUgQjNPcGFxdWVCeXByb2R1Y3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBPcGFxdWVCeXByb2R1Y3Qg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZUJ5cHJvZHVjdCk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT3BhcXVlQnlwcm9kdWN0KCkgeyB9Cisg
ICAgdmlydHVhbCB+T3BhcXVlQnlwcm9kdWN0KCkgeyB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wYXF1
ZUJ5cHJvZHVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5
cHJvZHVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
YXF1ZUJ5cHJvZHVjdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworT3BhcXVlQnlw
cm9kdWN0czo6T3BhcXVlQnlwcm9kdWN0cygpCit7Cit9CisKK09wYXF1ZUJ5cHJvZHVjdHM6On5P
cGFxdWVCeXByb2R1Y3RzKCkKK3sKK30KKwordm9pZCBPcGFxdWVCeXByb2R1Y3RzOjphZGQoc3Rk
Ojp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdD4gYnlwcm9kdWN0KQoreworICAgIG1fYnlwcm9k
dWN0cy5hcHBlbmQoV1RGOjptb3ZlKGJ5cHJvZHVjdCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzT3BhcXVlQnlwcm9kdWN0c19oCisjZGVmaW5lIEIzT3BhcXVl
Qnlwcm9kdWN0c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcGFxdWVC
eXByb2R1Y3QuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3BhcXVlQnlwcm9kdWN0
cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlQnlwcm9kdWN0cykKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Cisg
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKworICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxP
cGFxdWVCeXByb2R1Y3Q+KTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PE9wYXF1ZUJ5cHJvZHVjdD4+IG1fYnlwcm9kdWN0czsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3BhcXVl
Qnlwcm9kdWN0c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE0IEBACiAjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCiAj
aW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3Rz
LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CiAKIFByb2NlZHVyZTo6UHJvY2VkdXJlKCkKICAgICA6IG1fbGFzdFBoYXNlTmFt
ZSgiaW5pdGlhbCIpCisgICAgLCBtX2J5cHJvZHVjdHMoc3RkOjptYWtlX3VuaXF1ZTxPcGFxdWVC
eXByb2R1Y3RzPigpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTcgQEAgcHVibGljOgog
CiAgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBo
YXNlTmFtZTsgfQogCisgICAgT3BhcXVlQnlwcm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJu
ICptX2J5cHJvZHVjdHM7IH0KKworICAgIC8vIEJlbG93IGFyZSBtZXRob2RzIHRoYXQgbWFrZSBz
ZW5zZSB0byBjYWxsIGFmdGVyIHlvdSBoYXZlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgcHJvY2Vk
dXJlLgorCisgICAgLy8gWW91IGhhdmUgdG8gY2FsbCB0aGlzIG1ldGhvZCBhZnRlciBjYWxsaW5n
IGdlbmVyYXRlKCkuIFRoZSBjb2RlIGdlbmVyYXRlZCBieSBCMzo6Z2VuZXJhdGUoKQorICAgIC8v
IHdpbGwgcmVxdWlyZSB5b3UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBh
cyB0aGF0IGNvZGUgaXMgcnVubmFibGUuIFVzdWFsbHksIHRoaXMKKyAgICAvLyBqdXN0IGtlZXBz
IGFsaXZlIHRoaW5ncyBsaWtlIHRoZSBkb3VibGUgY29uc3RhbnQgcG9vbCBhbmQgc3dpdGNoIGxv
b2t1cCB0YWJsZXMuIElmIHRoaXMgc291bmRzCisgICAgLy8gY29uZnVzaW5nLCB5b3Ugc2hvdWxk
IHByb2JhYmx5IGJlIHVzaW5nIHRoZSBCMzo6Q29tcGlsYXRpb24gQVBJIHRvIGNvbXBpbGUgY29k
ZS4gSWYgeW91IHVzZQorICAgIC8vIHRoYXQgQVBJLCB0aGVuIHlvdSBkb24ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IHRoaXMuCisgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IHRh
a2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fYnlwcm9kdWN0cyk7IH0KKwogcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAg
IApAQCAtMjA4LDYgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOwogICAgIFZlY3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVM
aXN0OwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8T3BhcXVlQnlwcm9kdWN0cz4gbV9ieXByb2R1Y3RzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lv
biAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMyw5NiArMTIzLDEwMiBAQCBWYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50
KFByb2NlZHVyZSYsIGluCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6
YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
KSBjb25zdAorVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0
QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRB
bmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29u
c3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFs
dWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1
ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnNobENvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSog
VmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFs
dWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6elNockNvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6elNockNvbnN0YW50KFByb2NlZHVyZSYs
IGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVHJpU3Rh
dGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmVx
dWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6bm90RXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0
CitUcmlTdGF0ZSBWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpsZXNzVGhh
bkNvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50
KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAot
VHJpU3RhdGUgVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3Rh
dGUgVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29u
c3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJp
U3RhdGUgVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRl
IFZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjphYm92ZUNvbnN0YW50
KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjphYm92ZUNvbnN0YW50KGNvbnN0IFZhbHVl
KikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFs
dWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmJlbG93Q29u
c3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwog
fQogCi1UcmlTdGF0ZSBWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK1Ry
aVN0YXRlIFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewog
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6YmVsb3dFcXVh
bENvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpiZWxvd0VxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQog
Citib29sIFZhbHVlOjplcXVhbHMoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlm
IChtX29wY29kZSAhPSBvdGhlci0+bV9vcGNvZGUgfHwgbV90eXBlICE9IG90aGVyLT5tX3R5cGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKwogVmFsdWUqIFZhbHVlOjppbnZlcnRlZENvbXBh
cmUoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAogewogICAgIGlmICghbnVtQ2hpbGRyZW4oKSkKQEAg
LTM1Niw2ICszNjIsNTYgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorVmFsdWVSZXAgVmFsdWU6OmNvbnN1bWVyS2V5KCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEZy
YW1lUG9pbnRlcjoKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoK
KyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAg
IGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBT
U2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2Ogor
ICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgIGNhc2UgVHJ1bmM6CisgICAg
Y2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2Ug
RXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2Ug
R3JlYXRlclRoYW46CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2Ug
QWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgY2FzZSBEaXY6CisgICAgICAg
IHJldHVybiBWYWx1ZVJlcChvcGNvZGUoKSwgdHlwZSgpLCBjaGlsZHJlbigpKTsKKyAgICBjYXNl
IENvbnN0MzI6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChDb25zdDMyLCBJbnQzMiwgVmFsdWVS
ZXA6OkFkamFjZW5jeUxpc3QoKSwgSGVhcFJhbmdlKCksIGFzSW50MzIoKSk7CisgICAgY2FzZSBD
b25zdDY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXAoQ29uc3Q2NCwgSW50NjQsIFZhbHVlUmVw
OjpBZGphY2VuY3lMaXN0KCksIEhlYXBSYW5nZSgpLCBhc0ludDY0KCkpOworICAgIGNhc2UgQ29u
c3REb3VibGU6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgKKyAgICAgICAgICAgIENvbnN0RG91
YmxlLCBEb3VibGUsIFZhbHVlUmVwOjpBZGphY2VuY3lMaXN0KCksIEhlYXBSYW5nZSgpLAorICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGludDY0X3Q+KGFzRG91YmxlKCkpKTsKKyAgICBjYXNlIEFy
Z3VtZW50UmVnOgorICAgICAgICByZXR1cm4gVmFsdWVSZXAoCisgICAgICAgICAgICBBcmd1bWVu
dFJlZywgdHlwZSgpLCBWYWx1ZVJlcDo6QWRqYWNlbmN5TGlzdCgpLCBIZWFwUmFuZ2UoKSwKKyAg
ICAgICAgICAgIGFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaW5kZXgoKSk7
CisgICAgICAgIAorICAgIH0KK30KKwogdm9pZCBWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbigp
CiB7CiAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDogY2hpbGRyZW4oKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMjUgKzExMCwyNSBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJl
JikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50
MzJfdCBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIGJp
dEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0Owot
ICAgIHZpcnR1YWwgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiB6U2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIFRy
aVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRy
aVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7
Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3RhbnQo
UHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVl
KiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAg
IHZpcnR1YWwgVmFsdWUqIHNTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHJpU3RhdGUgZXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3Rh
dGUgbm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0Owor
ICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENv
bnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBh
Ym92ZUNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlT
dGF0ZSBiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVh
bCBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OwogCiAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB0aGVuIHRo
aXMgcmV0dXJucyB0aGUgaW52ZXJ0ZWQgZm9ybSBvZiB0aGF0IGNvbXBhcmlzb24sIGlmCiAgICAg
Ly8gcG9zc2libGUuIEl0IGNhbiBiZSBpbXBvc3NpYmxlIGZvciBkb3VibGUgY29tcGFyaXNvbnMs
IHdoZXJlIGZvciBleGFtcGxlIExlc3NUaGFuIGFuZApAQCAtMTY3LDkgKzE2NywxOCBAQCBwdWJs
aWM6CiAgICAgVHJpU3RhdGUgYXNUcmlTdGF0ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMaWtlWmVy
bygpIGNvbnN0IHsgcmV0dXJuIGFzVHJpU3RhdGUoKSA9PSBGYWxzZVRyaVN0YXRlOyB9CiAgICAg
Ym9vbCBpc0xpa2VOb25aZXJvKCkgY29uc3QgeyByZXR1cm4gYXNUcmlTdGF0ZSgpID09IFRydWVU
cmlTdGF0ZTsgfQotICAgIAorCiAgICAgRWZmZWN0cyBlZmZlY3RzKCkgY29uc3Q7CiAKKyAgICAv
LyBUaGlzIHJldHVybnMgYSBrZXkgdGhhdCBkZXNjcmliZXMgdGhlIHZhbHVlIHRoYXQgdGhpcyBW
YWx1ZSB3aWxsIHByb2R1Y2Ugd2hlbiBleGVjdXRlZC4KKyAgICBWYWx1ZUtleSBjb25zdW1lcktl
eSgpIGNvbnN0OworCisgICAgLy8gVGhlIGV4ZWN1dGlvbiBvZiBhIFZhbHVlIGNhbiB0ZWxsIHVz
IHNvbWV0aGluZyBhYm91dCB0aGUgVmFsdWVLZXktPlZhbHVlKiBtYXBwaW5nLiBVc3VhbGx5LAor
ICAgIC8vIHRoZSBWYWx1ZSogaXMgJ3RoaXMnOiB3ZSBsZWFybiB0aGF0IGlmIHdlIHdhbnQgdG8g
cmVjb21wdXRlIFZhbHVlS2V5LCB3ZSBjYW4ganVzdCByZWZlciB0bworICAgIC8vICd0aGlzJy4g
QnV0IGZvciBzb21lIG9wZXJhdGlvbnMsIHN1Y2ggYXMgU3RvcmUgb3BlcmF0aW9ucywgdGhlIFZh
bHVlKiB0aGF0IHdlIGxlYXJuIGhvbGRzIHNvbWUKKyAgICAvLyBWYWx1ZUtleSBpcyB0aGUgdmFs
dWUgYmVpbmcgc3RvcmVkLiBIZW5jZSwgdGhpcyByZXR1cm5zIGEgcGFpci4KKyAgICBzdGQ6OnBh
aXI8VmFsdWVLZXksIFZhbHVlKj4gcHJvZHVjZXJLZXkoKSBjb25zdDsKKwogICAgIC8vIE1ha2Vz
IHN1cmUgdGhhdCBub25lIG9mIHRoZSBjaGlsZHJlbiBhcmUgSWRlbnRpdHkncy4gSWYgYSBjaGls
ZCBwb2ludHMgdG8gSWRlbnRpdHksIHRoaXMgd2lsbAogICAgIC8vIHJlcG9pbnQgaXQgYXQgdGhl
IElkZW50aXR5J3MgY2hpbGQuIEZvciBzaW1wbGljaXR5LCB0aGlzIHdpbGwgZm9sbG93IGFyYml0
cmFyaWx5IGxvbmcgY2hhaW5zCiAgICAgLy8gb2YgSWRlbnRpdHkncy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1ZhbHVlS2V5X2gKKyNkZWZpbmUgQjNWYWx1ZUtleV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCisvLyBWYWx1ZUtleXMgYXJlIHVzZWZ1
bCBmb3IgQ1NFLiBUaGV5IGFic3RyYWN0bHkgZGVzY3JpYmUgdGhlIHZhbHVlIHRoYXQgYSBWYWx1
ZSByZXR1cm5zIHdoZW4gaXQKKy8vIGV4ZWN1dGVzLiBJZiBhIFZhbHVlS2V5IGhhcyBhbiBlbXB0
eSBoZWFwIHJhbmdlLCB0aGVuIGFueSBWYWx1ZSB0aGF0IGhhcyB0aGUgc2FtZSBWYWx1ZUtleSBp
cworLy8gZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUuIElmIGEgVmFsdWVLZXkg
aGFzIGEgbm9uLWVtcHR5IHJhbmdlLCB0aGVuIGl0IGp1c3QgbWVhbnMgdGhhdAorLy8gdHdvIFZh
bHVlcyB3aXRoIHRoZSBzYW1lIFZhbHVlS2V5IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHRoaW5nIHNv
IGxvbmcgYXMgdGhlcmUgZG9lc24ndCBleGlzdCBhCisvLyB3cml0ZSB0byB0aGF0IHJhbmdlIGJl
dHdlZW4gdGhlbS4KKworY2xhc3MgVmFsdWVLZXkgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVj
dG9yPFZhbHVlKiwgMj4gQWRqYWNlbmN5TGlzdDsKKworICAgIFZhbHVlS2V5KCkKKyAgICB7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBWYWx1ZUtleSgK
KyAgICAgICAgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBWZWN0b3JUeXBlJiYgY2hpbGRyZW4s
IEhlYXBSYW5nZSByYW5nZSA9IEhlYXBSYW5nZSgpLAorICAgICAgICBpbnQ2NF90IG9wYXF1ZSA9
IDApCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQor
ICAgICAgICAsIG1fY2hpbGRyZW4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4oY2hpbGRyZW4pKQor
ICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV9vcGFxdWUob3BhcXVlKQorICAg
IHsKKyAgICB9CisKKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7
IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAg
ICBjb25zdCBIZWFwUmFuZ2UmIGhlYXBSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcFJhbmdl
OyB9CisgICAgaW50NjRfdCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX29wY29kZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgJiYg
bV90eXBlID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAgJiYgbV9jaGlsZHJlbiA9PSBvdGhl
ci5tX2NoaWxkcmVuCisgICAgICAgICAgICAmJiBtX2hlYXBSYW5nZSA9PSBvdGhlci5tX2hlYXBS
YW5nZQorICAgICAgICAgICAgJiYgbV9vcGFxdWUgPT0gb3RoZXIubV9vcGFxdWU7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wY29kZSArIEZJWE1FOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhp
cyAhPSBWYWx1ZUtleSgpOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAgICAgCitwcml2YXRlOgorICAgIE9wY29kZSBtX29wY29kZSB7IE5vcCB9OworICAgIFR5
cGUgbV90eXBlIHsgVm9pZCB9OworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsgLy8gRklY
TUU6IE1heWJlIHdlIGNhbiBtYWtlIHRoaXMganVzdCBhIHBvaW50ZXIgdG8gc29tZSBvdGhlciBu
b2RlJ3MgYWRqYWNlbmN5IGxpc3Q/CisgICAgSGVhcFJhbmdlIG1faGVhcFJhbmdlOworICAgIGlu
dDY0X3QgbV9vcGFxdWUgeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlS2V5X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265021</attachid>
            <date>2015-11-08 11:57:52 -0800</date>
            <delta_ts>2015-11-08 17:00:18 -0800</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43115</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtOTQwLDYgKzk0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQobV9hc3NlbWJsZXIuam5lKCkpOwogICAgIH0KIAorICAgIHZvaWQgbW92ZVplcm9Ub0Rv
dWJsZShGUFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ycGRf
cnIocmVnLCByZWcpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJl
Z2lzdGVySUQgcmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChpc1NTRTJQcmVzZW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbXBpbGF0aW9uOjpDb21waWxhdGlvbihWTSYgdm0s
IFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgZ2Vu
ZXJhdGUocHJvYywgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVs
bHB0cik7CisKKyAgICBtX2NvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6
OkNvbXBpbGF0aW9uIikpOworICAgIG1fYnlwcm9kdWN0cyA9IHByb2MudGFrZUJ5cHJvZHVjdHMo
KTsKK30KKworQ29tcGlsYXRpb246On5Db21waWxhdGlvbigpCit7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb21waWxhdGlvbl9oCisjZGVmaW5lIEIzQ29tcGlsYXRpb25faAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWTTsKKworbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgT3BhcXVlQnlwcm9kdWN0czsKK2NsYXNzIFByb2NlZHVyZTsK
KworLy8gVGhpcyBpcyBhIGZvb2wtcHJvb2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1cmUg
dG8gY29kZSBhbmQgdGhlbiBydW5uaW5nIHRoYXQgY29kZS4gWW91IGNvbXBpbGUKKy8vIGEgUHJv
Y2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5IGRvaW5nOgorLy8KKy8vIHN0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvbj4gY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2
bSwgcHJvYyk7CisvLworLy8gVGhlbiB5b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0IGFs
aXZlIGZvciBhcyBsb2sgYXMgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBydW4gdGhlIGNvZGUuIElm
CisvLyB0aGlzIEFQSSBmZWVscyB0b28gaGlnaC1sZXZlbCwgeW91IGNhbiB1c2UgQjM6OmdlbmVy
YXRlKCkgZGlyZWN0bHkuCisKK2NsYXNzIENvbXBpbGF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb21waWxhdGlvbik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1
YmxpYzoKKyAgICBDb21waWxhdGlvbihWTSYsIFByb2NlZHVyZSYpOworICAgIH5Db21waWxhdGlv
bigpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVSZWYuY29kZSgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG1fY29kZVJlZjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gbV9ieXBy
b2R1Y3RzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21waWxhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0RhdGFTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Rh
dGFTZWN0aW9uOjpEYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkKKyAgICA6IG1fZGF0YShmYXN0TWFs
bG9jKHNpemUpKQorICAgICwgbV9zaXplKHNpemUpCit7Cit9CisKK0RhdGFTZWN0aW9uOjp+RGF0
YVNlY3Rpb24oKQoreworICAgIGZhc3RGcmVlKG1fZGF0YSk7Cit9CisKK3ZvaWQgRGF0YVNlY3Rp
b246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkRhdGFT
ZWN0aW9uIGF0ICIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIiB3aXRoICIsIG1fc2l6ZSwgIiBieXRl
cy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RhdGFTZWN0aW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0RhdGFTZWN0aW9uX2gKKyNkZWZpbmUg
QjNEYXRhU2VjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcGFx
dWVCeXByb2R1Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IERhdGFTZWN0aW9uIDogcHVibGljIE9wYXF1ZUJ5cHJvZHVjdCB7CitwdWJsaWM6CisgICAgRGF0
YVNlY3Rpb24oc2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgfkRhdGFTZWN0aW9uKCk7CisKKyAg
ICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZvaWQqIG1fZGF0YTsKKyAgICBzaXpl
X3QgbV9zaXplOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNEYXRhU2VjdGlvbl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjND
b21tb24uaCIKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM01vdmVDb25z
dGFudHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlU3Ry
ZW5ndGguaCIKICNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCkBAIC03MCw2ICs3MSw4IEBAIHZv
aWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAvLyBGSVhNRTogQWRk
IG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKIAorICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsK
KwogICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCiAgICAgICAgIHZhbGlkYXRlKHByb2NlZHVy
ZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVD
b25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM01vdmVDb25zdGFudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlS2V5SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgTW92ZUNvbnN0YW50cyB7CitwdWJsaWM6CisgICAgTW92ZUNvbnN0
YW50cyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQocHJvYykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAg
IHsKKyAgICAgICAgLy8gRXZlbnR1YWxseSB0aGlzIHBoYXNlIHdpbGwgZG8gc21hcnQgdGhpbmdz
LiBGb3Igbm93LCBpdCB1c2VzIGEgc3VwZXIgc2ltcGxlIGhldXJpc3RpYzogaXQKKyAgICAgICAg
Ly8gcGxhY2VzIGxhcmdlIGNvbnN0YW50cyBpbiB0aGUgYmxvY2sgdGhhdCB1c2VzIHRoZW0sIGFu
ZCBtYWtlcyBzdXJlIHRoYXQgZWFjaCBibG9jayBoYXMKKyAgICAgICAgLy8gb25seSBvbmUgbWF0
ZXJpYWxpemF0aW9uIGZvciBlYWNoIGxhcmdlIGNvbnN0YW50LgorCisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3RvcnkgZm9yIGNvbnN0YW50cy4gQXQgYSBtaW5pbXVtIHRo
aXMgc2hvdWxkIGFsbG93IHRoZSBCMworICAgICAgICAvLyBjbGllbnQgdG8gc3BlY2lmeSBpbXBv
cnRhbnQgY29uc3RhbnRzIHRoYXQgYWx3YXlzIGdldCBob2lzdGVkLiBBbHNvLCB0aGUgdGFibGUg
dXNlZCB0bworICAgICAgICAvLyBob2xkIGRvdWJsZSBjb25zdGFudHMgc2hvdWxkIGhhdmUgYSBw
b2ludGVyIHRvIGl0IHRoYXQgaXMgaG9pc3RlZC4gSWYgd2Ugd2FudGVkIHRvIGJlIG1vcmUKKyAg
ICAgICAgLy8gYWdncmVzc2l2ZSwgd2UgY291bGQgbWFrZSBjb25zdGFudCBtYXRlcmlhbGl6YXRp
b24gYmUgYSBmZWF0dXJlIG9mIEFpcjogd2UgY291bGQgbGFiZWwKKyAgICAgICAgLy8gc29tZSBU
bXBzIGFzIGJlaW5nIHVubWF0ZXJpYWxpemVkIGNvbnN0YW50cyBhbmQgaGF2ZSBhIGxhdGUgQWly
IHBoYXNlIC0gcG9zdCByZWdpc3RlcgorICAgICAgICAvLyBhbGxvY2F0aW9uIC0gdGhhdCBjcmVh
dGVzIG1hdGVyaWFsaXphdGlvbnMgb2YgdGhvc2UgY29uc3RhbnQgVG1wcyBieSBzY2F2ZW5naW5n
IGxlZnRvdmVyCisgICAgICAgIC8vIHJlZ2lzdGVycy4KKworICAgICAgICAvLyBGaXJzdCB3ZSBu
ZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uc3RhbnRzIGdvIGludG8gdGhlIGRhdGEgc2VjdGlv
bi4gVGhlc2UgYXJlIG5vbi16ZXJvCisgICAgICAgIC8vIGRvdWJsZSBjb25zdGFudHMuCisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9jLnZhbHVlcygpKSB7CisgICAgICAgICAgICBW
YWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICBpZiAoZ29lc0luVGFibGUo
a2V5KSkKKyAgICAgICAgICAgICAgICBtX2NvbnN0VGFibGUuYWRkKGtleSwgbV9jb25zdFRhYmxl
LnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZGF0YVNlY3Rpb24gPSBt
X3Byb2MuYWRkRGF0YVNlY3Rpb24obV9jb25zdFRhYmxlLnNpemUoKSAqIHNpemVvZihpbnRwdHJf
dCkpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jb25zdFRhYmxlKQorICAgICAgICAg
ICAgbV9kYXRhU2VjdGlvbltlbnRyeS52YWx1ZV0gPSBlbnRyeS5rZXkudmFsdWUoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgICAg
ICBtX2NvbnN0YW50cy5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVl
SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGls
ZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbmVlZHNNb3Rpb24oY2hpbGQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAg
Y2hpbGQgPSBtYXRlcmlhbGl6ZSh2YWx1ZUluZGV4LCBjaGlsZC0+a2V5KCksIHZhbHVlLT5vcmln
aW4oKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbWF0ZXJpYWxpemUodW5zaWduZWQgdmFsdWVJbmRl
eCwgY29uc3QgVmFsdWVLZXkmIGtleSwgY29uc3QgT3JpZ2luJiBvcmlnaW4pCisgICAgeworICAg
ICAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fY29uc3RhbnRzLmdldChrZXkpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5
IGRvbid0IGRvIHRoaXMgaW4gb25lIGFkZCgpIGJlY2F1c2UgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBm
dW5jdGlvbgorICAgICAgICAvLyB0aGF0IG1heSByZWhhc2ggdGhlIG1hcC4KKworICAgICAgICBW
YWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoZ29lc0luVGFibGUoa2V5KSkgeworICAgICAgICAg
ICAgVmFsdWUqIHRhYmxlQmFzZSA9IG1hdGVyaWFsaXplKAorICAgICAgICAgICAgICAgIFZhbHVl
S2V5KGNvbnN0UHRyT3Bjb2RlKCksIHBvaW50ZXJUeXBlKCksIGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4obV9kYXRhU2VjdGlvbikpLAorICAgICAgICAgICAgICAgIG9yaWdpbik7CisgICAgICAgICAg
ICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAorICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIGtleS50eXBlKCksIG9yaWdpbiwgdGFibGVCYXNlLAor
ICAgICAgICAgICAgICAgIHNpemVvZihpbnRwdHJfdCkgKiBtX2NvbnN0VGFibGUuZ2V0KGtleSkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydFZhbHVlKHZhbHVlSW5kZXgsIGtleS5tYXRlcmlhbGl6ZShtX3Byb2MsIG9yaWdpbikpOwor
ICAgICAgICBtX2NvbnN0YW50cy5hZGQoa2V5LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGJvb2wgZ29lc0luVGFibGUoY29uc3QgVmFsdWVLZXkmIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBrZXkub3Bjb2RlKCkgPT0gQ29uc3REb3VibGUgJiYga2V5
ICE9IGRvdWJsZVplcm8oKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzTW90aW9uKGNvbnN0IFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGN1cnJlbnRs
eSBhc3N1bWUgdGhhdCAzMi1iaXQgaW50IGNvbnN0YW50cyBhcmUgYWx3YXlzIGNoZWFwIHRvIG1h
dGVyaWFsaXplLgorICAgICAgICAvLyBUaGlzIGlzIHdyb25nIGZvciBBUk0uIFdlIG5lZWQgc29t
ZSBhYnN0cmFjdCBxdWVyeSBsaWtlICJpc0ltbWVkaWF0ZShpbnQ2NF90KSIuIE9uCisgICAgICAg
IC8vIEFSTTY0IHRoaXMgd291bGQgdGFrZSBpbnRvIGFjY291bnQgdGhlIHdheSB0aGF0IEFSTTY0
IGNhbiBlbmNvZGUgbGFyZ2UgY29uc3RhbnRzLgorICAgICAgICBpZiAodmFsdWUtPmhhc0ludCgp
ICYmIHZhbHVlLT5yZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFs
dWVLZXkgZG91YmxlWmVybygpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3RE
b3VibGUsIERvdWJsZSwgYml0d2lzZV9jYXN0PGludHB0cl90PigwLjApKTsKKyAgICB9CisgICAg
CisgICAgSGFzaE1hcDxWYWx1ZUtleSwgdW5zaWduZWQ+IG1fY29uc3RUYWJsZTsKKyAgICBpbnRw
dHJfdCogbV9kYXRhU2VjdGlvbjsKKyAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29u
c3RhbnRzOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIG1vdmVDb25zdGFudHMoUHJvY2VkdXJlJiBwcm9jKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAibW92ZUNvbnN0YW50cyIpOworICAg
IE1vdmVDb25zdGFudHMgbW92ZUNvbnN0YW50cyhwcm9jKTsKKyAgICBtb3ZlQ29uc3RhbnRzLnJ1
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTW92ZUNvbnN0YW50c19oCisj
ZGVmaW5lIEIzTW92ZUNvbnN0YW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBNb3ZlcyBs
YXJnZSBjb25zdGFudHMgYXJvdW5kLCB3aXRoIHRoZSBnb2FsIG9mIHBsYWNpbmcgdGhlbSBpbiB0
aGUgb3B0aW1hbCBwb2ludHMgaW4gdGhlIHByb2dyYW0uCisKK2Jvb2wgbW92ZUNvbnN0YW50cyhQ
cm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNNb3ZlQ29uc3RhbnRzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNPcGFxdWVCeXByb2R1Y3RfaAorI2RlZmluZSBCM09wYXF1
ZUJ5cHJvZHVjdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIE9w
YXF1ZUJ5cHJvZHVjdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlQnlwcm9kdWN0
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPcGFxdWVCeXBy
b2R1Y3QoKSB7IH0KKyAgICB2aXJ0dWFsIH5PcGFxdWVCeXByb2R1Y3QoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNPcGFxdWVCeXByb2R1Y3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGFxdWVCeXByb2R1Y3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGFxdWVCeXByb2R1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK09w
YXF1ZUJ5cHJvZHVjdHM6Ok9wYXF1ZUJ5cHJvZHVjdHMoKQoreworfQorCitPcGFxdWVCeXByb2R1
Y3RzOjp+T3BhcXVlQnlwcm9kdWN0cygpCit7Cit9CisKK3ZvaWQgT3BhcXVlQnlwcm9kdWN0czo6
YWRkKHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Q+IGJ5cHJvZHVjdCkKK3sKKyAgICBt
X2J5cHJvZHVjdHMuYXBwZW5kKFdURjo6bW92ZShieXByb2R1Y3QpKTsKK30KKwordm9pZCBPcGFx
dWVCeXByb2R1Y3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJCeXByb2R1Y3RzOlxuIik7CisgICAgaWYgKG1fYnlwcm9kdWN0cy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgb3V0LnByaW50KCIgICAgPGVtcHR5PlxuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiBieXByb2R1Y3QgOiBtX2J5cHJvZHVjdHMpCisgICAgICAgIG91
dC5wcmludCgiICAgICIsICpieXByb2R1Y3QsICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzT3BhcXVlQnlwcm9kdWN0c19oCisjZGVmaW5lIEIzT3BhcXVl
Qnlwcm9kdWN0c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcGFxdWVC
eXByb2R1Y3QuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3BhcXVlQnlwcm9kdWN0
cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlQnlwcm9kdWN0cykKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Cisg
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKworICAgIHNpemVfdCBjb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnlwcm9kdWN0cy5zaXplKCk7IH0KKyAgICAKKyAgICB2b2lkIGFkZChzdGQ6OnVuaXF1
ZV9wdHI8T3BhcXVlQnlwcm9kdWN0Pik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJv
ZHVjdD4+IG1fYnlwcm9kdWN0czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3BhcXVlQnlwcm9kdWN0c19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAxOTIxMzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjA5LDYgKzIwOSwxMyBAQCBpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2Rl
KQogCiBPcHRpb25hbDxPcGNvZGU+IGludmVydGVkQ29tcGFyZShPcGNvZGUsIFR5cGUpOwogCitp
bmxpbmUgT3Bjb2RlIGNvbnN0UHRyT3Bjb2RlKCkKK3sKKyAgICBpZiAoaXM2NEJpdCgpKQorICAg
ICAgICByZXR1cm4gQ29uc3Q2NDsKKyAgICByZXR1cm4gQ29uc3QzMjsKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiAr
MzEsMTUgQEAKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrVXRpbHMuaCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRl
ICJCM0RhdGFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKIFByb2NlZHVyZTo6UHJvY2VkdXJlKCkKICAgICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlh
bCIpCisgICAgLCBtX2J5cHJvZHVjdHMoc3RkOjptYWtlX3VuaXF1ZTxPcGFxdWVCeXByb2R1Y3Rz
PigpKQogewogfQogCkBAIC0xMDcsNiArMTEwLDggQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgYwogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykK
ICAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7CisgICAgaWYgKG1fYnlwcm9kdWN0
cy0+Y291bnQoKSkKKyAgICAgICAgb3V0LnByaW50KCptX2J5cHJvZHVjdHMpOwogfQogCiBWZWN0
b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCkBAIC0xMjYsNiAr
MTMxLDE2IEBAIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKICAgICBt
X3ZhbHVlc1t2YWx1ZS0+aW5kZXgoKV0gPSBudWxscHRyOwogfQogCit2b2lkKiBQcm9jZWR1cmU6
OmFkZERhdGFTZWN0aW9uKHNpemVfdCBzaXplKQoreworICAgIGlmICghc2l6ZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFTZWN0aW9uPiBkYXRhU2Vj
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8RGF0YVNlY3Rpb24+KHNpemUpOworICAgIHZvaWQqIHJl
c3VsdCA9IGRhdGFTZWN0aW9uLT5kYXRhKCk7CisgICAgbV9ieXByb2R1Y3RzLmFkZChXVEY6Om1v
dmUoZGF0YVNlY3Rpb24pKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzaXplX3QgUHJvY2Vk
dXJlOjphZGRWYWx1ZUluZGV4KCkKIHsKICAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNF
bXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2
aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTkgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
Y2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBoYXNlTmFtZTsgfQog
CisgICAgdm9pZCogYWRkRGF0YVNlY3Rpb24oc2l6ZV90IHNpemUpOworCisgICAgT3BhcXVlQnlw
cm9kdWN0cyYgYnlwcm9kdWN0cygpIHsgcmV0dXJuICptX2J5cHJvZHVjdHM7IH0KKworICAgIC8v
IEJlbG93IGFyZSBtZXRob2RzIHRoYXQgbWFrZSBzZW5zZSB0byBjYWxsIGFmdGVyIHlvdSBoYXZl
IGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgcHJvY2VkdXJlLgorCisgICAgLy8gWW91IGhhdmUgdG8g
Y2FsbCB0aGlzIG1ldGhvZCBhZnRlciBjYWxsaW5nIGdlbmVyYXRlKCkuIFRoZSBjb2RlIGdlbmVy
YXRlZCBieSBCMzo6Z2VuZXJhdGUoKQorICAgIC8vIHdpbGwgcmVxdWlyZSB5b3UgdG8ga2VlcCB0
aGlzIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB0aGF0IGNvZGUgaXMgcnVubmFibGUuIFVz
dWFsbHksIHRoaXMKKyAgICAvLyBqdXN0IGtlZXBzIGFsaXZlIHRoaW5ncyBsaWtlIHRoZSBkb3Vi
bGUgY29uc3RhbnQgcG9vbCBhbmQgc3dpdGNoIGxvb2t1cCB0YWJsZXMuIElmIHRoaXMgc291bmRz
CisgICAgLy8gY29uZnVzaW5nLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIHRoZSBCMzo6
Q29tcGlsYXRpb24gQVBJIHRvIGNvbXBpbGUgY29kZS4gSWYgeW91IHVzZQorICAgIC8vIHRoYXQg
QVBJLCB0aGVuIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCisgICAgc3RkOjp1
bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IHRha2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RG
Ojptb3ZlKG1fYnlwcm9kdWN0cyk7IH0KKwogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAgIApAQCAtMjA4LDYgKzIyMSw3IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOwogICAgIFZl
Y3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVMaXN0OwogICAgIGNvbnN0IGNoYXIqIG1fbGFz
dFBoYXNlTmFtZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gbV9ieXBy
b2R1Y3RzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLWVudW0gVHlwZSB7CitlbnVtIFR5cGUgOiBpbnQ4
X3QgewogICAgIFZvaWQsCiAgICAgSW50MzIsCiAgICAgSW50NjQsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Niw2ICszNTYsNTkg
QEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcGNvZGUoKSkg
eworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gVmFsdWVLZXkob3Bjb2Rl
KCksIHR5cGUoKSk7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNh
c2UgU0V4dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgIGNhc2Ug
VHJ1bmM6CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgRFRvSTMy
OgorICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShvcGNvZGUoKSwgdHlw
ZSgpLCBjaGlsZCgwKSk7CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBN
dWw6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoK
KyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNh
c2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVx
dWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNl
IEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2Ug
QmVsb3dFcXVhbDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9w
Y29kZSgpLCB0eXBlKCksIGNoaWxkKDApLCBjaGlsZCgxKSk7CisgICAgY2FzZSBDb25zdDMyOgor
ICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3QzMiwgdHlwZSgpLCBhc0ludDMyKCkpOworICAg
IGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0NjQsIHR5cGUoKSwg
YXNJbnQ2NCgpKTsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICByZXR1cm4gVmFsdWVL
ZXkoQ29uc3REb3VibGUsIHR5cGUoKSwgYml0d2lzZV9jYXN0PGludDY0X3Q+KGFzRG91YmxlKCkp
KTsKKyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAgICAgICByZXR1cm4gVmFsdWVLZXkoQXJndW1l
bnRSZWcsIHR5cGUoKSwgYXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWcoKS5pbmRl
eCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVmFsdWVLZXkoKTsKKyAgICB9Cit9
CisKIHZvaWQgVmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRpb24oKQogewogICAgIGZvciAoVmFsdWUq
JiBjaGlsZCA6IGNoaWxkcmVuKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDkgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgVHJpU3Rh
dGUgYXNUcmlTdGF0ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMaWtlWmVybygpIGNvbnN0IHsgcmV0
dXJuIGFzVHJpU3RhdGUoKSA9PSBGYWxzZVRyaVN0YXRlOyB9CiAgICAgYm9vbCBpc0xpa2VOb25a
ZXJvKCkgY29uc3QgeyByZXR1cm4gYXNUcmlTdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsgfQotICAg
IAorCiAgICAgRWZmZWN0cyBlZmZlY3RzKCkgY29uc3Q7CiAKKyAgICAvLyBUaGlzIHJldHVybnMg
YSBWYWx1ZUtleSB0aGF0IGRlc2NyaWJlcyB0aGF0IHRoaXMgVmFsdWUgcmV0dXJucyB3aGVuIGl0
IGV4ZWN1dGVzLiBSZXR1cm5zIGFuCisgICAgLy8gZW1wdHkgVmFsdWVLZXkgaWYgdGhpcyBWYWx1
ZSBpcyBpbXB1cmUuIE5vdGUgdGhhdCBhbiBvcGVyYXRpb24gdGhhdCByZXR1cm5zIFZvaWQgY291
bGQgc3RpbGwKKyAgICAvLyBoYXZlIGEgbm9uLWVtcHR5IFZhbHVlS2V5LiBUaGlzIGhhcHBlbnMg
Zm9yIGV4YW1wbGUgd2l0aCBDaGVjayBvcGVyYXRpb25zLgorICAgIFZhbHVlS2V5IGtleSgpIGNv
bnN0OworCiAgICAgLy8gTWFrZXMgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIGNoaWxkcmVuIGFyZSBJ
ZGVudGl0eSdzLiBJZiBhIGNoaWxkIHBvaW50cyB0byBJZGVudGl0eSwgdGhpcyB3aWxsCiAgICAg
Ly8gcmVwb2ludCBpdCBhdCB0aGUgSWRlbnRpdHkncyBjaGlsZC4gRm9yIHNpbXBsaWNpdHksIHRo
aXMgd2lsbCBmb2xsb3cgYXJiaXRyYXJpbHkgbG9uZyBjaGFpbnMKICAgICAvLyBvZiBJZGVudGl0
eSdzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5SW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZUtl
eTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUs
ICIgIiwgbV9vcGNvZGUsICIoIiwgdS5pbmRpY2VzWzBdLCAiLCAiLCB1LmluZGljZXNbMV0sICIp
Iik7Cit9CisKK1ZhbHVlKiBWYWx1ZUtleTo6bWF0ZXJpYWxpemUoUHJvY2VkdXJlJiBwcm9jLCBP
cmlnaW4gb3JpZ2luKSBjb25zdAoreworICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPFZhbHVlPihvcGNvZGUoKSwg
dHlwZSgpLCBvcmlnaW4pOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBTRXh0ODoKKyAg
ICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICBj
YXNlIFRydW5jOgorICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICBjYXNlIERU
b0kzMjoKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KG9w
Y29kZSgpLCB0eXBlKCksIG9yaWdpbiwgY2hpbGQocHJvYywgMCkpOworICAgIGNhc2UgQWRkOgor
ICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2Fz
ZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhv
cjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNh
c2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNh
c2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNh
c2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgY2FzZSBEaXY6CisgICAg
ICAgIHJldHVybiBwcm9jLmFkZDxWYWx1ZT4ob3Bjb2RlKCksIHR5cGUoKSwgb3JpZ2luLCBjaGls
ZChwcm9jLCAwKSwgY2hpbGQocHJvYywgMSkpOworICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBzdGF0aWNfY2FzdDxpbnQzMl90
Pih2YWx1ZSgpKSk7CisgICAgY2FzZSBDb25zdDY0OgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3Q2NFZhbHVlPihvcmlnaW4sIHZhbHVlKCkpOworICAgIGNhc2UgQ29uc3REb3VibGU6Cisg
ICAgICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4sIGRvdWJsZVZh
bHVlKCkpOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxB
cmd1bWVudFJlZ1ZhbHVlPihvcmlnaW4sIFJlZzo6ZnJvbUluZGV4KHN0YXRpY19jYXN0PHVuc2ln
bmVkPih2YWx1ZSgpKSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUtleV9oCisjZGVmaW5lIEIzVmFsdWVLZXlf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzSGVhcFJhbmdlLmgiCisjaW5j
bHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CitjbGFzcyBWYWx1ZTsKKworLy8gVmFsdWVLZXlzIGFyZSB1c2VmdWwgZm9yIENTRS4gVGhl
eSBhYnN0cmFjdGx5IGRlc2NyaWJlIHRoZSB2YWx1ZSB0aGF0IGEgVmFsdWUgcmV0dXJucyB3aGVu
IGl0CisvLyBleGVjdXRlcy4gQW55IFZhbHVlIHRoYXQgaGFzIHRoZSBzYW1lIFZhbHVlS2V5IGlz
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZSBzYW1lIHZhbHVlLCBwcm92aWRlZAorLy8gdGhhdCB0
aGV5IHJldHVybiBhIG5vbi1lbXB0eSBWYWx1ZUtleS4gT3BlcmF0aW9ucyB0aGF0IGhhdmUgZWZm
ZWN0cywgb3IgdGhhdCBjYW4gaGF2ZSB0aGVpcgorLy8gYmVoYXZpb3IgYWZmZWN0ZWQgYnkgb3Ro
ZXIgb3BlcmF0aW9ucycgZWZmZWN0cywgd2lsbCByZXR1cm4gYW4gZW1wdHkgVmFsdWVLZXkuIFlv
dSBoYXZlIHRvIHVzZQorLy8gb3RoZXIgbWVjaGFuaXNtcyBmb3IgZG9pbmcgQ1NFIGZvciBpbXB1
cmUgb3BlcmF0aW9ucy4KKworY2xhc3MgVmFsdWVLZXkgeworcHVibGljOgorICAgIFZhbHVlS2V5
KCkKKyAgICB7CisgICAgfQorCisgICAgVmFsdWVLZXkoT3Bjb2RlLCBUeXBlLCBWYWx1ZSogY2hp
bGQpOworCisgICAgVmFsdWVLZXkoT3Bjb2RlLCBUeXBlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0KTsKKworICAgIFZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgaW50cHRyX3Qg
dmFsdWUpCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgIHsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIE9wY29kZSBv
cGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVuc2lnbmVkIGNoaWxkSW5kZXgodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIHUuaW5kaWNlc1tpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQo
UHJvY2VkdXJlJiwgdW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIGludDY0X3QgdmFsdWUoKSBj
b25zdCB7IHJldHVybiB1LnZhbHVlOyB9CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odS52YWx1ZSk7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWYWx1ZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vcGNvZGUgPT0gb3RoZXIubV9vcGNvZGUKKyAgICAgICAgICAgICYmIG1fdHlwZSA9PSBv
dGhlci5tX3R5cGU7CisgICAgICAgICAgICAmJiB1ID09IG90aGVyLnU7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wY29kZSArIG1fdHlwZSArIFdURjo6
UHRySGFzaDxpbnQ2NF90Pjo6aGFzaCh1LnZhbHVlKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gVmFsdWVLZXkoKTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBib29sIGNhbk1hdGVyaWFs
aXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBDaGVj
a0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQXR0ZW1wdHMgdG8gbWF0ZXJp
YWxpemUgdGhlIFZhbHVlIGZvciB0aGlzIFZhbHVlS2V5LiBNYXkgcmV0dXJuIG51bGxwdHIgaWYg
dGhlIHZhbHVlIGNhbm5vdAorICAgIC8vIGJlIG1hdGVyaWFsaXplZC4gVGhpcyBoYXBwZW5zIGZv
ciBDaGVja0FkZCBhbmQgZnJpZW5kcy4gWW91IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUoKSB0byBj
aGVjaworICAgIC8vIGlmIHlvdXIga2V5IGlzIG1hdGVyaWFsaXphYmxlLgorICAgIFZhbHVlKiBt
YXRlcmlhbGl6ZShQcm9jZWR1cmUmLCBPcmlnaW4pIGNvbnN0OworICAgICAgICAKK3ByaXZhdGU6
CisgICAgT3Bjb2RlIG1fb3Bjb2RlIHsgT29wcyB9OworICAgIFR5cGUgbV90eXBlIHsgVm9pZCB9
OworICAgIHVuaW9uIFUgeworICAgICAgICB1bnNpZ25lZCBpbmRpY2VzWzJdOworICAgICAgICBp
bnQ2NF90IHZhbHVlOworCisgICAgICAgIFUoKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1z
ZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKCp0aGlzKSk7CisgICAgICAgIH0KKyAg
ICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNWYWx1ZUtleUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlS2V5SW5s
aW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworaW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShPcGNv
ZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIFZhbHVlKiBjaGlsZCkKKyAgICA6IG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRl
eCgpOworfQorCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICA6IG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAsIG1fdHlwZSh0eXBlKQoreworICAgIHUuaW5kaWNlc1swXSA9IGxlZnQtPmluZGV4KCk7
CisgICAgdS5pbmRpY2VzWzFdID0gcmlnaHQtPmluZGV4KCk7Cit9CisKK2lubGluZSBWYWx1ZSog
VmFsdWVLZXk6OmNoaWxkKFByb2NlZHVyZSYgcHJvYywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHByb2MudmFsdWVzKClbaW5kZXhdOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVl
S2V5SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLUNvZGU6OkNvZGUoKQotICAg
IDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKK0NvZGU6OkNvZGUoUHJvY2VkdXJlJiBwcm9j
KQorICAgIDogbV9wcm9jKHByb2MpCisgICAgLCBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQog
ewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDExIEBAIGNsYXNzIENvZGUgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvZGUpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIENvZGUoKTsKKyAgICBDb2RlKFByb2NlZHVyZSYpOwogICAgIH5Db2RlKCk7CiAKKyAg
ICBQcm9jZWR1cmUmIHByb2MoKSB7IHJldHVybiBtX3Byb2M7IH0KKwogICAgIEJhc2ljQmxvY2sq
IGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKIAogICAgIFN0YWNrU2xvdCogYWRk
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1
ZSogPSBudWxscHRyKTsKQEAgLTI5Myw2ICsyOTUsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hh
ciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBoYXNlTmFtZTsgfQogCiBw
cml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jOyAvLyBTb21lIG1ldGEtZGF0YSwgbGlrZSBi
eXByb2R1Y3RzLCBpcyBzdG9yZWQgaW4gdGhlIFByb2NlZHVyZS4KICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFNwZWNpYWw+PiBtX3NwZWNpYWxzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265025</attachid>
            <date>2015-11-08 17:00:18 -0800</date>
            <delta_ts>2015-11-08 17:57:52 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65985</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTIxMzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg4LDYgKzI4OCwxOCBAQAogCQkwRjMzOERGQTFCRTk2
QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZh
bHVlLmggKi87IH07CiAJCTBGMzM4REZEMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNG
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OERGQjFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwICovOyB9OwogCQkwRjMz
OERGRTFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REZDMUJFRDUxMjcwMDEzQzg4RiAv
KiBBaXJTaW1wbGlmeUNGRy5oICovOyB9OworCQkwRjMzOEUwQjFCRjAyNzZDMDAxM0M4OEYgLyog
QjNDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOERGRjFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5jcHAgKi87
IH07CisJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZD
MDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovOyB9OworCQkwRjMzOEUwRDFCRjAyNzZDMDAx
M0M4OEYgLyogQjNEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlv
bi5jcHAgKi87IH07CisJCTBGMzM4RTBFMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUw
MjFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oICovOyB9OworCQkwRjMzOEUwRjFC
RjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M01vdmVDb25zdGFudHMuY3BwICovOyB9OworCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyog
QjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi87
IH07CisJCTBGMzM4RTExMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDUxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi87IH07CisJCTBGMzM4RTEyMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDYxQkYwMjc2QzAwMTNDODhGIC8q
IEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi87IH07CisJCTBGMzM4RTEzMUJGMDI3NkMwMDEzQzg4
RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA3MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJv
ZHVjdHMuaCAqLzsgfTsKKwkJMEYzMzhFMTQxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhF
MDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovOyB9OworCQkwRjMzOEUxNTFC
RjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXkuaCAqLzsgfTsKKwkJMEYzMzhFMTYxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCAqLzsgfTsKIAkJMEYz
NEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzOEIw
MTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMg
LyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKQEAgLTIzMTMsNiArMjMyNSwxOCBAQAogCQkw
RjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ0NhbGxWYWx1ZS5oOyBwYXRoID0gYjMvQjNDQ2FsbFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4REZCMUJFRDUxMjcwMDEzQzg4
RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTaW1wbGlmeUNGRy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU2ltcGxpZnlDRkcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOERGQzFCRUQ1MTI3MDAxM0M4OEYg
LyogQWlyU2ltcGxpZnlDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
U2ltcGxpZnlDRkcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjMzOERGRjFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxh
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbXBpbGF0
aW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29tcGlsYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbXBpbGF0aW9uLmg7IHBhdGggPSBi
My9CM0NvbXBpbGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTAx
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzRGF0YVNlY3Rpb24uY3BwOyBwYXRoID0gYjMvQjNEYXRhU2Vj
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTAyMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzRGF0YVNlY3Rpb24uaDsgcGF0aCA9IGIzL0IzRGF0YVNlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDMxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNv
bnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM01vdmVD
b25zdGFudHMuY3BwOyBwYXRoID0gYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDQxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0
YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM01vdmVDb25zdGFudHMu
aDsgcGF0aCA9IGIzL0IzTW92ZUNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGFxdWVCeXByb2R1Y3QuaDsgcGF0aCA9
IGIzL0IzT3BhcXVlQnlwcm9kdWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MzM4RTA2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGFxdWVCeXByb2R1Y3RzLmNwcDsgcGF0
aCA9IGIzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzM4RTA3MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGFxdWVCeXByb2R1Y3RzLmg7IHBhdGgg
PSBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUtleS5jcHA7IHBhdGggPSBiMy9CM1ZhbHVl
S2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDkxQkYwMjc2QzAw
MTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNWYWx1ZUtleS5oOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUtleUlubGluZXMuaDsg
cGF0aCA9IGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RG
R1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50RW50cnlwb2ludC5jcHA7IHBhdGggPSBs
bGludC9MTEludEVudHJ5cG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDQxNSw2ICs0NDM5LDggQEAKIAkJCQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
b24uaCAqLywKIAkJCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmNwcCAqLywKIAkJCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmggKi8sCisJCQkJMEYzMzhERkYxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uY3Bw
ICovLAorCQkJCTBGMzM4RTAwMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi8s
CiAJCQkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywK
IAkJCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKIAkJ
CQkwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovLApAQCAt
NDQyNiw2ICs0NDUyLDggQEAKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25z
dHJhaW5lZFZhbHVlLmggKi8sCiAJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250
cm9sVmFsdWUuaCAqLywKKwkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCisJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRkVDODVDNDFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZlY3RzLmNwcCAq
LywKIAkJCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8sCiAJCQkJ
MEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLApAQCAt
NDQ0NSw2ICs0NDczLDExIEBACiAJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5oICovLAogCQkJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZh
bHVlLmNwcCAqLywKIAkJCQkwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5oICovLAorCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMu
Y3BwICovLAorCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMu
aCAqLywKKwkJCQkwRjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3Qu
aCAqLywKKwkJCQkwRjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3Rz
LmNwcCAqLywKKwkJCQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1
Y3RzLmggKi8sCiAJCQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAq
LywKIAkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKIAkJCQkw
RkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLApAQCAtNDQ4Niw2ICs0
NTE5LDkgQEAKIAkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8s
CiAJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKIAkJCQkwRkVD
ODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRjMzOEUw
ODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgKi8sCisJCQkJMEYzMzhFMDkxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLywKKwkJCQkwRjMzOEUwQTFCRjAyNzZDMDAx
M0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCAqLywKIAkJCQkwRkVDODRGQzFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCiAJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuaCAqLywKIAkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVz
dGIzLmNwcCAqLywKQEAgLTY1MzQsNiArNjU3MCw3IEBACiAJCQkJMEZFQzg1NzAxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REZBMUJF
OTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzM4
RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVE
ZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjMxLDYgKzY2NjgsNyBAQAogCQkJCTBGRUM4
NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRF
NzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NDMs
NiArNjY4MSw3IEBACiAJCQkJOTlEQTAwQTcxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dl
bmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE4MUJE
NTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlv
bi5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE5MUJENTk5MzEwMEY0NTc1QyAvKiBidWls
dGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQkwRjMz
OEUxMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5REEwMEFBMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9zZXBh
cmF0ZV9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEEzMUJENTk5
MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5
OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAq
LywKQEAgLTY5NTksNiArNjk5OCw3IEBACiAJCQkJMkFDOTIyQkMxOEExNjE4MjAwM0NFMEZCIC8q
IEZUTERXQVJGRGVidWdMaW5lSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUz
NUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjIzNUJENjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDcxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRBcmd1bWVudExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y1MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTg1LDYgKzcwMjUsNyBAQAogCQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvTExWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlEMDIxN0EwQjkwNDAwNzcz
QUQ4IC8qIEZUTExvd2VyZWROb2RlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y5
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkREMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjIzNUJERTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzQ4LDYgKzczODksNyBAQAogCQkJ
CTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyog
TWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUwRTFCRjAyNzZD
MDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2Mzcx
QjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODYuaCBpbiBIZWFkZXJzICovLApAQCAtNzU1Miw2ICs3NTk0LDcgQEAKIAkJCQk1RDUzNzI2
RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJB
QkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjMzOEUxMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXBy
b2R1Y3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEI5NERDMTdCOUYw
NzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKQEAg
LTgyMDksNiArODI1Miw3IEBACiAJCQkJMTQ4RjIxQUExMDdFQzUzQTAwNDJFQzJDIC8qIEJ5dGVj
b2RlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOTRDNERFMUFFNDM5NTMwMDQx
QTJFRSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyRkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVCODM5MkYxQkFDQUQ2QTAwNDRFODI0IC8q
IENhY2hlZFJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODJEMTA3RUMwNTcw
MDEzRTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY0QjI3OTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjI1LDYgKzgy
NjksNyBAQAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hh
c2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGMzMxODIwMjBENzAwMkM5QjI2IC8qIENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMz
OEUwRjFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRDhBMzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdp
bi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyOTcsNiArODM0Miw3IEBACiAJCQkJQTdEODlDRjUx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzOEUxMjFCRjAyNzZDMDAxM0M4OEYgLyog
QjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0
RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJDMEY3Q0QxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODY5NCw2ICs4NzQwLDcgQEAKIAkJ
CQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzc5NEU3NTFCNzdFQjk3MDA1NTQzQUUgLyogTW9k
dWxlQW5hbHl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM1NUYzNTIxQjdEQzg1MzAwQzUw
REM1IC8qIE1vZHVsZUxvYWRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzOEUw
QjFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDQ2OURFMDEwN0VDN0U3MDA2NTA0NDYgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFMTEwN0VDN0U3MDA2NTA0NDYgLyogTmF0aXZlRXJy
b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRThEMjAxQjkwMTNERTAwMzQ2
QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3MTgs
NiArODc2NSw3IEBACiAJCQkJOTMwNTJDMzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5h
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5
bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4MzQxNzFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYzMzhFMTQxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUNENDU3NjBFMUM0RkREMDA4NTM1OEUgLyogUHJv
ZmlsZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTQwLDYgKzk0MCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuam5lKCkp
OwogICAgIH0KIAorICAgIHZvaWQgbW92ZVplcm9Ub0RvdWJsZShGUFJlZ2lzdGVySUQgcmVnKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ycGRfcnIocmVnLCByZWcpOworICAgIH0KKwog
ICAgIEp1bXAgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJlZ2lzdGVySUQgcmVnLCBGUFJlZ2lzdGVy
SUQgc2NyYXRjaCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1NTRTJQcmVzZW50KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgor
I2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K0NvbXBpbGF0aW9uOjpDb21waWxhdGlvbihWTSYgdm0sIFByb2NlZHVyZSYgcHJvYykKK3sKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisKKyAgICBtX2NvZGVSZWYg
PSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOworICAgIG1f
Ynlwcm9kdWN0cyA9IHByb2MudGFrZUJ5cHJvZHVjdHMoKTsKK30KKworQ29tcGlsYXRpb246On5D
b21waWxhdGlvbigpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21waWxhdGlvbl9o
CisjZGVmaW5lIEIzQ29tcGlsYXRpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBWTTsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3Bh
cXVlQnlwcm9kdWN0czsKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhpcyBpcyBhIGZvb2wtcHJv
b2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1cmUgdG8gY29kZSBhbmQgdGhlbiBydW5uaW5n
IHRoYXQgY29kZS4gWW91IGNvbXBpbGUKKy8vIGEgUHJvY2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5
IGRvaW5nOgorLy8KKy8vIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CisvLworLy8gVGhlbiB5
b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0IGFsaXZlIGZvciBhcyBsb2sgYXMgeW91IHdh
bnQgdG8gYmUgYWJsZSB0byBydW4gdGhlIGNvZGUuIElmCisvLyB0aGlzIEFQSSBmZWVscyB0b28g
aGlnaC1sZXZlbCwgeW91IGNhbiB1c2UgQjM6OmdlbmVyYXRlKCkgZGlyZWN0bHkuCisKK2NsYXNz
IENvbXBpbGF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21waWxhdGlvbik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBDb21waWxhdGlvbihW
TSYsIFByb2NlZHVyZSYpOworICAgIH5Db21waWxhdGlvbigpOworCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CisKK3By
aXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZVJlZjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gbV9ieXByb2R1Y3RzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNDb21waWxhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RhdGFT
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRh
U2VjdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNE
YXRhU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0RhdGFTZWN0aW9uOjpEYXRhU2VjdGlvbihz
aXplX3Qgc2l6ZSkKKyAgICA6IG1fZGF0YShmYXN0TWFsbG9jKHNpemUpKQorICAgICwgbV9zaXpl
KHNpemUpCit7Cit9CisKK0RhdGFTZWN0aW9uOjp+RGF0YVNlY3Rpb24oKQoreworICAgIGZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK3ZvaWQgRGF0YVNlY3Rpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkRhdGFTZWN0aW9uIGF0ICIsIFJhd1BvaW50ZXIo
bV9kYXRhKSwgIiB3aXRoICIsIG1fc2l6ZSwgIiBieXRlcy4iKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0RhdGFTZWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0RhdGFTZWN0aW9uX2gKKyNkZWZpbmUgQjNEYXRhU2VjdGlvbl9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIERhdGFTZWN0aW9uIDogcHVibGljIE9w
YXF1ZUJ5cHJvZHVjdCB7CitwdWJsaWM6CisgICAgRGF0YVNlY3Rpb24oc2l6ZV90IHNpemUpOwor
ICAgIHZpcnR1YWwgfkRhdGFTZWN0aW9uKCk7CisKKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3QgbV9zaXplOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNEYXRhU2VjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0xv
d2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM01vdmVDb25zdGFudHMuaCIKICNpbmNsdWRlICJCM1By
b2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKICNpbmNsdWRlICJCM1Rp
bWluZ1Njb3BlLmgiCkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmIHByb2NlZHVyZSwKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJl
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcK
IAorICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKKwogICAgIGlmIChzaG91bGRWYWxpZGF0
ZUlSKCkpCiAgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyMTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNTIsNyArMTE1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsb3dlcigpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2UgTG9hZDp7
CisgICAgICAgIGNhc2UgTG9hZDogewogICAgICAgICAgICAgYXBwZW5kKAogICAgICAgICAgICAg
ICAgIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksCiAgICAgICAgICAgICAgICAgYWRkciht
X3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKQEAgLTEyOTEsNiArMTI5MSwxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBDb25zdERvdWJs
ZTogeworICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIG1vdmVDb25zdGFudHMoKSBw
aGFzZSBoYXMgcnVuLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+a2V5KCkg
PT0gVmFsdWVLZXkoQ29uc3REb3VibGUsIERvdWJsZSwgMC4wKSk7CisgICAgICAgICAgICBhcHBl
bmQoTW92ZVplcm9Ub0RvdWJsZSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgRnJhbWVQb2ludGVyOiB7CiAgICAgICAgICAgICBh
cHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgdG1wKG1fdmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01vdmVDb25zdGFudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM01vdmVDb25zdGFudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJC
M0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBNb3ZlQ29uc3RhbnRzIHsKK3B1YmxpYzoK
KyAgICBNb3ZlQ29uc3RhbnRzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBtX3Byb2MocHJv
YykKKyAgICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIHJ1bigpCisgICAgeworICAgICAgICAvLyBFdmVudHVhbGx5IHRoaXMgcGhhc2Ugd2lsbCBk
byBzbWFydCB0aGluZ3MuIEZvciBub3csIGl0IHVzZXMgYSBzdXBlciBzaW1wbGUgaGV1cmlzdGlj
OiBpdAorICAgICAgICAvLyBwbGFjZXMgbGFyZ2UgY29uc3RhbnRzIGluIHRoZSBibG9jayB0aGF0
IHVzZXMgdGhlbSwgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIGJsb2NrIGhhcworICAgICAgICAv
LyBvbmx5IG9uZSBtYXRlcmlhbGl6YXRpb24gZm9yIGVhY2ggbGFyZ2UgY29uc3RhbnQuCisKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIGJldHRlciBzdG9yeSBmb3IgY29uc3RhbnRzLiBB
dCBhIG1pbmltdW0gdGhpcyBzaG91bGQgYWxsb3cgdGhlIEIzCisgICAgICAgIC8vIGNsaWVudCB0
byBzcGVjaWZ5IGltcG9ydGFudCBjb25zdGFudHMgdGhhdCBhbHdheXMgZ2V0IGhvaXN0ZWQuIEFs
c28sIHRoZSB0YWJsZSB1c2VkIHRvCisgICAgICAgIC8vIGhvbGQgZG91YmxlIGNvbnN0YW50cyBz
aG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQg
dG8gYmUgbW9yZQorICAgICAgICAvLyBhZ2dyZXNzaXZlLCB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50
IG1hdGVyaWFsaXphdGlvbiBiZSBhIGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3VsZCBsYWJlbAorICAg
ICAgICAvLyBzb21lIFRtcHMgYXMgYmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBo
YXZlIGEgbGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJlZ2lzdGVyCisgICAgICAgIC8vIGFsbG9jYXRp
b24gLSB0aGF0IGNyZWF0ZXMgbWF0ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBz
IGJ5IHNjYXZlbmdpbmcgbGVmdG92ZXIKKyAgICAgICAgLy8gcmVnaXN0ZXJzLgorCisgICAgICAg
IC8vIEZpcnN0IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25zdGFudHMgZ28gaW50byB0
aGUgZGF0YSBzZWN0aW9uLiBUaGVzZSBhcmUgbm9uLXplcm8KKyAgICAgICAgLy8gZG91YmxlIGNv
bnN0YW50cy4KKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVzKCkpIHsK
KyAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKKyAgICAgICAgICAgIGlm
IChnb2VzSW5UYWJsZShrZXkpKQorICAgICAgICAgICAgICAgIG1fY29uc3RUYWJsZS5hZGQoa2V5
LCBtX2NvbnN0VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9k
YXRhU2VjdGlvbiA9IG1fcHJvYy5hZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICog
c2l6ZW9mKGludHB0cl90KSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFi
bGUpCisgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52
YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2Mp
IHsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBi
bG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSomIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuZWVkc01v
dGlvbihjaGlsZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgICAgICBjaGlsZCA9IG1hdGVyaWFsaXplKHZhbHVlSW5kZXgsIGNoaWxkLT5rZXko
KSwgdmFsdWUtPm9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwor
ICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIFZhbHVlKiBtYXRlcmlhbGl6ZSh1bnNp
Z25lZCB2YWx1ZUluZGV4LCBjb25zdCBWYWx1ZUtleSYga2V5LCBjb25zdCBPcmlnaW4mIG9yaWdp
bikKKyAgICB7CisgICAgICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbV9jb25zdGFudHMuZ2V0KGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBkZWxpYmVyYXRlbHkgZG9uJ3QgZG8gdGhpcyBpbiBvbmUgYWRkKCkgYmVjYXVzZSB0aGlzIGlz
IGEgcmVjdXJzaXZlIGZ1bmN0aW9uCisgICAgICAgIC8vIHRoYXQgbWF5IHJlaGFzaCB0aGUgbWFw
LgorCisgICAgICAgIFZhbHVlKiByZXN1bHQ7CisgICAgICAgIGlmIChnb2VzSW5UYWJsZShrZXkp
KSB7CisgICAgICAgICAgICBWYWx1ZSogdGFibGVCYXNlID0gbWF0ZXJpYWxpemUoCisgICAgICAg
ICAgICAgICAgVmFsdWVLZXkoY29uc3RQdHJPcGNvZGUoKSwgcG9pbnRlclR5cGUoKSwgYml0d2lz
ZV9jYXN0PGludHB0cl90PihtX2RhdGFTZWN0aW9uKSksCisgICAgICAgICAgICAgICAgb3JpZ2lu
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1
ZT4oCisgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwga2V5LnR5cGUoKSwgb3JpZ2lu
LCB0YWJsZUJhc2UsCisgICAgICAgICAgICAgICAgc2l6ZW9mKGludHB0cl90KSAqIG1fY29uc3RU
YWJsZS5nZXQoa2V5KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUodmFsdWVJbmRleCwga2V5Lm1hdGVyaWFsaXplKG1fcHJv
Yywgb3JpZ2luKSk7CisgICAgICAgIG1fY29uc3RhbnRzLmFkZChrZXksIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBnb2VzSW5UYWJsZShjb25zdCBW
YWx1ZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5vcGNvZGUoKSA9PSBDb25z
dERvdWJsZSAmJiBrZXkgIT0gZG91YmxlWmVybygpOworICAgIH0KKworICAgIGJvb2wgbmVlZHNN
b3Rpb24oY29uc3QgVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IDMyLWJpdCBpbnQgY29uc3RhbnRzIGFyZSBhbHdh
eXMgY2hlYXAgdG8gbWF0ZXJpYWxpemUuCisgICAgICAgIC8vIFRoaXMgaXMgd3JvbmcgZm9yIEFS
TS4gV2UgbmVlZCBzb21lIGFic3RyYWN0IHF1ZXJ5IGxpa2UgImlzSW1tZWRpYXRlKGludDY0X3Qp
Ii4gT24KKyAgICAgICAgLy8gQVJNNjQgdGhpcyB3b3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUg
d2F5IHRoYXQgQVJNNjQgY2FuIGVuY29kZSBsYXJnZSBjb25zdGFudHMuCisgICAgICAgIGlmICh2
YWx1ZS0+aGFzSW50KCkgJiYgdmFsdWUtPnJlcHJlc2VudGFibGVBczxpbnQzMl90PigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBWYWx1ZUtleSBkb3VibGVaZXJvKCkKKyAgICB7CisgICAgICAgIHJldHVybiBW
YWx1ZUtleShDb25zdERvdWJsZSwgRG91YmxlLCAwLjApOworICAgIH0KKyAgICAKKyAgICBIYXNo
TWFwPFZhbHVlS2V5LCB1bnNpZ25lZD4gbV9jb25zdFRhYmxlOworICAgIGludHB0cl90KiBtX2Rh
dGFTZWN0aW9uOworICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gbV9jb25zdGFudHM7Cisg
ICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK3ZvaWQgbW92ZUNvbnN0YW50cyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJtb3ZlQ29uc3RhbnRzIik7CisgICAgTW92ZUNvbnN0
YW50cyBtb3ZlQ29uc3RhbnRzKHByb2MpOworICAgIG1vdmVDb25zdGFudHMucnVuKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNb3ZlQ29uc3RhbnRzX2gKKyNkZWZpbmUgQjNN
b3ZlQ29uc3RhbnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIE1vdmVzIGxhcmdlIGNvbnN0
YW50cyBhcm91bmQsIHdpdGggdGhlIGdvYWwgb2YgcGxhY2luZyB0aGVtIGluIHRoZSBvcHRpbWFs
IHBvaW50cyBpbiB0aGUgcHJvZ3JhbS4KKworYm9vbCBtb3ZlQ29uc3RhbnRzKFByb2NlZHVyZSYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM01vdmVDb25zdGFudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM09wYXF1ZUJ5cHJvZHVjdF9oCisjZGVmaW5lIEIzT3BhcXVlQnlwcm9kdWN0
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3BhcXVlQnlwcm9k
dWN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVCeXByb2R1Y3QpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9wYXF1ZUJ5cHJvZHVjdCgpIHsg
fQorICAgIHZpcnR1YWwgfk9wYXF1ZUJ5cHJvZHVjdCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wYXF1ZUJ5
cHJvZHVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJv
ZHVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1
ZUJ5cHJvZHVjdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3BhcXVlQnlwcm9kdWN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworT3BhcXVlQnlwcm9k
dWN0czo6T3BhcXVlQnlwcm9kdWN0cygpCit7Cit9CisKK09wYXF1ZUJ5cHJvZHVjdHM6On5PcGFx
dWVCeXByb2R1Y3RzKCkKK3sKK30KKwordm9pZCBPcGFxdWVCeXByb2R1Y3RzOjphZGQoc3RkOjp1
bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdD4gYnlwcm9kdWN0KQoreworICAgIG1fYnlwcm9kdWN0
cy5hcHBlbmQoV1RGOjptb3ZlKGJ5cHJvZHVjdCkpOworfQorCit2b2lkIE9wYXF1ZUJ5cHJvZHVj
dHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJ5cHJv
ZHVjdHM6XG4iKTsKKyAgICBpZiAobV9ieXByb2R1Y3RzLmlzRW1wdHkoKSkgeworICAgICAgICBv
dXQucHJpbnQoIiAgICA8ZW1wdHk+XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBm
b3IgKGF1dG8mIGJ5cHJvZHVjdCA6IG1fYnlwcm9kdWN0cykKKyAgICAgICAgb3V0LnByaW50KCIg
ICAgIiwgKmJ5cHJvZHVjdCwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNPcGFxdWVCeXByb2R1Y3RzX2gKKyNkZWZpbmUgQjNPcGFxdWVCeXByb2R1Y3Rz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdC5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVCeXByb2R1Y3RzKQorICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICB+T3BhcXVl
Qnlwcm9kdWN0cygpOworCisgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXBy
b2R1Y3RzLnNpemUoKTsgfQorICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxPcGFx
dWVCeXByb2R1Y3Q+KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0Pj4gbV9i
eXByb2R1Y3RzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGFxdWVCeXByb2R1Y3RzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiAr
MjA5LDEzIEBAIGlubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCiAKIE9wdGlv
bmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9wY29kZSwgVHlwZSk7CiAKK2lubGluZSBPcGNv
ZGUgY29uc3RQdHJPcGNvZGUoKQoreworICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgIHJldHVy
biBDb25zdDY0OworICAgIHJldHVybiBDb25zdDMyOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNSBAQAog
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tV
dGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzRGF0YVNl
Y3Rpb24uaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogUHJvY2Vk
dXJlOjpQcm9jZWR1cmUoKQogICAgIDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKKyAgICAs
IG1fYnlwcm9kdWN0cyhzdGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiB7CiB9
CiAKQEAgLTEwNyw2ICsxMTAsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjCiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQogICAgICAgICBv
dXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobV9ieXByb2R1Y3RzLT5jb3VudCgp
KQorICAgICAgICBvdXQucHJpbnQoKm1fYnlwcm9kdWN0cyk7CiB9CiAKIFZlY3RvcjxCYXNpY0Js
b2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9yZGVyKCkKQEAgLTEyNiw2ICsxMzEsMTYgQEAg
dm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKFZhbHVlKiB2YWx1ZQogICAgIG1fdmFsdWVzW3Zh
bHVlLT5pbmRleCgpXSA9IG51bGxwdHI7CiB9CiAKK3ZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNl
Y3Rpb24oc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVNlY3Rpb24+IGRhdGFTZWN0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxEYXRhU2VjdGlvbj4oc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gZGF0
YVNlY3Rpb24tPmRhdGEoKTsKKyAgICBtX2J5cHJvZHVjdHMuYWRkKFdURjo6bW92ZShkYXRhU2Vj
dGlvbikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHNpemVfdCBQcm9jZWR1cmU6OmFkZFZh
bHVlSW5kZXgoKQogewogICAgIGlmIChtX3ZhbHVlSW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIx
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjAxLDYgKzIwMSwxOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBjaGFyKiBsYXN0
UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9CiAKKyAgICB2b2lk
KiBhZGREYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSk7CisKKyAgICBPcGFxdWVCeXByb2R1Y3RzJiBi
eXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlwcm9kdWN0czsgfQorCisgICAgLy8gQmVsb3cgYXJl
IG1ldGhvZHMgdGhhdCBtYWtlIHNlbnNlIHRvIGNhbGwgYWZ0ZXIgeW91IGhhdmUgZ2VuZXJhdGVk
IGNvZGUgZm9yIHRoZSBwcm9jZWR1cmUuCisKKyAgICAvLyBZb3UgaGF2ZSB0byBjYWxsIHRoaXMg
bWV0aG9kIGFmdGVyIGNhbGxpbmcgZ2VuZXJhdGUoKS4gVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IEIz
OjpnZW5lcmF0ZSgpCisgICAgLy8gd2lsbCByZXF1aXJlIHlvdSB0byBrZWVwIHRoaXMgb2JqZWN0
IGFsaXZlIGZvciBhcyBsb25nIGFzIHRoYXQgY29kZSBpcyBydW5uYWJsZS4gVXN1YWxseSwgdGhp
cworICAgIC8vIGp1c3Qga2VlcHMgYWxpdmUgdGhpbmdzIGxpa2UgdGhlIGRvdWJsZSBjb25zdGFu
dCBwb29sIGFuZCBzd2l0Y2ggbG9va3VwIHRhYmxlcy4gSWYgdGhpcyBzb3VuZHMKKyAgICAvLyBj
b25mdXNpbmcsIHlvdSBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgdGhlIEIzOjpDb21waWxhdGlv
biBBUEkgdG8gY29tcGlsZSBjb2RlLiBJZiB5b3UgdXNlCisgICAgLy8gdGhhdCBBUEksIHRoZW4g
eW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
T3BhcXVlQnlwcm9kdWN0cz4gdGFrZUJ5cHJvZHVjdHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9i
eXByb2R1Y3RzKTsgfQorCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBh
ZGRWYWx1ZUluZGV4KCk7CiAgICAgCkBAIC0yMDgsNiArMjIxLDcgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1ZXM7CiAgICAgVmVjdG9yPHNpemVf
dD4gbV92YWx1ZUluZGV4RnJlZUxpc3Q7CiAgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1l
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBtX2J5cHJvZHVjdHM7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKIAotZW51bSBUeXBlIHsKK2VudW0gVHlwZSA6IGludDhfdCB7CiAgICAg
Vm9pZCwKICAgICBJbnQzMiwKICAgICBJbnQ2NCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDYgKzM1Niw1OSBAQCBFZmZlY3Rz
IFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitWYWx1ZUtl
eSBWYWx1ZTo6a2V5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2Fz
ZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShvcGNvZGUoKSwgdHlwZSgp
KTsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6
CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgY2FzZSBUcnVuYzoKKyAg
ICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2Fz
ZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9wY29kZSgpLCB0eXBlKCksIGNoaWxk
KDApKTsKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBj
YXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2Ug
Qml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgor
ICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAg
Y2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgQWJvdmU6Cisg
ICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFs
OgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoK
KyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gVmFsdWVLZXkob3Bjb2RlKCksIHR5
cGUoKSwgY2hpbGQoMCksIGNoaWxkKDEpKTsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIHJl
dHVybiBWYWx1ZUtleShDb25zdDMyLCB0eXBlKCksIGFzSW50MzIoKSk7CisgICAgY2FzZSBDb25z
dDY0OgorICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3Q2NCwgdHlwZSgpLCBhc0ludDY0KCkp
OworICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShDb25zdERv
dWJsZSwgdHlwZSgpLCBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUoKSkpOworICAgIGNh
c2UgQXJndW1lbnRSZWc6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShBcmd1bWVudFJlZywgdHlw
ZSgpLCBhczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygpLmluZGV4KCkpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBWYWx1ZUtleSgpOworICAgIH0KK30KKwogdm9pZCBW
YWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbigpCiB7CiAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDog
Y2hpbGRyZW4oKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lv
biAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjcsOSArMTY3LDE0IEBAIHB1YmxpYzoKICAgICBUcmlTdGF0ZSBhc1RyaVN0
YXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xpa2VaZXJvKCkgY29uc3QgeyByZXR1cm4gYXNUcmlT
dGF0ZSgpID09IEZhbHNlVHJpU3RhdGU7IH0KICAgICBib29sIGlzTGlrZU5vblplcm8oKSBjb25z
dCB7IHJldHVybiBhc1RyaVN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOyB9Ci0gICAgCisKICAgICBF
ZmZlY3RzIGVmZmVjdHMoKSBjb25zdDsKIAorICAgIC8vIFRoaXMgcmV0dXJucyBhIFZhbHVlS2V5
IHRoYXQgZGVzY3JpYmVzIHRoYXQgdGhpcyBWYWx1ZSByZXR1cm5zIHdoZW4gaXQgZXhlY3V0ZXMu
IFJldHVybnMgYW4KKyAgICAvLyBlbXB0eSBWYWx1ZUtleSBpZiB0aGlzIFZhbHVlIGlzIGltcHVy
ZS4gTm90ZSB0aGF0IGFuIG9wZXJhdGlvbiB0aGF0IHJldHVybnMgVm9pZCBjb3VsZCBzdGlsbAor
ICAgIC8vIGhhdmUgYSBub24tZW1wdHkgVmFsdWVLZXkuIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBs
ZSB3aXRoIENoZWNrIG9wZXJhdGlvbnMuCisgICAgVmFsdWVLZXkga2V5KCkgY29uc3Q7CisKICAg
ICAvLyBNYWtlcyBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgY2hpbGRyZW4gYXJlIElkZW50aXR5J3Mu
IElmIGEgY2hpbGQgcG9pbnRzIHRvIElkZW50aXR5LCB0aGlzIHdpbGwKICAgICAvLyByZXBvaW50
IGl0IGF0IHRoZSBJZGVudGl0eSdzIGNoaWxkLiBGb3Igc2ltcGxpY2l0eSwgdGhpcyB3aWxsIGZv
bGxvdyBhcmJpdHJhcmlseSBsb25nIGNoYWlucwogICAgIC8vIG9mIElkZW50aXR5J3MuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlS2V5OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCBtX29w
Y29kZSwgIigiLCB1LmluZGljZXNbMF0sICIsICIsIHUuaW5kaWNlc1sxXSwgIikiKTsKK30KKwor
VmFsdWUqIFZhbHVlS2V5OjptYXRlcmlhbGl6ZShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmln
aW4pIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcGNvZGUoKSkgeworICAgIGNhc2UgRnJhbWVQb2lu
dGVyOgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KG9wY29kZSgpLCB0eXBlKCksIG9y
aWdpbik7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4
dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgIGNhc2UgVHJ1bmM6
CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgRFRvSTMyOgorICAg
IGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxWYWx1ZT4ob3Bjb2RlKCksIHR5
cGUoKSwgb3JpZ2luLCBjaGlsZChwcm9jLCAwKSk7CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBT
dWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAg
ICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNh
c2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBFcXVhbDoK
KyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVy
VGhhbjoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVx
dWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICBjYXNlIERpdjoKKyAgICAgICAgcmV0dXJu
IHByb2MuYWRkPFZhbHVlPihvcGNvZGUoKSwgdHlwZSgpLCBvcmlnaW4sIGNoaWxkKHByb2MsIDAp
LCBjaGlsZChwcm9jLCAxKSk7CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICByZXR1cm4gcHJv
Yy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKCkp
KTsKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFs
dWU+KG9yaWdpbiwgdmFsdWUoKSk7CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgcmV0
dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbiwgZG91YmxlVmFsdWUoKSk7Cisg
ICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPEFyZ3VtZW50UmVn
VmFsdWU+KG9yaWdpbiwgUmVnOjpmcm9tSW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVl
KCkpKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlS2V5X2gKKyNkZWZpbmUgQjNWYWx1ZUtleV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJCM09w
Y29kZS5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNz
IFZhbHVlOworCisvLyBWYWx1ZUtleXMgYXJlIHVzZWZ1bCBmb3IgQ1NFLiBUaGV5IGFic3RyYWN0
bHkgZGVzY3JpYmUgdGhlIHZhbHVlIHRoYXQgYSBWYWx1ZSByZXR1cm5zIHdoZW4gaXQKKy8vIGV4
ZWN1dGVzLiBBbnkgVmFsdWUgdGhhdCBoYXMgdGhlIHNhbWUgVmFsdWVLZXkgaXMgZ3VhcmFudGVl
ZCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIHByb3ZpZGVkCisvLyB0aGF0IHRoZXkgcmV0dXJu
IGEgbm9uLWVtcHR5IFZhbHVlS2V5LiBPcGVyYXRpb25zIHRoYXQgaGF2ZSBlZmZlY3RzLCBvciB0
aGF0IGNhbiBoYXZlIHRoZWlyCisvLyBiZWhhdmlvciBhZmZlY3RlZCBieSBvdGhlciBvcGVyYXRp
b25zJyBlZmZlY3RzLCB3aWxsIHJldHVybiBhbiBlbXB0eSBWYWx1ZUtleS4gWW91IGhhdmUgdG8g
dXNlCisvLyBvdGhlciBtZWNoYW5pc21zIGZvciBkb2luZyBDU0UgZm9yIGltcHVyZSBvcGVyYXRp
b25zLgorCitjbGFzcyBWYWx1ZUtleSB7CitwdWJsaWM6CisgICAgVmFsdWVLZXkoKQorICAgIHsK
KyAgICB9CisKKyAgICBWYWx1ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CisKKyAg
ICBWYWx1ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOworCisg
ICAgVmFsdWVLZXkoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBpbnRwdHJfdCB2YWx1ZSkKKyAg
ICAgICAgOiBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgewor
ICAgICAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgVmFsdWVLZXkoT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICAgICAgdS5kb3VibGVWYWx1ZSA9
IHZhbHVlOworICAgIH0KKworICAgIFZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwg
CisKKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB1bnNpZ25lZCBjaGlsZElu
ZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiB1LmluZGljZXNbaW5kZXhdOyB9Cisg
ICAgVmFsdWUqIGNoaWxkKFByb2NlZHVyZSYsIHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBp
bnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdS52YWx1ZTsgfQorICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHUuZG91YmxlVmFsdWU7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWYWx1ZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vcGNvZGUgPT0gb3RoZXIubV9vcGNvZGUKKyAgICAgICAgICAgICYmIG1fdHlwZSA9PSBv
dGhlci5tX3R5cGU7CisgICAgICAgICAgICAmJiB1ID09IG90aGVyLnU7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wY29kZSArIG1fdHlwZSArIFdURjo6
UHRySGFzaDxpbnQ2NF90Pjo6aGFzaCh1LnZhbHVlKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gVmFsdWVLZXkoKTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBib29sIGNhbk1hdGVyaWFs
aXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBDaGVj
a0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQXR0ZW1wdHMgdG8gbWF0ZXJp
YWxpemUgdGhlIFZhbHVlIGZvciB0aGlzIFZhbHVlS2V5LiBNYXkgcmV0dXJuIG51bGxwdHIgaWYg
dGhlIHZhbHVlIGNhbm5vdAorICAgIC8vIGJlIG1hdGVyaWFsaXplZC4gVGhpcyBoYXBwZW5zIGZv
ciBDaGVja0FkZCBhbmQgZnJpZW5kcy4gWW91IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUoKSB0byBj
aGVjaworICAgIC8vIGlmIHlvdXIga2V5IGlzIG1hdGVyaWFsaXphYmxlLgorICAgIFZhbHVlKiBt
YXRlcmlhbGl6ZShQcm9jZWR1cmUmLCBPcmlnaW4pIGNvbnN0OworCisgICAgVmFsdWVLZXkoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdHlwZSB7IEludDMyIH0K
KyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVLZXkoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAgICAgCitwcml2YXRlOgorICAgIE9wY29kZSBtX29w
Y29kZSB7IE9vcHMgfTsKKyAgICBUeXBlIG1fdHlwZSB7IFZvaWQgfTsKKyAgICB1bmlvbiBVIHsK
KyAgICAgICAgdW5zaWduZWQgaW5kaWNlc1syXTsKKyAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworCisgICAgICAgIFUoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKCp0aGlzKSk7Cisg
ICAgICAgIH0KKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgVmFsdWVLZXlIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBWYWx1ZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVLZXkmIGEsIGNvbnN0IFZhbHVl
S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OlZhbHVl
S2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpWYWx1ZUtleUhhc2ggSGFzaDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SGFzaFRyYWl0czxKU0M6OkIzOjpWYWx1ZUtleT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6QjM6OlZhbHVlS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUtleV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVLZXlJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUtl
eUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXko
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBWYWx1ZSogY2hpbGQpCisgICAgOiBtX29wY29kZShv
cGNvZGUpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKKyAgICB1LmluZGljZXNbMF0gPSBjaGlsZC0+
aW5kZXgoKTsKK30KKworaW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgOiBtX29wY29kZShvcGNv
ZGUpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKKyAgICB1LmluZGljZXNbMF0gPSBsZWZ0LT5pbmRl
eCgpOworICAgIHUuaW5kaWNlc1sxXSA9IHJpZ2h0LT5pbmRleCgpOworfQorCitpbmxpbmUgVmFs
dWUqIFZhbHVlS2V5OjpjaGlsZChQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBwcm9jLnZhbHVlcygpW2luZGV4XTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNW
YWx1ZUtleUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogCiAjaW5jbHVkZSAiQjNBcmd1bWVu
dFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCi0jaW5jbHVk
ZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKQEAgLTY3LDE2ICs2
NywxMyBAQCBuYW1lc3BhY2UgewogCiBWTSogdm07CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogewotICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOwotICAgIGdlbmVyYXRlKHByb2NlZHVyZSwgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsICgidGVzdGIzIikpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0
aW9uPigqdm0sIHByb2NlZHVyZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29k
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1QgaW52b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBj
b2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewogICAgIFQgKCpmdW5jdGlvbikoQXJndW1l
bnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwpA
QCAtODUsNyArODIsNyBAQCBUIGludm9rZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNv
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBUIGNvbXBpbGVB
bmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0g
ICAgcmV0dXJuIGludm9rZTxUPihjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7Cisg
ICAgcmV0dXJuIGludm9rZTxUPigqY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOwog
fQogCiB2b2lkIHRlc3Q0MigpCkBAIC0xODMzLDggKzE4MzAsOCBAQCB2b2lkIHRlc3RCcmFuY2go
KQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52
b2tlPGludD4oY29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDAp
ID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hQdHIo
KQpAQCAtMTg1OCw4ICsxODU1LDggQEAgdm9pZCB0ZXN0QnJhbmNoUHRyKCkKICAgICAgICAgZWxz
ZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUs
IHN0YXRpY19jYXN0PGludHB0cl90Pig0MikpID09IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+
KGNvZGUsIHN0YXRpY19jYXN0PGludHB0cl90PigwKSkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIHN0YXRpY19jYXN0PGludHB0cl90Pig0MikpID09IDEpOworICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMCkpID09IDApOwogfQog
CiB2b2lkIHRlc3REaWFtb25kKCkKQEAgLTE4OTEsOCArMTg4OCw4IEBAIHZvaWQgdGVzdERpYW1v
bmQoKQogICAgIGRvbmUtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBoaSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENIRUNL
KGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2Rl
LCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOworICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0QnJhbmNo
Tm90RXF1YWwoKQpAQCAtMTkyMSw4ICsxOTE4LDggQEAgdm9pZCB0ZXN0QnJhbmNoTm90RXF1YWwo
KQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52
b2tlPGludD4oY29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDAp
ID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hOb3RF
cXVhbENvbW11dGUoKQpAQCAtMTk1MSw4ICsxOTQ4LDggQEAgdm9pZCB0ZXN0QnJhbmNoTm90RXF1
YWxDb21tdXRlKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAwKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAg
IENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50
Pihjb2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEp
OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0
QnJhbmNoTm90RXF1YWxOb3RFcXVhbCgpCkBAIC0xOTg0LDggKzE5ODEsOCBAQCB2b2lkIHRlc3RC
cmFuY2hOb3RFcXVhbE5vdEVxdWFsKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVD
SyhpbnZva2U8aW50Pihjb2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgNDIpID09IDEpOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0K
IAogdm9pZCB0ZXN0QnJhbmNoRXF1YWwoKQpAQCAtMjAxNCw4ICsyMDExLDggQEAgdm9pZCB0ZXN0
QnJhbmNoRXF1YWwoKQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEpKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0g
ICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxp
bnQ+KGNvZGUsIDApID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0g
MSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRl
c3RCcmFuY2hFcXVhbEVxdWFsKCkKQEAgLTIwNDcsOCArMjA0NCw4IEBAIHZvaWQgdGVzdEJyYW5j
aEVxdWFsRXF1YWwoKQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0g
ICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxp
bnQ+KGNvZGUsIDApID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0g
MSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRl
c3RCcmFuY2hFcXVhbENvbW11dGUoKQpAQCAtMjA3Nyw4ICsyMDc0LDggQEAgdm9pZCB0ZXN0QnJh
bmNoRXF1YWxDb21tdXRlKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAxKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZv
a2U8aW50Pihjb2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIp
ID09IDEpOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9p
ZCB0ZXN0QnJhbmNoRXF1YWxFcXVhbDEoKQpAQCAtMjExMCw4ICsyMTA3LDggQEAgdm9pZCB0ZXN0
QnJhbmNoRXF1YWxFcXVhbDEoKQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGlu
dm9rZTxpbnQ+KGNvZGUsIDApID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0
MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2
b2lkIHRlc3RCcmFuY2hGb2xkKGludCB2YWx1ZSkKQEAgLTIzOTcsMTAgKzIzOTQsMTAgQEAgdm9p
ZCB0ZXN0U2ltcGxlQ2hlY2soKQogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAog
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CiAgICAg
Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7Ci0gICAgQ0hFQ0soaW52b2tl
PGludD4oY29kZSwgMSkgPT0gNDIpOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9
PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMSkgPT0gNDIpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMZWZ0RnVuY3RvciwgdHlwZW5hbWUgUmlnaHRGdW5jdG9yPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTIxMzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw4ICszNCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKIAotQ29kZTo6Q29kZSgpCi0gICAgOiBtX2xhc3RQaGFzZU5hbWUoImlu
aXRpYWwiKQorQ29kZTo6Q29kZShQcm9jZWR1cmUmIHByb2MpCisgICAgOiBtX3Byb2MocHJvYykK
KyAgICAsIG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSAr
NTAsMTEgQEAgY2xhc3MgQ29kZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQ29kZSgpOworICAgIENv
ZGUoUHJvY2VkdXJlJik7CiAgICAgfkNvZGUoKTsKIAorICAgIFByb2NlZHVyZSYgcHJvYygpIHsg
cmV0dXJuIG1fcHJvYzsgfQorCiAgICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOwogCiAgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOwpAQCAtMjkz
LDYgKzI5NSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9CiAKIHByaXZhdGU6CisgICAgUHJvY2VkdXJl
JiBtX3Byb2M7IC8vIFNvbWUgbWV0YS1kYXRhLCBsaWtlIGJ5cHJvZHVjdHMsIGlzIHN0b3JlZCBp
biB0aGUgUHJvY2VkdXJlLgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4g
bV9zdGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1f
YmxvY2tzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOSBAQCBNb3ZlRG91
YmxlIFU6RiwgRDpGCiAgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCiAgICAgVG1wLCBJbmRl
eCBhcyBzdG9yZURvdWJsZQogCitNb3ZlWmVyb1RvRG91YmxlIEQ6RgorICAgIFRtcAorCiBNb3Zl
NjRUb0RvdWJsZSBVOkcsIEQ6RgogICAgIFRtcCwgVG1wCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265026</attachid>
            <date>2015-11-08 17:57:52 -0800</date>
            <delta_ts>2015-11-08 18:10:41 -0800</delta_ts>
            <desc>probably done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80012</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBA
QAorMjAxNS0xMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggYSBkb3VibGUgY29u
c3RhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MTAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgaW1wbGVtZW50cyBhIGJ1bmNoIG9mIGFubm95aW5nIHN0dWZmIHRoYXQgaXMgbmVjZXNzYXJ5
IHRvIHN1cHBvcnQgY29uc3RhbnRzIHRoYXQgbmVlZCBhCisgICAgICAgIGRhdGEgc2VjdGlvbiwg
c3VjaCBhcyBkb3VibGUgY29uc3RhbnRzIG9uIFg4Nl82NDoKKworICAgICAgICAtIEIzOjpQcm9j
ZWR1cmUgY2FuIG5vdyB0ZWxsIHlvdSB3aGF0IHRvIGtlZXAgYWxpdmUgaW4gYWRkaXRpb24gdG8g
dGhlIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi4KKyAgICAgICAgICBXZSBjYWxsIHRoaXMgdGhlIEIz
OjpPcGFxdWVCeXByb2R1Y3RzLiBJdCdzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byBr
ZWVwIHRoaXMgYWxpdmUKKyAgICAgICAgICBhZnRlciBjYWxsaW5nIEIzOjpnZW5lcmF0ZSgpLgor
CisgICAgICAgIC0gQWRkZWQgYSBuZXcgaGVscGVyIGZvciBjb21waWxpbmcgQjMgY29kZSwgY2Fs
bGVkIEIzOjpDb21waWxhdGlvbi4gQ29uc3RydWN0aW5nIGEKKyAgICAgICAgICBDb21waWxhdGlv
biBydW5zIHRoZSBjb21waWxlci4gVGhlbiB5b3UgY2FuIHBhc3MgYXJvdW5kIGEgQ29tcGlsYXRp
b24gdGhlIHdheSB5b3Ugd291bGQKKyAgICAgICAgICBoYXZlIHBhc3NlZCBhcm91bmQgYSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuCisKKyAgICAgICAgLSBBZGRlZCBhIGNvbnN0YW50IG1vdGlvbiBw
aGFzZSwgY2FsbGVkIG1vdmVDb25zdGFudHMoKS4gVGhpcyBkb2VzIHZlcnkgc2ltcGxlIGNvbnN0
YW50CisgICAgICAgICAgaG9pc3Rpbmcvc2lua2luZzogaXQgbWFrZXMgc3VyZSB0aGF0IGVhY2gg
Y29uc3RhbnQgaXMgb25seSBtYXRlcmlhbGl6ZWQgaW4gb25lIHBsYWNlIGluCisgICAgICAgICAg
ZWFjaCBiYXNpYyBibG9jay4gSXQgdXNlcyBhIERhdGFTZWN0aW9uLCB3aGljaCBpcyBhIGtpbmQg
b2YgT3BhcXVlQnlwcm9kdWN0LCB0byBzdG9yZQorICAgICAgICAgIGRvdWJsZSBjb25zdGFudHMu
CisKKyAgICAgICAgLSBGaXhlZCB0aGUgbG93ZXJpbmcncyBoYW5kbGluZyBvZiBjb25zdGFudHMg
c28gdGhhdCB3ZSBkb24ndCBwZXJ0dXJiIHRoZSBwbGFjZW1lbnQgb2YgdGhlCisgICAgICAgICAg
Y29uc3RhbnQgbWF0ZXJpYWxpemF0aW9ucy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpi
cmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjptb3ZlWmVyb1RvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmJyYW5jaERvdWJsZU5vblplcm8pOgorICAgICAgICAqIGIzL0IzQ29tbW9u
Lmg6CisgICAgICAgIChKU0M6OkIzOjppc0lkZW50aWNhbCk6CisgICAgICAgIChKU0M6OkIzOjpp
c1JlcHJlc2VudGFibGVBc0ltcGwpOgorICAgICAgICAqIGIzL0IzQ29tcGlsYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpDb21waWxhdGlvbik6CisgICAg
ICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6fkNvbXBpbGF0aW9uKToKKyAgICAgICAgKiBiMy9C
M0NvbXBpbGF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNv
ZGUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOgorICAgICAgICAoSlNDOjpC
Mzo6Q29uc3REb3VibGVWYWx1ZTo6YWNjZXB0cyk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNE
YXRhU2VjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RGF0YVNlY3Rpb246OkRh
dGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkRhdGFTZWN0aW9uOjp+RGF0YVNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6RGF0YVNlY3Rpb246OmR1bXApOgorICAgICAgICAqIGIzL0Iz
RGF0YVNlY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpEYXRhU2VjdGlvbjo6ZGF0
YSk6CisgICAgICAgIChKU0M6OkIzOjpEYXRhU2VjdGlvbjo6c2l6ZSk6CisgICAgICAgICogYjMv
QjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZSk6CisgICAgICAgIChK
U0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjppbW0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjppbW1PclRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmZpbGxTdGFja21hcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tRm9yTW92
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1w
Rm9yTW92ZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjptb3ZlQ29uc3RhbnRzKToKKyAgICAgICAgKiBiMy9CM01v
dmVDb25zdGFudHMuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNPcGFxdWVCeXByb2R1Y3QuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcGFxdWVCeXByb2R1Y3Q6Ok9wYXF1ZUJ5cHJvZHVj
dCk6CisgICAgICAgIChKU0M6OkIzOjpPcGFxdWVCeXByb2R1Y3Q6On5PcGFxdWVCeXByb2R1Y3Qp
OgorICAgICAgICAqIGIzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6T3BhcXVlQnlwcm9kdWN0cyk6CisgICAgICAgIChK
U0M6OkIzOjpPcGFxdWVCeXByb2R1Y3RzOjp+T3BhcXVlQnlwcm9kdWN0cyk6CisgICAgICAgIChK
U0M6OkIzOjpPcGFxdWVCeXByb2R1Y3RzOjphZGQpOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVl
Qnlwcm9kdWN0czo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6Y291bnQpOgorICAgICAg
ICAqIGIzL0IzT3Bjb2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpjb25zdFB0ck9wY29kZSk6Cisg
ICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6YWRkRGF0YVNlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRWYWx1
ZUluZGV4KToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjpsYXN0UGhhc2VOYW1lKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
Ynlwcm9kdWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3Rz
KToKKyAgICAgICAgKiBiMy9CM1R5cGUuaDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3RzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjprZXkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRpb24pOgor
ICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUtleTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXkuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAoSlND
OjpCMzo6VmFsdWVLZXk6Om9wY29kZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6dHlw
ZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6Y2hpbGRJbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUtleTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmRv
dWJsZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpjYW5NYXRlcmlhbGl6ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
S2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OlZhbHVlS2V5KToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlS2V5OjpjaGlsZCk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ29k
ZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpwcm9jKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6bGFzdFBoYXNlTmFtZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6QjM6Omludm9rZSk6CisgICAgICAgIChKU0M6OkIzOjpj
b21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hQdHIpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdERpYW1vbmQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5j
aE5vdEVxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hOb3RFcXVhbENvbW11dGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaE5vdEVxdWFsTm90RXF1YWwpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFu
Y2hFcXVhbEVxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hFcXVhbENvbW11dGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsRXF1YWwxKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RCcmFuY2hGb2xkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVDaGVj
ayk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0UmV0dXJuRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTUtMTEtMDgg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0g
TWluaW1pemUgRVM2X0NMQVNTX1NZTlRBWCBpZmRlZnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
Mjg4LDYgKzI4OCwxOCBAQAogCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07CiAJCTBGMzM4REZE
MUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGQjFCRUQ1MTI3MDAxM0M4OEYgLyog
QWlyU2ltcGxpZnlDRkcuY3BwICovOyB9OwogCQkwRjMzOERGRTFCRUQ1MTI3MDAxM0M4OEYgLyog
QWlyU2ltcGxpZnlDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzM4REZDMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oICovOyB9
OworCQkwRjMzOEUwQjFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGRjFCRjAyNzZD
MDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5jcHAgKi87IH07CisJCTBGMzM4RTBDMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlv
bi5oICovOyB9OworCQkwRjMzOEUwRDFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUw
MTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5jcHAgKi87IH07CisJCTBGMzM4RTBF
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNE
YXRhU2VjdGlvbi5oICovOyB9OworCQkwRjMzOEUwRjFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3Zl
Q29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICovOyB9
OworCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwNDFCRjAyNzZD
MDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi87IH07CisJCTBGMzM4RTExMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVl
Qnlwcm9kdWN0LmggKi87IH07CisJCTBGMzM4RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1
ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzMzhFMDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAg
Ki87IH07CisJCTBGMzM4RTEzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA3
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCAqLzsgfTsKKwkJMEYzMzhF
MTQxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIz
VmFsdWVLZXkuY3BwICovOyB9OworCQkwRjMzOEUxNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1
ZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
MzhFMDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLzsgfTsKKwkJMEYzMzhFMTYx
QkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyog
QjNWYWx1ZUtleUlubGluZXMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9Owog
CQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExM
SW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAq
LzsgfTsKQEAgLTIzMTMsNiArMjMyNSwxOCBAQAogCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYg
LyogQjNDQ2FsbFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ0Nh
bGxWYWx1ZS5oOyBwYXRoID0gYjMvQjNDQ2FsbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzM4REZCMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTaW1wbGlmeUNGRy5jcHA7
IHBhdGggPSBiMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjMzOERGQzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU2ltcGxpZnlDRkcuaDsgcGF0aCA9IGIz
L2Fpci9BaXJTaW1wbGlmeUNGRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMz
OERGRjFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbXBpbGF0aW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29t
cGlsYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUwMDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0NvbXBpbGF0aW9uLmg7IHBhdGggPSBiMy9CM0NvbXBpbGF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTAxMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Rh
dGFTZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRGF0
YVNlY3Rpb24uY3BwOyBwYXRoID0gYjMvQjNEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMzM4RTAyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRGF0YVNlY3Rpb24uaDsgcGF0
aCA9IGIzL0IzRGF0YVNlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
MzhFMDMxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM01vdmVDb25zdGFudHMuY3BwOyBwYXRoID0gYjMv
QjNNb3ZlQ29uc3RhbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhF
MDQxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM01vdmVDb25zdGFudHMuaDsgcGF0aCA9IGIzL0IzTW92ZUNvbnN0
YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUwNTFCRjAyNzZDMDAx
M0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGFxdWVCeXByb2R1Y3QuaDsgcGF0aCA9IGIzL0IzT3BhcXVlQnlwcm9kdWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTA2MUJGMDI3NkMwMDEzQzg4RiAv
KiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNPcGFxdWVCeXByb2R1Y3RzLmNwcDsgcGF0aCA9IGIzL0IzT3BhcXVlQnlwcm9kdWN0
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTA3MUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGFxdWVCeXByb2R1Y3RzLmg7IHBhdGggPSBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDgxQkYwMjc2QzAwMTNDODhG
IC8qIEIzVmFsdWVLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNWYWx1ZUtleS5jcHA7IHBhdGggPSBiMy9CM1ZhbHVlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUtleS5oOyBwYXRoID0gYjMv
QjNWYWx1ZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUwQTFCRjAy
NzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNWYWx1ZUtleUlubGluZXMuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXlJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGgg
PSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAw
RjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IExMSW50RW50cnlwb2ludC5jcHA7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQxNSw2ICs0NDM5LDggQEAKIAkJCQkw
RkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKIAkJCQkwRkVDODRDMTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKIAkJCQkwRkVDODRDMjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEYzMzhERkYxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uY3BwICovLAorCQkJCTBGMzM4RTAwMUJGMDI3
NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi8sCiAJCQkJMEZFQzg0QzMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRDNDFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKIAkJCQkwRkVDODRDNTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovLApAQCAtNDQyNiw2ICs0NDUyLDggQEAKIAkJCQkw
RjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggKi8sCiAJCQkJ
MEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLywKIAkJCQkw
RkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywKKwkJCQkwRjMz
OEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5jcHAgKi8sCisJCQkJMEYzMzhF
MDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLywKIAkJCQkwRkVDODVDNDFC
RTE2RjVBMDA4MEZGNzQgLyogQjNFZmZlY3RzLmNwcCAqLywKIAkJCQkwRkVDODVCRTFCRTE2N0Ew
MDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8sCiAJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLApAQCAtNDQ0NSw2ICs0NDczLDExIEBACiAJCQkJ
MEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovLAogCQkJCTBGRUM4
NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRE
NjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovLAorCQkJCTBGMzM4RTAzMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICovLAorCQkJCTBGMzM4RTA0MUJG
MDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywKKwkJCQkwRjMzOEUwNTFCRjAy
NzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKKwkJCQkwRjMzOEUwNjFCRjAy
NzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKKwkJCQkwRjMzOEUwNzFC
RjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCiAJCQkJMEZFQzg0RDcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKIAkJCQkwRkVDODREODFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKIAkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQg
LyogQjNPcmlnaW4uY3BwICovLApAQCAtNDQ4Niw2ICs0NTE5LDkgQEAKIAkJCQkwRkVDODRGOTFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKIAkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNW
YWx1ZUtleS5jcHAgKi8sCisJCQkJMEYzMzhFMDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXkuaCAqLywKKwkJCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGlu
ZXMuaCAqLywKIAkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAg
Ki8sCiAJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKIAkJ
CQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKQEAgLTY1MzQsNiAr
NjU3MCw3IEBACiAJCQkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxs
VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDM5
MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC02NjMxLDYgKzY2NjgsNyBAQAogCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkw
MDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzM4
RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5
U3dpdGNoLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NDMsNiArNjY4MSw3IEBACiAJCQkJOTlEQTAw
QTcxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE4MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGlu
c19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJ
CTk5REEwMEE5MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9o
ZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4OEYgLyog
QjNPcGFxdWVCeXByb2R1Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEFBMUJENTk5MzEw
MEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAogCQkJCTk5REEwMEEzMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19n
ZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMg
LyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKQEAgLTY5NTksNiArNjk5OCw3IEBA
CiAJCQkJMkFDOTIyQkMxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJG
UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzM4RTBDMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJENjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCRDcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTg1LDYgKzcwMjUsNyBAQAogCQkJ
CTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEODlEMDIxN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWROb2RlVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYg
LyogQjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMxQzE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkREMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJE
RTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MzQ4LDYgKzczODksNyBAQAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVD
MiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBG
QzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAw
OTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFF
NDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLApA
QCAtNzU1Miw2ICs3NTk0LDcgQEAKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJh
Y2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRy
YWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUx
MzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMDksNiArODI1Miw3IEBACiAJCQkJ
MTQ4RjIxQUExMDdFQzUzQTAwNDJFQzJDIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwOTRDNERFMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRlY29kZUludHJpbnNp
Y1JlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRkNBRTEyMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYz
MzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjVCODM5MkYxQkFDQUQ2QTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODJEMTA3RUMwNTcwMDEzRTdCMiAvKiBDYWxsRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjY0QjI3OTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjI1LDYgKzgyNjksNyBAQAogCQkJCTk2OUEwNzk2MEVE
MUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDOTdGMzMxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzOEUwRjFCRjAyNzZDMDAxM0M4OEYgLyog
QjNNb3ZlQ29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3RjE4MjEx
NjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhG
OTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgyOTcsNiArODM0Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkx
NEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjMzOEUxMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJDMEY3Q0QxN0JCRkM1QjAwNDY0
RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4
NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODY5NCw2ICs4NzQwLDcgQEAKIAkJCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMzc5NEU3NTFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTM1NUYzNTIxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlck9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzOEUwQjFCRjAyNzZDMDAxM0M4OEYgLyogQjND
b21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFMDEwN0VDN0U3MDA2NTA0
NDYgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFMTEwN0VDN0U3MDA2NTA0NDYgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTMzRThEMjAxQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9u
Q2VsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3MTgsNiArODc2NSw3IEBACiAJCQkJOTMwNTJD
MzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkU4MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMTQxQkYwMjc2QzAwMTND
ODhGIC8qIEIzVmFsdWVLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4
MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5NUNENDU3NjBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtOTQwLDYgKzk0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuam5lKCkpOwogICAgIH0KIAorICAgIHZvaWQgbW92
ZVplcm9Ub0RvdWJsZShGUFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueG9ycGRfcnIocmVnLCByZWcpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoRG91YmxlTm9u
WmVybyhGUFJlZ2lzdGVySUQgcmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc1NTRTJQcmVzZW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tbW9uLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMzIgQEAgYm9vbCBzaG91bGRW
YWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsK
IGJvb2wgc2hvdWxkTWVhc3VyZVBoYXNlVGltaW5nKCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEJp
dHNUeXBlLCB0eXBlbmFtZSBJbnB1dFR5cGU+CitpbmxpbmUgYm9vbCBpc0lkZW50aWNhbChJbnB1
dFR5cGUgbGVmdCwgSW5wdXRUeXBlIHJpZ2h0KQoreworICAgIEJpdHNUeXBlIGxlZnRCaXRzID0g
Yml0d2lzZV9jYXN0PEJpdHNUeXBlPihsZWZ0KTsKKyAgICBCaXRzVHlwZSByaWdodEJpdHMgPSBi
aXR3aXNlX2Nhc3Q8Qml0c1R5cGU+KHJpZ2h0KTsKKyAgICByZXR1cm4gbGVmdEJpdHMgPT0gcmln
aHRCaXRzOworfQorCitpbmxpbmUgYm9vbCBpc0lkZW50aWNhbChpbnQzMl90IGxlZnQsIGludDMy
X3QgcmlnaHQpCit7CisgICAgcmV0dXJuIGlzSWRlbnRpY2FsPGludDMyX3Q+KGxlZnQsIHJpZ2h0
KTsKK30KKworaW5saW5lIGJvb2wgaXNJZGVudGljYWwoaW50NjRfdCBsZWZ0LCBpbnQ2NF90IHJp
Z2h0KQoreworICAgIHJldHVybiBpc0lkZW50aWNhbDxpbnQ2NF90PihsZWZ0LCByaWdodCk7Cit9
CisKK2lubGluZSBib29sIGlzSWRlbnRpY2FsKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpCit7
CisgICAgcmV0dXJuIGlzSWRlbnRpY2FsPGludDY0X3Q+KGxlZnQsIHJpZ2h0KTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBC
aXRzVHlwZT4KIGlubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFzSW1wbChJbnB1dFR5cGUgb3Jp
Z2luYWxWYWx1ZSkKIHsKLSAgICAvLyBHZXQgdGhlIHJhdyBiaXRzIG9mIHRoZSBvcmlnaW5hbCB2
YWx1ZS4KLSAgICBCaXRzVHlwZSBvcmlnaW5hbEJpdHMgPSBiaXR3aXNlX2Nhc3Q8Qml0c1R5cGU+
KG9yaWdpbmFsVmFsdWUpOwotCiAgICAgLy8gQ29udmVydCB0aGUgb3JpZ2luYWwgdmFsdWUgdG8g
dGhlIGRlc2lyZWQgcmVzdWx0IHR5cGUuCiAgICAgUmVzdWx0VHlwZSByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxSZXN1bHRUeXBlPihvcmlnaW5hbFZhbHVlKTsKIApAQCAtNTMsMTAgKzczLDcgQEAgaW5s
aW5lIGJvb2wgaXNSZXByZXNlbnRhYmxlQXNJbXBsKElucHV0VAogICAgIC8vIHVzaW5nIHRoZSBu
ZXcgdHlwZSBpZiBzdWNoIHJvdW5kLXRyaXBwaW5nIGRvZXNuJ3QgbG9zZSBiaXRzLgogICAgIElu
cHV0VHlwZSBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PElucHV0VHlwZT4ocmVzdWx0KTsKIAotICAg
IC8vIEdldCB0aGUgcmF3IGJpdHMgb2YgdGhlIHJvdW5kLXRyaXBwZWQgdmFsdWUuCi0gICAgQml0
c1R5cGUgbmV3Qml0cyA9IGJpdHdpc2VfY2FzdDxCaXRzVHlwZT4obmV3VmFsdWUpOwotICAgIAot
ICAgIHJldHVybiBvcmlnaW5hbEJpdHMgPT0gbmV3Qml0czsKKyAgICByZXR1cm4gaXNJZGVudGlj
YWw8Qml0c1R5cGU+KG9yaWdpbmFsVmFsdWUsIG5ld1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQ
cm9jZWR1cmUmIHByb2MpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIGdlbmVy
YXRlKHByb2MsIGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxw
dHIpOworCisgICAgbV9jb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpD
b21waWxhdGlvbiIpKTsKKyAgICBtX2J5cHJvZHVjdHMgPSBwcm9jLnRha2VCeXByb2R1Y3RzKCk7
Cit9CisKK0NvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24oKQoreworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ29tcGlsYXRpb25faAorI2RlZmluZSBCM0NvbXBpbGF0aW9uX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIE9w
YXF1ZUJ5cHJvZHVjdHM7CitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgaXMgYSBmb29sLXBy
b29mIEFQSSBmb3IgY29tcGlsaW5nIGEgUHJvY2VkdXJlIHRvIGNvZGUgYW5kIHRoZW4gcnVubmlu
ZyB0aGF0IGNvZGUuIFlvdSBjb21waWxlCisvLyBhIFByb2NlZHVyZSB1c2luZyB0aGlzIEFQSSBi
eSBkb2luZzoKKy8vCisvLyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOworLy8KKy8vIFRoZW4g
eW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9rIGFzIHlvdSB3
YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLiBJZgorLy8gdGhpcyBBUEkgZmVlbHMgdG9v
IGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgorCitjbGFz
cyBDb21waWxhdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGlsYXRpb24pOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1cmUmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB+Q29tcGlsYXRpb24oKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQorCitwcml2YXRlOgorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBtX2NvZGVSZWY7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJv
ZHVjdHM+IG1fYnlwcm9kdWN0czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tcGlsYXRpb25faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShy
ZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKLWNsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBW
YWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0RhdGFTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0RhdGFT
ZWN0aW9uOjpEYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkKKyAgICA6IG1fZGF0YShmYXN0TWFsbG9j
KHNpemUpKQorICAgICwgbV9zaXplKHNpemUpCit7Cit9CisKK0RhdGFTZWN0aW9uOjp+RGF0YVNl
Y3Rpb24oKQoreworICAgIGZhc3RGcmVlKG1fZGF0YSk7Cit9CisKK3ZvaWQgRGF0YVNlY3Rpb246
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkRhdGFTZWN0
aW9uIGF0ICIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIiB3aXRoICIsIG1fc2l6ZSwgIiBieXRlcy4i
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RhdGFTZWN0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0RhdGFTZWN0aW9uX2gKKyNkZWZpbmUgQjNE
YXRhU2VjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNPcGFxdWVC
eXByb2R1Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIERh
dGFTZWN0aW9uIDogcHVibGljIE9wYXF1ZUJ5cHJvZHVjdCB7CitwdWJsaWM6CisgICAgRGF0YVNl
Y3Rpb24oc2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgfkRhdGFTZWN0aW9uKCk7CisKKyAgICB2
b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3Qg
bV9zaXplOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNEYXRhU2VjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDb21t
b24uaCIKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM01vdmVDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5n
dGguaCIKICNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCkBAIC00NCw3ICs0NSw3IEBAIHZvaWQg
Z2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWwKIHsKICAgICBUaW1pbmdTY29wZSB0
aW1pbmdTY29wZSgiZ2VuZXJhdGUiKTsKIAotICAgIEFpcjo6Q29kZSBjb2RlOworICAgIEFpcjo6
Q29kZSBjb2RlKHByb2NlZHVyZSk7CiAgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUp
OwogICAgIEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKIH0KQEAgLTcwLDYgKzcxLDggQEAgdm9p
ZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgIC8vIEZJWE1FOiBBZGQg
bW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUwNwogCisgICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOwor
CiAgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKICAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJl
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDIyICs0NDAsMTQgQEAgcHJpdmF0ZToKIAog
ICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5yZXBy
ZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQoKSAmJiB2
YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCiAgICAgICAgICAgICByZXR1cm4gQXJn
OjppbW0odmFsdWUtPmFzTnVtYmVyPGludDMyX3Q+KCkpOwogICAgICAgICByZXR1cm4gQXJnKCk7
CiAgICAgfQogCi0gICAgQXJnIGltbUZvck1vdmUoVmFsdWUqIHZhbHVlKSB7Ci0gICAgICAgIGlm
IChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+aGFzSW50NjQoKSkKLSAgICAgICAgICAgIHJldHVybiBBcmc6Omlt
bTY0KHZhbHVlLT5hc0ludDY0KCkpOwotICAgICAgICByZXR1cm4gQXJnKCk7Ci0gICAgfQotCi0g
ICAgQXJnIGltbU9yVG1wRm9yTW92ZShWYWx1ZSogdmFsdWUpCisgICAgQXJnIGltbU9yVG1wKFZh
bHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tRm9yTW92ZSh2
YWx1ZSkpCisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiB0bXAodmFsdWUpOwogICAgIH0KQEAgLTcz
MSwxNCArNzIzLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBcmcgYXJnOwogICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OkFueToKLSAgICAgICAgICAgICAgICBhcmcgPSBpbW1PclRtcEZvck1vdmUodmFsdWUudmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGltbSh2YWx1ZS52YWx1ZSgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXJnID0gaW1tKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlLnZhbHVlKCktPmhhc0ludDY0KCkpCisgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6aW1tNjQodmFsdWUudmFsdWUoKS0+YXNJbnQ2NCgpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS52YWx1ZSgpLT5oYXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUudmFsdWUoKS0+
YXNEb3VibGUoKSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
YXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9
IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9IFRtcCh2YWx1
ZS5yZXAoKS5yZWcoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbU9yVG1wRm9y
TW92ZSh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
aW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGFyZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgogICAgICAgICAgICAgICAg
IGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAoKS5vZmZzZXRGcm9tU1AoKSk7CkBAIC0xMTUy
LDcgKzExNTEsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBMb2FkOnsKKyAgICAg
ICAgY2FzZSBCMzo6Tm9wOiB7CisgICAgICAgICAgICAvLyBZZXMsIHdlIHdpbGwgdG90YWxseSBz
ZWUgTm9wJ3MgYmVjYXVzZSBzb21lIHBoYXNlcyB3aWxsIHJlcGxhY2VXaXRoTm9wKCkgaW5zdGVh
ZCBvZgorICAgICAgICAgICAgLy8gcHJvcGVybHkgcmVtb3ZpbmcgdGhpbmdzLgorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2FkOiB7
CiAgICAgICAgICAgICBhcHBlbmQoCiAgICAgICAgICAgICAgICAgbW92ZUZvclR5cGUobV92YWx1
ZS0+dHlwZSgpKSwKICAgICAgICAgICAgICAgICBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
OwpAQCAtMTI4NSw5ICsxMjkwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIGNhc2UgQ29uc3QzMjog
eworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbShtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBjYXNlIENvbnN0NjQ6IHsK
LSAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW1Gb3JNb3ZlKG1fdmFsdWUpLCB0bXAobV92YWx1
ZSkpOworICAgICAgICAgICAgaWYgKGltbShtX3ZhbHVlKSkKKyAgICAgICAgICAgICAgICBhcHBl
bmQoTW92ZSwgaW1tKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbTY0KG1fdmFsdWUtPmFzSW50NjQo
KSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIENvbnN0RG91YmxlOiB7CisgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhhdCB0
aGUgbW92ZUNvbnN0YW50cygpIHBoYXNlIGhhcyBydW4uCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc0lkZW50aWNhbChtX3ZhbHVlLT5hc0RvdWJsZSgpLCAwLjApKTsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlWmVyb1RvRG91YmxlLCB0bXAobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEzNTQsNyArMTM3Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgVXBzaWxvbjogewogICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hp
bGQoMCk7CiAgICAgICAgICAgICBhcHBlbmQoCi0gICAgICAgICAgICAgICAgcmVsYXhlZE1vdmVG
b3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcEZvck1vdmUodmFsdWUpLAorICAgICAgICAg
ICAgICAgIHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUp
LAogICAgICAgICAgICAgICAgIHRtcChtX3ZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCktPnBoaSgp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzODEsOSArMTM5OSwxNiBA
QCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgUmV0dXJuOiB7CiAgICAgICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIGFwcGVuZCgKLSAgICAgICAg
ICAgICAgICByZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wRm9yTW92
ZSh2YWx1ZSksCi0gICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlOworICAgICAgICAgICAgVG1wIGRlc3Q7Cisg
ICAgICAgICAgICBpZiAoaXNJbnQodmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBt
b3ZlID0gTW92ZTsKKyAgICAgICAgICAgICAgICBkZXN0ID0gVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZSA9IE1v
dmVEb3VibGU7CisgICAgICAgICAgICAgICAgZGVzdCA9IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQobW92ZSwgaW1tT3JUbXAo
dmFsdWUpLCBkZXN0KTsKICAgICAgICAgICAgIGFwcGVuZChSZXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29u
c3RhbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3Zl
Q29uc3RhbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01vdmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM01vdmVDb25zdGFudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRp
b25TZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
UGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vdmVD
b25zdGFudHMgeworcHVibGljOgorICAgIE1vdmVDb25zdGFudHMoUHJvY2VkdXJlJiBwcm9jKQor
ICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIEV2ZW50dWFs
bHkgdGhpcyBwaGFzZSB3aWxsIGRvIHNtYXJ0IHRoaW5ncy4gRm9yIG5vdywgaXQgdXNlcyBhIHN1
cGVyIHNpbXBsZSBoZXVyaXN0aWM6IGl0CisgICAgICAgIC8vIHBsYWNlcyBsYXJnZSBjb25zdGFu
dHMgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLCBhbmQgbWFrZXMgc3VyZSB0aGF0IGVhY2gg
YmxvY2sgaGFzCisgICAgICAgIC8vIG9ubHkgb25lIG1hdGVyaWFsaXphdGlvbiBmb3IgZWFjaCBs
YXJnZSBjb25zdGFudC4KKworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgYmV0dGVyIHN0
b3J5IGZvciBjb25zdGFudHMuIEF0IGEgbWluaW11bSB0aGlzIHNob3VsZCBhbGxvdyB0aGUgQjMK
KyAgICAgICAgLy8gY2xpZW50IHRvIHNwZWNpZnkgaW1wb3J0YW50IGNvbnN0YW50cyB0aGF0IGFs
d2F5cyBnZXQgaG9pc3RlZC4gQWxzbywgdGhlIHRhYmxlIHVzZWQgdG8KKyAgICAgICAgLy8gaG9s
ZCBkb3VibGUgY29uc3RhbnRzIHNob3VsZCBoYXZlIGEgcG9pbnRlciB0byBpdCB0aGF0IGlzIGhv
aXN0ZWQuIElmIHdlIHdhbnRlZCB0byBiZSBtb3JlCisgICAgICAgIC8vIGFnZ3Jlc3NpdmUsIHdl
IGNvdWxkIG1ha2UgY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIGJlIGEgZmVhdHVyZSBvZiBBaXI6
IHdlIGNvdWxkIGxhYmVsCisgICAgICAgIC8vIHNvbWUgVG1wcyBhcyBiZWluZyB1bm1hdGVyaWFs
aXplZCBjb25zdGFudHMgYW5kIGhhdmUgYSBsYXRlIEFpciBwaGFzZSAtIHBvc3QgcmVnaXN0ZXIK
KyAgICAgICAgLy8gYWxsb2NhdGlvbiAtIHRoYXQgY3JlYXRlcyBtYXRlcmlhbGl6YXRpb25zIG9m
IHRob3NlIGNvbnN0YW50IFRtcHMgYnkgc2NhdmVuZ2luZyBsZWZ0b3ZlcgorICAgICAgICAvLyBy
ZWdpc3RlcnMuCisKKyAgICAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNo
IGNvbnN0YW50cyBnbyBpbnRvIHRoZSBkYXRhIHNlY3Rpb24uIFRoZXNlIGFyZSBub24temVybwor
ICAgICAgICAvLyBkb3VibGUgY29uc3RhbnRzLgorICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IG1fcHJvYy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbih2YWx1ZSkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX3RvUmVtb3ZlLmFwcGVu
ZCh2YWx1ZSk7CisgICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAg
ICAgICAgICBpZiAoZ29lc0luVGFibGUoa2V5KSkKKyAgICAgICAgICAgICAgICBtX2NvbnN0VGFi
bGUuYWRkKGtleSwgbV9jb25zdFRhYmxlLnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fZGF0YVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxpbnQ2NF90Kj4obV9wcm9jLmFkZERh
dGFTZWN0aW9uKG1fY29uc3RUYWJsZS5zaXplKCkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY29uc3RUYWJsZSkKKyAgICAgICAgICAgIG1fZGF0YVNl
Y3Rpb25bZW50cnkudmFsdWVdID0gZW50cnkua2V5LnZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBtX2NvbnN0
YW50cy5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZh
bHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbmVlZHNNb3Rpb24oY2hpbGQpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBt
YXRlcmlhbGl6ZSh2YWx1ZUluZGV4LCBjaGlsZC0+a2V5KCksIHZhbHVlLT5vcmlnaW4oKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoVmFsdWUqIHRvUmVtb3ZlIDogbV90b1JlbW92ZSkKKyAgICAgICAgICAgIHRvUmVtb3ZlLT5y
ZXBsYWNlV2l0aE5vcCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbWF0ZXJpYWxp
emUodW5zaWduZWQgdmFsdWVJbmRleCwgY29uc3QgVmFsdWVLZXkmIGtleSwgY29uc3QgT3JpZ2lu
JiBvcmlnaW4pCisgICAgeworICAgICAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fY29uc3RhbnRz
LmdldChrZXkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBOb3Rl
IHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGRvIHRoaXMgaW4gb25lIGFkZCgpIGJlY2F1c2Ug
dGhpcyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbgorICAgICAgICAvLyB0aGF0IG1heSByZWhhc2gg
dGhlIG1hcC4KKworICAgICAgICBWYWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoZ29lc0luVGFi
bGUoa2V5KSkgeworICAgICAgICAgICAgVmFsdWUqIHRhYmxlQmFzZSA9IG1hdGVyaWFsaXplKAor
ICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsCisgICAgICAgICAgICAgICAgVmFsdWVLZXkoCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0UHRyT3Bjb2RlKCksIHBvaW50ZXJUeXBlKCksCisgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4obV9kYXRhU2VjdGlvbikpKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4pOworICAgICAgICAg
ICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKKyAgICAgICAg
ICAgICAgICB2YWx1ZUluZGV4LCBMb2FkLCBrZXkudHlwZSgpLCBvcmlnaW4sIHRhYmxlQmFzZSwK
KyAgICAgICAgICAgICAgICBzaXplb2YoaW50cHRyX3QpICogbV9jb25zdFRhYmxlLmdldChrZXkp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5p
bnNlcnRWYWx1ZSh2YWx1ZUluZGV4LCBrZXkubWF0ZXJpYWxpemUobV9wcm9jLCBvcmlnaW4pKTsK
KyAgICAgICAgbV9jb25zdGFudHMuYWRkKGtleSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBib29sIGdvZXNJblRhYmxlKGNvbnN0IFZhbHVlS2V5JiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4ga2V5Lm9wY29kZSgpID09IENvbnN0RG91YmxlICYmIGtl
eSAhPSBkb3VibGVaZXJvKCk7CisgICAgfQorCisgICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBW
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBXZSBjdXJyZW50
bHkgYXNzdW1lIHRoYXQgMzItYml0IGludCBjb25zdGFudHMgYXJlIGFsd2F5cyBjaGVhcCB0byBt
YXRlcmlhbGl6ZS4KKyAgICAgICAgLy8gVGhpcyBpcyB3cm9uZyBmb3IgQVJNLiBXZSBuZWVkIHNv
bWUgYWJzdHJhY3QgcXVlcnkgbGlrZSAiaXNJbW1lZGlhdGUoaW50NjRfdCkiLiBPbgorICAgICAg
ICAvLyBBUk02NCB0aGlzIHdvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSB3YXkgdGhhdCBBUk02
NCBjYW4gZW5jb2RlIGxhcmdlIGNvbnN0YW50cy4KKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQo
KSAmJiB2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIFZh
bHVlS2V5IGRvdWJsZVplcm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0
RG91YmxlLCBEb3VibGUsIDAuMCk7CisgICAgfQorCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7Cisg
ICAgVmVjdG9yPFZhbHVlKj4gbV90b1JlbW92ZTsKKyAgICBIYXNoTWFwPFZhbHVlS2V5LCB1bnNp
Z25lZD4gbV9jb25zdFRhYmxlOworICAgIGludDY0X3QqIG1fZGF0YVNlY3Rpb247CisgICAgSGFz
aE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50czsKKyAgICBJbnNlcnRpb25TZXQgbV9p
bnNlcnRpb25TZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBtb3Zl
Q29uc3RhbnRzKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
cHJvYywgIm1vdmVDb25zdGFudHMiKTsKKyAgICBNb3ZlQ29uc3RhbnRzIG1vdmVDb25zdGFudHMo
cHJvYyk7CisgICAgbW92ZUNvbnN0YW50cy5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM01vdmVDb25zdGFudHNfaAorI2RlZmluZSBCM01vdmVDb25zdGFudHNfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFByb2NlZHVyZTsKKworLy8gTW92ZXMgbGFyZ2UgY29uc3RhbnRzIGFyb3VuZCwgd2l0aCB0
aGUgZ29hbCBvZiBwbGFjaW5nIHRoZW0gaW4gdGhlIG9wdGltYWwgcG9pbnRzIGluIHRoZSBwcm9n
cmFtLgorCit2b2lkIG1vdmVDb25zdGFudHMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTW92
ZUNvbnN0YW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5
cHJvZHVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1
ZUJ5cHJvZHVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3BhcXVlQnlwcm9kdWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3BhcXVl
Qnlwcm9kdWN0X2gKKyNkZWZpbmUgQjNPcGFxdWVCeXByb2R1Y3RfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBPcGFxdWVCeXByb2R1Y3QgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE9wYXF1ZUJ5cHJvZHVjdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgT3BhcXVlQnlwcm9kdWN0KCkgeyB9CisgICAgdmlydHVhbCB+T3Bh
cXVlQnlwcm9kdWN0KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3BhcXVlQnlwcm9kdWN0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitPcGFxdWVCeXByb2R1Y3RzOjpPcGFxdWVCeXByb2R1
Y3RzKCkKK3sKK30KKworT3BhcXVlQnlwcm9kdWN0czo6fk9wYXF1ZUJ5cHJvZHVjdHMoKQorewor
fQorCit2b2lkIE9wYXF1ZUJ5cHJvZHVjdHM6OmFkZChzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlw
cm9kdWN0PiBieXByb2R1Y3QpCit7CisgICAgbV9ieXByb2R1Y3RzLmFwcGVuZChXVEY6Om1vdmUo
Ynlwcm9kdWN0KSk7Cit9CisKK3ZvaWQgT3BhcXVlQnlwcm9kdWN0czo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQnlwcm9kdWN0czpcbiIpOworICAgIGlm
IChtX2J5cHJvZHVjdHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludCgiICAgIDxlbXB0
eT5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoYXV0byYgYnlwcm9kdWN0
IDogbV9ieXByb2R1Y3RzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCAqYnlwcm9kdWN0LCAi
XG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1
Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlw
cm9kdWN0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bh
cXVlQnlwcm9kdWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wYXF1ZUJ5
cHJvZHVjdHNfaAorI2RlZmluZSBCM09wYXF1ZUJ5cHJvZHVjdHNfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0LmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIE9wYXF1ZUJ5cHJvZHVjdHMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE9wYXF1ZUJ5cHJvZHVjdHMpCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgT3BhcXVlQnlwcm9kdWN0cygpOworICAgIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisKKyAg
ICBzaXplX3QgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2J5cHJvZHVjdHMuc2l6ZSgpOyB9Cisg
ICAgCisgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdD4pOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Q+PiBtX2J5cHJvZHVjdHM7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM09wYXF1ZUJ5cHJvZHVjdHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuaAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksMTMgQEAgaW5saW5lIGJv
b2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKIAogT3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRl
ZENvbXBhcmUoT3Bjb2RlLCBUeXBlKTsKIAoraW5saW5lIE9wY29kZSBjb25zdFB0ck9wY29kZSgp
Cit7CisgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgcmV0dXJuIENvbnN0NjQ7CisgICAgcmV0
dXJuIENvbnN0MzI7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3BhY2Ug
V1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2
aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE1IEBACiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAi
QjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorI2luY2x1ZGUg
IkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBQcm9jZWR1cmU6OlByb2NlZHVyZSgpCiAg
ICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQorICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6
bWFrZV91bmlxdWU8T3BhcXVlQnlwcm9kdWN0cz4oKSkKIHsKIH0KIApAQCAtMTA3LDYgKzExMCw4
IEBAIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCiAgICAgICAgIG91dC5wcmludChkZWVwRHVtcChi
bG9jaykpOworICAgIGlmIChtX2J5cHJvZHVjdHMtPmNvdW50KCkpCisgICAgICAgIG91dC5wcmlu
dCgqbV9ieXByb2R1Y3RzKTsKIH0KIAogVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJs
b2Nrc0luUHJlT3JkZXIoKQpAQCAtMTI2LDYgKzEzMSwxNiBAQCB2b2lkIFByb2NlZHVyZTo6ZGVs
ZXRlVmFsdWUoVmFsdWUqIHZhbHVlCiAgICAgbV92YWx1ZXNbdmFsdWUtPmluZGV4KCldID0gbnVs
bHB0cjsKIH0KIAordm9pZCogUHJvY2VkdXJlOjphZGREYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkK
K3sKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxEYXRhU2VjdGlvbj4gZGF0YVNlY3Rpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPERhdGFT
ZWN0aW9uPihzaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkYXRhU2VjdGlvbi0+ZGF0YSgpOwor
ICAgIG1fYnlwcm9kdWN0cy0+YWRkKFdURjo6bW92ZShkYXRhU2VjdGlvbikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIHNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVlSW5kZXgoKQogewogICAg
IGlmIChtX3ZhbHVlSW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7
CitjbGFzcyBPcGFxdWVCeXByb2R1Y3RzOwogY2xhc3MgVmFsdWU7CiAKIGNsYXNzIFByb2NlZHVy
ZSB7CkBAIC0yMDEsNiArMjAyLDE5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IGNoYXIqIGxhc3RQ
aGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQaGFzZU5hbWU7IH0KIAorICAgIHZvaWQq
IGFkZERhdGFTZWN0aW9uKHNpemVfdCBzaXplKTsKKworICAgIE9wYXF1ZUJ5cHJvZHVjdHMmIGJ5
cHJvZHVjdHMoKSB7IHJldHVybiAqbV9ieXByb2R1Y3RzOyB9CisKKyAgICAvLyBCZWxvdyBhcmUg
bWV0aG9kcyB0aGF0IG1ha2Ugc2Vuc2UgdG8gY2FsbCBhZnRlciB5b3UgaGF2ZSBnZW5lcmF0ZWQg
Y29kZSBmb3IgdGhlIHByb2NlZHVyZS4KKworICAgIC8vIFlvdSBoYXZlIHRvIGNhbGwgdGhpcyBt
ZXRob2QgYWZ0ZXIgY2FsbGluZyBnZW5lcmF0ZSgpLiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgQjM6
OmdlbmVyYXRlKCkKKyAgICAvLyB3aWxsIHJlcXVpcmUgeW91IHRvIGtlZXAgdGhpcyBvYmplY3Qg
YWxpdmUgZm9yIGFzIGxvbmcgYXMgdGhhdCBjb2RlIGlzIHJ1bm5hYmxlLiBVc3VhbGx5LCB0aGlz
CisgICAgLy8ganVzdCBrZWVwcyBhbGl2ZSB0aGluZ3MgbGlrZSB0aGUgZG91YmxlIGNvbnN0YW50
IHBvb2wgYW5kIHN3aXRjaCBsb29rdXAgdGFibGVzLiBJZiB0aGlzIHNvdW5kcworICAgIC8vIGNv
bmZ1c2luZywgeW91IHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyB0aGUgQjM6OkNvbXBpbGF0aW9u
IEFQSSB0byBjb21waWxlIGNvZGUuIElmIHlvdSB1c2UKKyAgICAvLyB0aGF0IEFQSSwgdGhlbiB5
b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxP
cGFxdWVCeXByb2R1Y3RzPiB0YWtlQnlwcm9kdWN0cygpIHsgcmV0dXJuIFdURjo6bW92ZShtX2J5
cHJvZHVjdHMpOyB9CisKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGFk
ZFZhbHVlSW5kZXgoKTsKICAgICAKQEAgLTIwOCw2ICsyMjIsNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKICAgICBWZWN0b3I8c2l6ZV90
PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CisgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuaAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewogCi1lbnVtIFR5cGUgeworZW51bSBUeXBlIDogaW50OF90IHsKICAgICBW
b2lkLAogICAgIEludDMyLAogICAgIEludDY0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi
QjNTdGFja1Nsb3RWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KIApAQCAtMzU2LDYgKzM1Nyw2MSBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29u
c3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitWYWx1ZUtleSBWYWx1ZTo6a2V5KCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAg
ICAgIHJldHVybiBWYWx1ZUtleShvcGNvZGUoKSwgdHlwZSgpKTsKKyAgICBjYXNlIElkZW50aXR5
OgorICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBTRXh0MzI6Cisg
ICAgY2FzZSBaRXh0MzI6CisgICAgY2FzZSBUcnVuYzoKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBj
YXNlIElUb0Q6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0
dXJuIFZhbHVlS2V5KG9wY29kZSgpLCB0eXBlKCksIGNoaWxkKDApKTsKKyAgICBjYXNlIEFkZDoK
KyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNh
c2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRY
b3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBj
YXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBj
YXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBj
YXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgIGNhc2UgRGl2OgorICAg
IGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICByZXR1cm4gVmFsdWVLZXkob3Bjb2RlKCksIHR5cGUoKSwgY2hpbGQoMCksIGNoaWxk
KDEpKTsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShDb25zdDMy
LCB0eXBlKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGFzSW50MzIoKSkpOworICAgIGNhc2UgQ29u
c3Q2NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0NjQsIHR5cGUoKSwgYXNJbnQ2NCgp
KTsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3RE
b3VibGUsIHR5cGUoKSwgYXNEb3VibGUoKSk7CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAg
ICAgcmV0dXJuIFZhbHVlS2V5KAorICAgICAgICAgICAgQXJndW1lbnRSZWcsIHR5cGUoKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KGFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFy
Z3VtZW50UmVnKCkuaW5kZXgoKSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBWYWx1
ZUtleSgpOworICAgIH0KK30KKwogdm9pZCBWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbigpCiB7
CiAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDogY2hpbGRyZW4oKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiQjNPcGNvZGUuaCIKICNpbmNsdWRlICJCM09yaWdpbi5oIgogI2luY2x1ZGUgIkIzVHlw
ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KQEAgLTE2Nyw5ICsxNjgsMTQgQEAgcHVibGljOgogICAgIFRyaVN0YXRlIGFzVHJpU3Rh
dGUoKSBjb25zdDsKICAgICBib29sIGlzTGlrZVplcm8oKSBjb25zdCB7IHJldHVybiBhc1RyaVN0
YXRlKCkgPT0gRmFsc2VUcmlTdGF0ZTsgfQogICAgIGJvb2wgaXNMaWtlTm9uWmVybygpIGNvbnN0
IHsgcmV0dXJuIGFzVHJpU3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7IH0KLSAgICAKKwogICAgIEVm
ZmVjdHMgZWZmZWN0cygpIGNvbnN0OwogCisgICAgLy8gVGhpcyByZXR1cm5zIGEgVmFsdWVLZXkg
dGhhdCBkZXNjcmliZXMgdGhhdCB0aGlzIFZhbHVlIHJldHVybnMgd2hlbiBpdCBleGVjdXRlcy4g
UmV0dXJucyBhbgorICAgIC8vIGVtcHR5IFZhbHVlS2V5IGlmIHRoaXMgVmFsdWUgaXMgaW1wdXJl
LiBOb3RlIHRoYXQgYW4gb3BlcmF0aW9uIHRoYXQgcmV0dXJucyBWb2lkIGNvdWxkIHN0aWxsCisg
ICAgLy8gaGF2ZSBhIG5vbi1lbXB0eSBWYWx1ZUtleS4gVGhpcyBoYXBwZW5zIGZvciBleGFtcGxl
IHdpdGggQ2hlY2sgb3BlcmF0aW9ucy4KKyAgICBWYWx1ZUtleSBrZXkoKSBjb25zdDsKKwogICAg
IC8vIE1ha2VzIHN1cmUgdGhhdCBub25lIG9mIHRoZSBjaGlsZHJlbiBhcmUgSWRlbnRpdHkncy4g
SWYgYSBjaGlsZCBwb2ludHMgdG8gSWRlbnRpdHksIHRoaXMgd2lsbAogICAgIC8vIHJlcG9pbnQg
aXQgYXQgdGhlIElkZW50aXR5J3MgY2hpbGQuIEZvciBzaW1wbGljaXR5LCB0aGlzIHdpbGwgZm9s
bG93IGFyYml0cmFyaWx5IGxvbmcgY2hhaW5zCiAgICAgLy8gb2YgSWRlbnRpdHkncy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3ZvaWQgVmFsdWVLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsIG1fb3Bjb2RlLCAiKCIsIHUuaW5kaWNlc1swXSwg
IiwgIiwgdS5pbmRpY2VzWzFdLCAiKSIpOworfQorCitWYWx1ZSogVmFsdWVLZXk6Om1hdGVyaWFs
aXplKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbikgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG9wY29kZSgpKSB7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwcm9j
LmFkZDxWYWx1ZT4ob3Bjb2RlKCksIHR5cGUoKSwgb3JpZ2luKTsKKyAgICBjYXNlIElkZW50aXR5
OgorICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBTRXh0MzI6Cisg
ICAgY2FzZSBaRXh0MzI6CisgICAgY2FzZSBUcnVuYzoKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBj
YXNlIElUb0Q6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0
dXJuIHByb2MuYWRkPFZhbHVlPihvcGNvZGUoKSwgdHlwZSgpLCBvcmlnaW4sIGNoaWxkKHByb2Ms
IDApKTsKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBj
YXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2Ug
Qml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgor
ICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAg
Y2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgQWJvdmU6Cisg
ICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFs
OgorICAgIGNhc2UgRGl2OgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KG9wY29kZSgp
LCB0eXBlKCksIG9yaWdpbiwgY2hpbGQocHJvYywgMCksIGNoaWxkKHByb2MsIDEpKTsKKyAgICBj
YXNlIENvbnN0MzI6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdp
biwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUoKSkpOworICAgIGNhc2UgQ29uc3Q2NDoKKyAg
ICAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luLCB2YWx1ZSgpKTsKKyAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVW
YWx1ZT4ob3JpZ2luLCBkb3VibGVWYWx1ZSgpKTsKKyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAg
ICAgICByZXR1cm4gcHJvYy5hZGQ8QXJndW1lbnRSZWdWYWx1ZT4ob3JpZ2luLCBSZWc6OmZyb21J
bmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUoKSkpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVLZXlf
aAorI2RlZmluZSBCM1ZhbHVlS2V5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0hlYXBSYW5nZS5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNPcmln
aW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKKy8vIFZhbHVlS2V5cyBhcmUgdXNl
ZnVsIGZvciBDU0UuIFRoZXkgYWJzdHJhY3RseSBkZXNjcmliZSB0aGUgdmFsdWUgdGhhdCBhIFZh
bHVlIHJldHVybnMgd2hlbiBpdAorLy8gZXhlY3V0ZXMuIEFueSBWYWx1ZSB0aGF0IGhhcyB0aGUg
c2FtZSBWYWx1ZUtleSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSB2YWx1ZSwgcHJv
dmlkZWQKKy8vIHRoYXQgdGhleSByZXR1cm4gYSBub24tZW1wdHkgVmFsdWVLZXkuIE9wZXJhdGlv
bnMgdGhhdCBoYXZlIGVmZmVjdHMsIG9yIHRoYXQgY2FuIGhhdmUgdGhlaXIKKy8vIGJlaGF2aW9y
IGFmZmVjdGVkIGJ5IG90aGVyIG9wZXJhdGlvbnMnIGVmZmVjdHMsIHdpbGwgcmV0dXJuIGFuIGVt
cHR5IFZhbHVlS2V5LiBZb3UgaGF2ZSB0byB1c2UKKy8vIG90aGVyIG1lY2hhbmlzbXMgZm9yIGRv
aW5nIENTRSBmb3IgaW1wdXJlIG9wZXJhdGlvbnMuCisKK2NsYXNzIFZhbHVlS2V5IHsKK3B1Ymxp
YzoKKyAgICBWYWx1ZUtleSgpCisgICAgeworICAgIH0KKworICAgIFZhbHVlS2V5KE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwg
bV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKworICAgIFZhbHVlS2V5KE9wY29kZSwgVHlwZSwg
VmFsdWUqIGNoaWxkKTsKKworICAgIFZhbHVlS2V5KE9wY29kZSwgVHlwZSwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCk7CisKKyAgICBWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IGludDY0X3QgdmFsdWUpCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgIHsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAg
IFZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKQorICAgICAg
ICA6IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAg
ICAgIHUuZG91YmxlVmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBPcGNvZGUgb3Bjb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICB1bnNpZ25lZCBjaGlsZEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiB1LmluZGljZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKFByb2NlZHVy
ZSYsIHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gdS52YWx1ZTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IHUuZG91YmxlVmFsdWU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZUtleSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcGNvZGUgPT0gb3RoZXIubV9v
cGNvZGUKKyAgICAgICAgICAgICYmIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUKKyAgICAgICAgICAg
ICYmIHUgPT0gb3RoZXIudTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFs
dWVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3Bjb2RlICsgbV90eXBlICsgV1RGOjpJbnRIYXNoPGludDY0X3Q+OjpoYXNoKHUu
dmFsdWUpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAqdGhpcyAhPSBWYWx1ZUtleSgpOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworICAgIGJvb2wgY2FuTWF0ZXJpYWxpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNo
IChvcGNvZGUoKSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNr
U3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBBdHRlbXB0cyB0byBtYXRlcmlhbGl6ZSB0aGUgVmFsdWUgZm9yIHRoaXMg
VmFsdWVLZXkuIE1heSByZXR1cm4gbnVsbHB0ciBpZiB0aGUgdmFsdWUgY2Fubm90CisgICAgLy8g
YmUgbWF0ZXJpYWxpemVkLiBUaGlzIGhhcHBlbnMgZm9yIENoZWNrQWRkIGFuZCBmcmllbmRzLiBZ
b3UgY2FuIHVzZSBjYW5NYXRlcmlhbGl6ZSgpIHRvIGNoZWNrCisgICAgLy8gaWYgeW91ciBrZXkg
aXMgbWF0ZXJpYWxpemFibGUuCisgICAgVmFsdWUqIG1hdGVyaWFsaXplKFByb2NlZHVyZSYsIE9y
aWdpbikgY29uc3Q7CisKKyAgICBWYWx1ZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV90eXBlIHsgSW50MzIgfQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9PSBWYWx1ZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAg
ICAgICAKK3ByaXZhdGU6CisgICAgT3Bjb2RlIG1fb3Bjb2RlIHsgT29wcyB9OworICAgIFR5cGUg
bV90eXBlIHsgVm9pZCB9OworICAgIHVuaW9uIFUgeworICAgICAgICB1bnNpZ25lZCBpbmRpY2Vz
WzJdOworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7
CisKKyAgICAgICAgVSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG90aGVyLnZhbHVlOworICAgICAg
ICB9CisgICAgfSB1OworfTsKKworc3RydWN0IFZhbHVlS2V5SGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVmFsdWVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQor
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlS2V5JiBhLCBjb25zdCBWYWx1ZUtleSYg
YikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpWYWx1ZUtleT4g
eworICAgIHR5cGVkZWYgSlNDOjpCMzo6VmFsdWVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpCMzo6VmFsdWVLZXk+IDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxK
U0M6OkIzOjpWYWx1ZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlS2V5SW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVLZXlJbmxp
bmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KE9wY29k
ZSBvcGNvZGUsIFR5cGUgdHlwZSwgVmFsdWUqIGNoaWxkKQorICAgIDogbV9vcGNvZGUob3Bjb2Rl
KQorICAgICwgbV90eXBlKHR5cGUpCit7CisgICAgdS5pbmRpY2VzWzBdID0gY2hpbGQtPmluZGV4
KCk7Cit9CisKK2lubGluZSBWYWx1ZUtleTo6VmFsdWVLZXkoT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogbV9vcGNvZGUob3Bjb2RlKQor
ICAgICwgbV90eXBlKHR5cGUpCit7CisgICAgdS5pbmRpY2VzWzBdID0gbGVmdC0+aW5kZXgoKTsK
KyAgICB1LmluZGljZXNbMV0gPSByaWdodC0+aW5kZXgoKTsKK30KKworaW5saW5lIFZhbHVlKiBW
YWx1ZUtleTo6Y2hpbGQoUHJvY2VkdXJlJiBwcm9jLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcHJvYy52YWx1ZXMoKVtpbmRleF07Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVL
ZXlJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlz
aW9uIDE5MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTAgQEAKIAogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdW
YWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Nv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKICNpbmNsdWRlICJCM0Nv
bnN0UHRyVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgotI2luY2x1ZGUgIkIz
R2VuZXJhdGUuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCkBAIC02NywxNiArNjcsMTMg
QEAgbmFtZXNwYWNlIHsKIAogVk0qIHZtOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29tcGls
ZShQcm9jZWR1cmUmIHByb2NlZHVyZSkKK3N0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29t
cGlsZShQcm9jZWR1cmUmIHByb2NlZHVyZSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
LSAgICBnZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCp2bSwgaml0LCBudWxscHRyKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoInRlc3RiMyIpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4o
KnZtLCBwcm9jZWR1cmUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBB
cmd1bWVudHM+Ci1UIGludm9rZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCitUIGludm9rZShjb25zdCBDb21waWxhdGlvbiYgY29kZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4u
LikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKQEAgLTg1
LDcgKzgyLDcgQEAgVCBpbnZva2UoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjbwogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBjb21waWxlQW5kUnVu
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHJl
dHVybiBpbnZva2U8VD4oY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOworICAgIHJl
dHVybiBpbnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKIH0KIAog
dm9pZCB0ZXN0NDIoKQpAQCAtMTgzMyw4ICsxODMwLDggQEAgdm9pZCB0ZXN0QnJhbmNoKCkKICAg
ICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENIRUNLKGludm9rZTxp
bnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAwKSA9PSAw
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0QnJhbmNoUHRyKCkKQEAg
LTE4NTgsOCArMTg1NSw4IEBAIHZvaWQgdGVzdEJyYW5jaFB0cigpCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCiAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oNDIpKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2Rl
LCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMCkpID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oNDIpKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDApKSA9PSAwKTsKIH0KIAogdm9p
ZCB0ZXN0RGlhbW9uZCgpCkBAIC0xODkxLDggKzE4ODgsOCBAQCB2b2lkIHRlc3REaWFtb25kKCkK
ICAgICBkb25lLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwaGkpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZv
a2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkg
PT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdEJyYW5jaE5vdEVx
dWFsKCkKQEAgLTE5MjEsOCArMTkxOCw4IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsKCkKICAg
ICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENIRUNLKGludm9rZTxp
bnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAwKSA9PSAw
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0QnJhbmNoTm90RXF1YWxD
b21tdXRlKCkKQEAgLTE5NTEsOCArMTk0OCw4IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsQ29t
bXV0ZSgpCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMCkpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVD
SyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29k
ZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKKyAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdEJyYW5j
aE5vdEVxdWFsTm90RXF1YWwoKQpAQCAtMTk4NCw4ICsxOTgxLDggQEAgdm9pZCB0ZXN0QnJhbmNo
Tm90RXF1YWxOb3RFcXVhbCgpCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAgQ0hFQ0soaW52
b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQy
KSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CiAKIHZv
aWQgdGVzdEJyYW5jaEVxdWFsKCkKQEAgLTIwMTQsOCArMjAxMSw4IEBAIHZvaWQgdGVzdEJyYW5j
aEVxdWFsKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENI
RUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihj
b2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0QnJh
bmNoRXF1YWxFcXVhbCgpCkBAIC0yMDQ3LDggKzIwNDQsOCBAQCB2b2lkIHRlc3RCcmFuY2hFcXVh
bEVxdWFsKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwotICAgIENI
RUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihj
b2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0ZXN0QnJh
bmNoRXF1YWxDb21tdXRlKCkKQEAgLTIwNzcsOCArMjA3NCw4IEBAIHZvaWQgdGVzdEJyYW5jaEVx
dWFsQ29tbXV0ZSgpCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMSkpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAg
ICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGlu
dD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAx
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVz
dEJyYW5jaEVxdWFsRXF1YWwxKCkKQEAgLTIxMTAsOCArMjEwNyw4IEBAIHZvaWQgdGVzdEJyYW5j
aEVxdWFsRXF1YWwxKCkKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAxKSk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwot
ICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAxKTsKLSAgICBDSEVDSyhpbnZva2U8
aW50Pihjb2RlLCAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KIAogdm9pZCB0
ZXN0QnJhbmNoRm9sZChpbnQgdmFsdWUpCkBAIC0yMzk3LDEwICsyMzk0LDEwIEBAIHZvaWQgdGVz
dFNpbXBsZUNoZWNrKCkKICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwogICAgIAotICAg
IENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOwotICAgIENIRUNLKGludm9rZTxpbnQ+
KGNvZGUsIDEpID09IDQyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7
CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDEpID09IDQyKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgTGVmdEZ1bmN0b3IsIHR5cGVuYW1lIFJpZ2h0RnVuY3Rvcj4KQEAgLTI2NTAsNiAr
MjY0NywxNyBAQCB2b2lkIHRlc3RDb21wYXJlKEIzOjpPcGNvZGUgb3Bjb2RlLCBpbnQgCiAgICAg
dmFyaWFudHMoLWxlZnQsIC1yaWdodCk7CiB9CiAKK3ZvaWQgdGVzdFJldHVybkRvdWJsZShkb3Vi
bGUgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCB2YWx1ZSkpOworCisgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoY29tcGlsZUFuZFJ1bjxkb3VibGU+KHByb2MpLCB2YWx1ZSkpOworfQorCiAjZGVm
aW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlm
ICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMTE0LDYgKzMxMjIsMTAgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4o
TG9hZDE2WiwgMTAwMDAwMDAwMCkpOwogICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9hZDE2
WiwgLTEwMDAwMDAwMDApKTsKIAorICAgIFJVTih0ZXN0UmV0dXJuRG91YmxlKDAuMCkpOworICAg
IFJVTih0ZXN0UmV0dXJuRG91YmxlKC0wLjApKTsKKyAgICBSVU4odGVzdFJldHVybkRvdWJsZSg0
Mi41KSk7CisKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDE5
MjEzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgewogCi1Db2RlOjpDb2RlKCkKLSAgICA6IG1fbGFzdFBoYXNlTmFt
ZSgiaW5pdGlhbCIpCitDb2RlOjpDb2RlKFByb2NlZHVyZSYgcHJvYykKKyAgICA6IG1fcHJvYyhw
cm9jKQorICAgICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKIHsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw5ICs1MCwxMSBAQCBjbGFzcyBDb2RlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2Rl
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBDb2RlKCk7Cisg
ICAgQ29kZShQcm9jZWR1cmUmKTsKICAgICB+Q29kZSgpOwogCisgICAgUHJvY2VkdXJlJiBwcm9j
KCkgeyByZXR1cm4gbV9wcm9jOyB9CisKICAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUg
ZnJlcXVlbmN5ID0gUE5hTik7CiAKICAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25l
ZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CkBA
IC0yOTMsNiArMjk1LDcgQEAgcHVibGljOgogICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2xhc3RQaGFzZU5hbWU7IH0KIAogcHJpdmF0ZToKKyAgICBQcm9j
ZWR1cmUmIG1fcHJvYzsgLy8gU29tZSBtZXRhLWRhdGEsIGxpa2UgYnlwcm9kdWN0cywgaXMgc3Rv
cmVkIGluIHRoZSBQcm9jZWR1cmUuCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Ns
b3Q+PiBtX3N0YWNrU2xvdHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVj
aWFsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlcwkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw5IEBAIE1v
dmVEb3VibGUgVTpGLCBEOkYKICAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKICAgICBUbXAs
IEluZGV4IGFzIHN0b3JlRG91YmxlCiAKK01vdmVaZXJvVG9Eb3VibGUgRDpGCisgICAgVG1wCisK
IE1vdmU2NFRvRG91YmxlIFU6RywgRDpGCiAgICAgVG1wLCBUbXAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265027</attachid>
            <date>2015-11-08 18:10:41 -0800</date>
            <delta_ts>2015-11-09 14:30:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80499</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBA
QAorMjAxNS0xMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggYSBkb3VibGUgY29u
c3RhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MTAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgaW1wbGVtZW50cyBhIGJ1bmNoIG9mIGFubm95aW5nIHN0dWZmIHRoYXQgaXMgbmVjZXNzYXJ5
IHRvIHN1cHBvcnQgY29uc3RhbnRzIHRoYXQgbmVlZCBhCisgICAgICAgIGRhdGEgc2VjdGlvbiwg
c3VjaCBhcyBkb3VibGUgY29uc3RhbnRzIG9uIFg4Nl82NDoKKworICAgICAgICAtIEIzOjpQcm9j
ZWR1cmUgY2FuIG5vdyB0ZWxsIHlvdSB3aGF0IHRvIGtlZXAgYWxpdmUgaW4gYWRkaXRpb24gdG8g
dGhlIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi4KKyAgICAgICAgICBXZSBjYWxsIHRoaXMgdGhlIEIz
OjpPcGFxdWVCeXByb2R1Y3RzLiBJdCdzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byBr
ZWVwIHRoaXMgYWxpdmUKKyAgICAgICAgICBhZnRlciBjYWxsaW5nIEIzOjpnZW5lcmF0ZSgpLgor
CisgICAgICAgIC0gQWRkZWQgYSBuZXcgaGVscGVyIGZvciBjb21waWxpbmcgQjMgY29kZSwgY2Fs
bGVkIEIzOjpDb21waWxhdGlvbi4gQ29uc3RydWN0aW5nIGEKKyAgICAgICAgICBDb21waWxhdGlv
biBydW5zIHRoZSBjb21waWxlci4gVGhlbiB5b3UgY2FuIHBhc3MgYXJvdW5kIGEgQ29tcGlsYXRp
b24gdGhlIHdheSB5b3Ugd291bGQKKyAgICAgICAgICBoYXZlIHBhc3NlZCBhcm91bmQgYSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuCisKKyAgICAgICAgLSBBZGRlZCBhIGNvbnN0YW50IG1vdGlvbiBw
aGFzZSwgY2FsbGVkIG1vdmVDb25zdGFudHMoKS4gVGhpcyBkb2VzIHZlcnkgc2ltcGxlIGNvbnN0
YW50CisgICAgICAgICAgaG9pc3Rpbmcvc2lua2luZzogaXQgbWFrZXMgc3VyZSB0aGF0IGVhY2gg
Y29uc3RhbnQgaXMgb25seSBtYXRlcmlhbGl6ZWQgaW4gb25lIHBsYWNlIGluCisgICAgICAgICAg
ZWFjaCBiYXNpYyBibG9jay4gSXQgdXNlcyBhIERhdGFTZWN0aW9uLCB3aGljaCBpcyBhIGtpbmQg
b2YgT3BhcXVlQnlwcm9kdWN0LCB0byBzdG9yZQorICAgICAgICAgIGRvdWJsZSBjb25zdGFudHMu
CisKKyAgICAgICAgLSBUaGUgd2F5IEkgd2FudGVkIHRvIGRvIGNvbnN0YW50IG1vdGlvbiBpcyB0
byBiYXNpY2FsbHkgdHJhY2sgd2hhdCBjb25zdGFudHMgYXJlIG9mIGludGVyZXN0CisgICAgICAg
ICAgYW5kIHRoZW4gcmVjcmVhdGUgdGhlbSBhcyBuZWVkZWQsIHNvIHRoZSBvcmlnaW5hbCBWYWx1
ZXMgYmVjb21lIGlycmVsZXZhbnQgaW4gdGhlIHByb2Nlc3MuCisgICAgICAgICAgVG8gZG8gdGhh
dCwgSSBuZWVkZWQgYW4gYWJzdHJhY3Rpb24gdGhhdCBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRo
ZSBERkcgUHVyZVZhbHVlCisgICAgICAgICAgYWJzdHJhY3Rpb24gdGhhdCB3ZSB1c2UgZm9yIENT
RS4gU28sIEkgY3JlYXRlZCBzdWNoIGEgdGhpbmcsIGFuZCBjYWxsZWQgaXQgVmFsdWVLZXkuIEl0
CisgICAgICAgICAgY2FuIGJlIHVzZWQgdG8gY29tcGFyZSBhbmQgaGFzaCBwdXJlIFZhbHVlcywg
YW5kIHRvIHJlY3JlYXRlIHRoZW0gYXMgbmVlZGVkLgorCisgICAgICAgIC0gRml4ZWQgdGhlIGxv
d2VyaW5nJ3MgaGFuZGxpbmcgb2YgY29uc3RhbnRzIHNvIHRoYXQgd2UgZG9uJ3QgcGVydHVyYiB0
aGUgcGxhY2VtZW50IG9mIHRoZQorICAgICAgICAgIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbnMu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZVplcm9Ub0RvdWJs
ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hEb3VibGVO
b25aZXJvKToKKyAgICAgICAgKiBiMy9CM0NvbW1vbi5oOgorICAgICAgICAoSlNDOjpCMzo6aXNJ
ZGVudGljYWwpOgorICAgICAgICAoSlNDOjpCMzo6aXNSZXByZXNlbnRhYmxlQXNJbXBsKToKKyAg
ICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpD
b21waWxhdGlvbjo6Q29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246
On5Db21waWxhdGlvbik6CisgICAgICAgICogYjMvQjNDb21waWxhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpjb2RlKToKKyAgICAgICAgKiBiMy9CM0NvbnN0
RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2Vw
dHMpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzRGF0YVNlY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkRhdGFTZWN0aW9uOjpEYXRhU2VjdGlvbik6CisgICAgICAgIChKU0M6
OkIzOjpEYXRhU2VjdGlvbjo6fkRhdGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkRhdGFT
ZWN0aW9uOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0RhdGFTZWN0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6RGF0YVNlY3Rpb246OmRhdGEpOgorICAgICAgICAoSlNDOjpCMzo6RGF0
YVNlY3Rpb246OnNpemUpOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6aW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tT3JU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpmaWxsU3RhY2ttYXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbUZvck1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpMb3dlclRvQWlyOjppbW1PclRtcEZvck1vdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIGIzL0IzTW92ZUNvbnN0YW50cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6bW92
ZUNvbnN0YW50cyk6CisgICAgICAgICogYjMvQjNNb3ZlQ29uc3RhbnRzLmg6IEFkZGVkLgorICAg
ICAgICAqIGIzL0IzT3BhcXVlQnlwcm9kdWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3BhcXVlQnlwcm9kdWN0OjpPcGFxdWVCeXByb2R1Y3QpOgorICAgICAgICAoSlNDOjpCMzo6T3Bh
cXVlQnlwcm9kdWN0Ojp+T3BhcXVlQnlwcm9kdWN0KToKKyAgICAgICAgKiBiMy9CM09wYXF1ZUJ5
cHJvZHVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM6
Ok9wYXF1ZUJ5cHJvZHVjdHMpOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6
fk9wYXF1ZUJ5cHJvZHVjdHMpOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6
YWRkKToKKyAgICAgICAgKEpTQzo6QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM6OmR1bXApOgorICAgICAg
ICAqIGIzL0IzT3BhcXVlQnlwcm9kdWN0cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9w
YXF1ZUJ5cHJvZHVjdHM6OmNvdW50KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAg
ICAoSlNDOjpCMzo6Y29uc3RQdHJPcGNvZGUpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJs
b2Nrc0luUHJlT3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkZWxldGVWYWx1
ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZERhdGFTZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkVmFsdWVJbmRleCk6CisgICAgICAgICogYjMvQjNQ
cm9jZWR1cmUuaDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6bGFzdFBoYXNlTmFtZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJ5cHJvZHVjdHMpOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjp0YWtlQnlwcm9kdWN0cyk6CisgICAgICAgICogYjMvQjNUeXBlLmg6
CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZWZm
ZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6a2V5KToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpwZXJmb3JtU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNWYWx1ZUtleS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6Om1hdGVyaWFsaXplKToK
KyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVLZXk6OlZhbHVlS2V5KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5OjpvcGNvZGUpOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVLZXk6OmNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OnZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5Ojpkb3VibGVWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZUtleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZUtleTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZUtleTo6Y2FuTWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5SGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleUhhc2g6OmVxdWFsKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
S2V5OjpWYWx1ZUtleSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6Y2hpbGQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
Q29kZSk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6cHJvYyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Omxhc3RQaGFzZU5h
bWUpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90
ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkIz
OjppbnZva2UpOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0NDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0QnJhbmNoUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REaWFtb25k
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hOb3RFcXVhbCk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0QnJhbmNoTm90RXF1YWxDb21tdXRlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RC
cmFuY2hOb3RFcXVhbE5vdEVxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hFcXVh
bCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoRXF1YWxFcXVhbCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QnJhbmNoRXF1YWxDb21tdXRlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RC
cmFuY2hFcXVhbEVxdWFsMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoRm9sZCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0U2ltcGxlQ2hlY2spOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFJldHVybkRvdWJsZSk6CisgICAgICAg
IChKU0M6OkIzOjpydW4pOgorCiAyMDE1LTExLTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFUzZdIE1pbmltaXplIEVTNl9DTEFTU19TWU5UQVgg
aWZkZWZzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyMTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2ICsyODgsMTggQEAKIAkJMEYzMzhE
RkExQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERjgxQkU5NkFBODAwMTNDODhGIC8qIEIz
Q0NhbGxWYWx1ZS5oICovOyB9OwogCQkwRjMzOERGRDFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2lt
cGxpZnlDRkcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMzhERkIxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCAqLzsgfTsK
IAkJMEYzMzhERkUxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGQzFCRUQ1MTI3MDAx
M0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLzsgfTsKKwkJMEYzMzhFMEIxQkYwMjc2QzAwMTND
ODhGIC8qIEIzQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMzhERkYxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24u
Y3BwICovOyB9OworCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDAx
QkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCAqLzsgfTsKKwkJMEYzMzhFMEQxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDExQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0
YVNlY3Rpb24uY3BwICovOyB9OworCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRh
U2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKKwkJMEYz
MzhFMEYxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMzFCRjAyNzZDMDAxM0M4
OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLzsgfTsKKwkJMEYzMzhFMTAxQkYwMjc2QzAwMTND
ODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50
cy5oICovOyB9OworCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4
RTA1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oICovOyB9OworCQkwRjMz
OEUxMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA2MUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwICovOyB9OworCQkwRjMzOEUxMzFCRjAyNzZD
MDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFx
dWVCeXByb2R1Y3RzLmggKi87IH07CisJCTBGMzM4RTE0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1Zh
bHVlS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCAqLzsgfTsKKwkJMEYz
MzhFMTUxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA5MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M1ZhbHVlS2V5LmggKi87IH07CisJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi87IH07
CiAJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLzsgfTsKIAkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IH07CiAJ
CTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMEYxN0NGMDc3RjAw
QjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi87IH07CkBAIC0yMzEzLDYgKzIzMjUsMTgg
QEAKIAkJMEYzMzhERjgxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NDYWxsVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ0Nh
bGxWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOERGQjFCRUQ1MTI3
MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyU2ltcGxpZnlDRkcuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNpbXBsaWZ5
Q0ZHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhERkMxQkVENTEyNzAw
MTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpclNpbXBsaWZ5Q0ZHLmg7IHBhdGggPSBiMy9haXIvQWlyU2ltcGxpZnlDRkcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhERkYxQkYwMjc2QzAwMTNDODhGIC8qIEIz
Q29tcGlsYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21waWxhdGlvbi5jcHA7IHBhdGggPSBiMy9CM0NvbXBpbGF0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMDAxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21waWxhdGlvbi5oOyBw
YXRoID0gYjMvQjNDb21waWxhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0RhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGIzL0Iz
RGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUwMjFC
RjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0RhdGFTZWN0aW9uLmg7IHBhdGggPSBiMy9CM0RhdGFTZWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M01vdmVDb25zdGFudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNNb3ZlQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzTW92ZUNvbnN0YW50cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01v
dmVDb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNNb3ZlQ29u
c3RhbnRzLmg7IHBhdGggPSBiMy9CM01vdmVDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzMzhFMDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3BhcXVlQnlwcm9kdWN0Lmg7
IHBhdGggPSBiMy9CM09wYXF1ZUJ5cHJvZHVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3BhcXVlQnlwcm9kdWN0cy5j
cHA7IHBhdGggPSBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3BhcXVlQnlwcm9kdWN0cy5o
OyBwYXRoID0gYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXkuY3BwOyBwYXRoID0gYjMv
QjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTA5MUJG
MDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXlJbmxp
bmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9
IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIx
NDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50
RW50cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBw
YXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ0MTUsNiArNDQzOSw4IEBACiAJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbW9uLmggKi8sCiAJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5jcHAgKi8sCiAJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5oICovLAorCQkJCTBGMzM4REZGMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0
aW9uLmNwcCAqLywKKwkJCQkwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlv
bi5oICovLAogCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCiAJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCiAJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKQEAgLTQ0MjYsNiArNDQ1Miw4IEBACiAJCQkJMEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oICovLAogCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggKi8sCisJCQkJMEYzMzhFMDExQkYwMjc2QzAwMTNDODhGIC8qIEIz
RGF0YVNlY3Rpb24uY3BwICovLAorCQkJCTBGMzM4RTAyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Rh
dGFTZWN0aW9uLmggKi8sCiAJCQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0
cy5jcHAgKi8sCiAJCQkJMEZFQzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICov
LAogCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAq
LywKQEAgLTQ0NDUsNiArNDQ3MywxMSBAQAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNN
ZW1vcnlWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVt
b3J5VmFsdWUuaCAqLywKKwkJCQkwRjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29u
c3RhbnRzLmNwcCAqLywKKwkJCQkwRjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29u
c3RhbnRzLmggKi8sCisJCQkJMEYzMzhFMDUxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlw
cm9kdWN0LmggKi8sCisJCQkJMEYzMzhFMDYxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlw
cm9kdWN0cy5jcHAgKi8sCisJCQkJMEYzMzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVl
Qnlwcm9kdWN0cy5oICovLAogCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29k
ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8s
CiAJCQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKQEAgLTQ0
ODYsNiArNDUxOSw5IEBACiAJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUu
Y3BwICovLAogCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCiAJ
CQkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJ
MEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovLAorCQkJCTBGMzM4
RTA5MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8sCisJCQkJMEYzMzhFMEExQkYw
Mjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg0RkMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAogCQkJCTBGRUM4NEZEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi8sCiAJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0
IC8qIHRlc3RiMy5jcHAgKi8sCkBAIC02NTM0LDYgKzY1NzAsNyBAQAogCQkJCTBGRUM4NTcwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTcyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxp
bWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjYzMSw2ICs2NjY4LDcgQEAKIAkJ
CQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNW
YWx1ZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8q
IEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlE
MjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjQzLDYgKzY2ODEsNyBAQAogCQkJCTk5REEwMEE3MUJENTk5MzEwMEY0NTc1QyAvKiBidWls
dGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURB
MDBBODFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBOTFCRDU5OTMxMDBGNDU3NUMg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYzMzhFMTExQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OURBMDBBQTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJh
dGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBB
MzFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5IGluIEhl
YWRlcnMgKi8sCkBAIC02OTU5LDYgKzY5OTgsNyBAQAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDND
RTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUM1
RTVGMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJENDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRB
cmd1bWVudEZvck9wZXJhbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ3MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjk4NSw2ICs3MDI1LDcgQEAKIAkJCQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5RDAyMTdBMEI5
MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhp
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCREUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9T
UkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzM0OCw2ICs3Mzg5LDcg
QEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdG
N0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzMzhFMEUx
QkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNI
NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKQEAgLTc1NTIsNiArNzU5NCw3IEBACiAJCQkJ
NUQ1MzcyNkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9y
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzMzhFMTMxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3Bh
cXVlQnlwcm9kdWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTRE
QzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjA5LDYgKzgyNTIsNyBAQAogCQkJCTE0OEYyMUFBMTA3RUM1M0EwMDQyRUMyQyAv
KiBCeXRlY29kZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDk0QzRERTFBRTQz
OTUzMDA0MUEyRUUgLyogQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMkZDQUUxMjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QjgzOTJGMUJBQ0FENkEwMDQ0
RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyRDEw
N0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NEIy
NzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIy
NSw2ICs4MjY5LDcgQEAKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3MSAvKiBDb2Rl
QmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIy
NiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYzMzhFMEYxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQ4QTMxMzE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENv
ZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04Mjk3LDYgKzgzNDIsNyBAQAogCQkJCUE3
RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMTIxQkYwMjc2QzAwMTND
ODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5
OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUMyQzBGN0NEMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg2OTQsNiArODc0MCw3
IEBACiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FF
IC8qIE1vZHVsZUFuYWx5emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4
NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYzMzhFMEIxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlERTAxMDdFQzdFNzAwNjUwNDQ2IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTExMDdFQzdFNzAwNjUwNDQ2IC8qIE5h
dGl2ZUVycm9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDIwMUI5MDEz
REUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04NzE4LDYgKzg3NjUsNyBAQAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJz
ZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY5Q0U3MzFCOUNENkQwMDA0RURDQTYg
LyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFODM0MTcxQTZF
Rjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMzM4RTE0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRh
cmdldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZCIC8q
IFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFDNEZERDAwODUzNThF
IC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0MCw2ICs5
NDAsMTEgQEAgcHVibGljOgogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVy
LmpuZSgpKTsKICAgICB9CiAKKyAgICB2b2lkIG1vdmVaZXJvVG9Eb3VibGUoRlBSZWdpc3RlcklE
IHJlZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcnBkX3JyKHJlZywgcmVnKTsKKyAg
ICB9CisKICAgICBKdW1wIGJyYW5jaERvdWJsZU5vblplcm8oRlBSZWdpc3RlcklEIHJlZywgRlBS
ZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNTU0UyUHJlc2VudCgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAxOTIxMzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTIgKzQwLDMyIEBAIGJvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7CiBi
b29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CiBib29sIHNob3VsZE1lYXN1cmVQaGFzZVRp
bWluZygpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBCaXRzVHlwZSwgdHlwZW5hbWUgSW5wdXRUeXBl
PgoraW5saW5lIGJvb2wgaXNJZGVudGljYWwoSW5wdXRUeXBlIGxlZnQsIElucHV0VHlwZSByaWdo
dCkKK3sKKyAgICBCaXRzVHlwZSBsZWZ0Qml0cyA9IGJpdHdpc2VfY2FzdDxCaXRzVHlwZT4obGVm
dCk7CisgICAgQml0c1R5cGUgcmlnaHRCaXRzID0gYml0d2lzZV9jYXN0PEJpdHNUeXBlPihyaWdo
dCk7CisgICAgcmV0dXJuIGxlZnRCaXRzID09IHJpZ2h0Qml0czsKK30KKworaW5saW5lIGJvb2wg
aXNJZGVudGljYWwoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KQoreworICAgIHJldHVybiBp
c0lkZW50aWNhbDxpbnQzMl90PihsZWZ0LCByaWdodCk7Cit9CisKK2lubGluZSBib29sIGlzSWRl
bnRpY2FsKGludDY0X3QgbGVmdCwgaW50NjRfdCByaWdodCkKK3sKKyAgICByZXR1cm4gaXNJZGVu
dGljYWw8aW50NjRfdD4obGVmdCwgcmlnaHQpOworfQorCitpbmxpbmUgYm9vbCBpc0lkZW50aWNh
bChkb3VibGUgbGVmdCwgZG91YmxlIHJpZ2h0KQoreworICAgIHJldHVybiBpc0lkZW50aWNhbDxp
bnQ2NF90PihsZWZ0LCByaWdodCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lIElucHV0VHlwZSwgdHlwZW5hbWUgQml0c1R5cGU+CiBpbmxpbmUgYm9vbCBpc1Jl
cHJlc2VudGFibGVBc0ltcGwoSW5wdXRUeXBlIG9yaWdpbmFsVmFsdWUpCiB7Ci0gICAgLy8gR2V0
IHRoZSByYXcgYml0cyBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuCi0gICAgQml0c1R5cGUgb3JpZ2lu
YWxCaXRzID0gYml0d2lzZV9jYXN0PEJpdHNUeXBlPihvcmlnaW5hbFZhbHVlKTsKLQogICAgIC8v
IENvbnZlcnQgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIHRoZSBkZXNpcmVkIHJlc3VsdCB0eXBlLgog
ICAgIFJlc3VsdFR5cGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4ob3JpZ2luYWxW
YWx1ZSk7CiAKQEAgLTUzLDEwICs3Myw3IEBAIGlubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFz
SW1wbChJbnB1dFQKICAgICAvLyB1c2luZyB0aGUgbmV3IHR5cGUgaWYgc3VjaCByb3VuZC10cmlw
cGluZyBkb2Vzbid0IGxvc2UgYml0cy4KICAgICBJbnB1dFR5cGUgbmV3VmFsdWUgPSBzdGF0aWNf
Y2FzdDxJbnB1dFR5cGU+KHJlc3VsdCk7CiAKLSAgICAvLyBHZXQgdGhlIHJhdyBiaXRzIG9mIHRo
ZSByb3VuZC10cmlwcGVkIHZhbHVlLgotICAgIEJpdHNUeXBlIG5ld0JpdHMgPSBiaXR3aXNlX2Nh
c3Q8Qml0c1R5cGU+KG5ld1ZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gb3JpZ2luYWxCaXRzID09
IG5ld0JpdHM7CisgICAgcmV0dXJuIGlzSWRlbnRpY2FsPEJpdHNUeXBlPihvcmlnaW5hbFZhbHVl
LCBuZXdWYWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24u
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5j
bHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29t
cGlsYXRpb246OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jKQoreworICAgIEND
YWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxscHRyKTsKKworICAgIG1fY29kZVJlZiA9IEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJCMzo6Q29tcGlsYXRpb24iKSk7CisgICAgbV9ieXBy
b2R1Y3RzID0gcHJvYy50YWtlQnlwcm9kdWN0cygpOworfQorCitDb21waWxhdGlvbjo6fkNvbXBp
bGF0aW9uKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbXBpbGF0aW9uX2gKKyNk
ZWZpbmUgQjNDb21waWxhdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZN
OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBPcGFxdWVCeXByb2R1Y3RzOworY2xhc3MgUHJv
Y2VkdXJlOworCisvLyBUaGlzIGlzIGEgZm9vbC1wcm9vZiBBUEkgZm9yIGNvbXBpbGluZyBhIFBy
b2NlZHVyZSB0byBjb2RlIGFuZCB0aGVuIHJ1bm5pbmcgdGhhdCBjb2RlLiBZb3UgY29tcGlsZQor
Ly8gYSBQcm9jZWR1cmUgdXNpbmcgdGhpcyBBUEkgYnkgZG9pbmc6CisvLworLy8gc3RkOjp1bmlx
dWVfcHRyPENvbXBpbGF0aW9uPiBjb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGls
YXRpb24+KHZtLCBwcm9jKTsKKy8vCisvLyBUaGVuIHlvdSBrZWVwIHRoZSBDb21waWxhdGlvbiBv
YmplY3QgYWxpdmUgZm9yIGFzIGxvayBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUg
Y29kZS4gSWYKKy8vIHRoaXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBC
Mzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KKworY2xhc3MgQ29tcGlsYXRpb24geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbXBpbGF0aW9uKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJv
Y2VkdXJlJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CisKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2Rl
KCk7IH0KKworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlUmVmOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBtX2J5cHJvZHVjdHM7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0NvbXBpbGF0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTkyMTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1jbGFz
cyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91
YmxlOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEYXRhU2VjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRGF0YVNlY3Rp
b24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRGF0YVNl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzRGF0YVNlY3Rpb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitEYXRhU2VjdGlvbjo6RGF0YVNlY3Rpb24oc2l6ZV90
IHNpemUpCisgICAgOiBtX2RhdGEoZmFzdE1hbGxvYyhzaXplKSkKKyAgICAsIG1fc2l6ZShzaXpl
KQoreworfQorCitEYXRhU2VjdGlvbjo6fkRhdGFTZWN0aW9uKCkKK3sKKyAgICBmYXN0RnJlZSht
X2RhdGEpOworfQorCit2b2lkIERhdGFTZWN0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJEYXRhU2VjdGlvbiBhdCAiLCBSYXdQb2ludGVyKG1fZGF0
YSksICIgd2l0aCAiLCBtX3NpemUsICIgYnl0ZXMuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRGF0YVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNEYXRhU2VjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRGF0YVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNEYXRhU2VjdGlvbl9oCisjZGVmaW5lIEIzRGF0YVNlY3Rpb25faAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBEYXRhU2VjdGlvbiA6IHB1YmxpYyBPcGFxdWVC
eXByb2R1Y3QgeworcHVibGljOgorICAgIERhdGFTZWN0aW9uKHNpemVfdCBzaXplKTsKKyAgICB2
aXJ0dWFsIH5EYXRhU2VjdGlvbigpOworCisgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICB2b2lkKiBtX2RhdGE7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
RGF0YVNlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNMb3dlclRv
QWlyLmgiCisjaW5jbHVkZSAiQjNNb3ZlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKICNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdT
Y29wZS5oIgpAQCAtNDQsNyArNDUsNyBAQCB2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDQ2FsCiB7CiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoImdlbmVyYXRlIik7CiAK
LSAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBBaXI6OkNvZGUgY29kZShwcm9jZWR1cmUpOwogICAg
IGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKICAgICBBaXI6OmdlbmVyYXRlKGNvZGUs
IGppdCk7CiB9CkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUm
IHByb2NlZHVyZSwKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKIAor
ICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKKwogICAgIGlmIChzaG91bGRWYWxpZGF0ZUlS
KCkpCiAgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyMTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0MCwyMiArNDQwLDE0IEBAIHByaXZhdGU6CiAKICAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCisg
ICAgICAgIGlmICh2YWx1ZS0+aGFzSW50KCkgJiYgdmFsdWUtPnJlcHJlc2VudGFibGVBczxpbnQz
Ml90PigpKQogICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc051bWJlcjxpbnQz
Ml90PigpKTsKICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgIH0KIAotICAgIEFyZyBpbW1Gb3JN
b3ZlKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBpZiAodmFsdWUtPmhhc0ludDY0
KCkpCi0gICAgICAgICAgICByZXR1cm4gQXJnOjppbW02NCh2YWx1ZS0+YXNJbnQ2NCgpKTsKLSAg
ICAgICAgcmV0dXJuIEFyZygpOwotICAgIH0KLQotICAgIEFyZyBpbW1PclRtcEZvck1vdmUoVmFs
dWUqIHZhbHVlKQorICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAoQXJnIHJlc3VsdCA9IGltbUZvck1vdmUodmFsdWUpKQorICAgICAgICBpZiAoQXJnIHJl
c3VsdCA9IGltbSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gdG1wKHZhbHVlKTsKICAgICB9CkBAIC03MzEsMTQgKzcyMywyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgQXJnIGFyZzsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2lu
ZCgpKSB7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6Ci0gICAgICAgICAgICAgICAg
YXJnID0gaW1tT3JUbXBGb3JNb3ZlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGlm
IChpbW0odmFsdWUudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IGltbSh2YWx1
ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS52YWx1ZSgpLT5oYXNJ
bnQ2NCgpKQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmltbTY0KHZhbHVlLnZhbHVl
KCktPmFzSW50NjQoKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUudmFsdWUoKS0+
aGFzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6aW1tNjQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KHZhbHVlLnZhbHVlKCktPmFzRG91YmxlKCkpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKICAgICAgICAgICAgICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoK
ICAgICAgICAgICAgICAgICBhcmcgPSBUbXAodmFsdWUucmVwKCkucmVnKCkpOwotICAgICAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcEZvck1vdmUodmFsdWUudmFsdWUoKSksIGFyZyk7
CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBh
cmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDoKICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUu
cmVwKCkub2Zmc2V0RnJvbVNQKCkpOwpAQCAtMTE1Miw3ICsxMTUxLDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgp
KSB7Ci0gICAgICAgIGNhc2UgTG9hZDp7CisgICAgICAgIGNhc2UgQjM6Ok5vcDogeworICAgICAg
ICAgICAgLy8gWWVzLCB3ZSB3aWxsIHRvdGFsbHkgc2VlIE5vcCdzIGJlY2F1c2Ugc29tZSBwaGFz
ZXMgd2lsbCByZXBsYWNlV2l0aE5vcCgpIGluc3RlYWQgb2YKKyAgICAgICAgICAgIC8vIHByb3Bl
cmx5IHJlbW92aW5nIHRoaW5ncy4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgTG9hZDogewogICAgICAgICAgICAgYXBwZW5kKAogICAg
ICAgICAgICAgICAgIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksCiAgICAgICAgICAgICAg
ICAgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKQEAgLTEyODUsOSArMTI5MCwyMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBD
b25zdDMyOgorICAgICAgICBjYXNlIENvbnN0MzI6IHsKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBpbW0obV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDb25zdDY0OiB7Ci0gICAgICAgICAgICBhcHBlbmQoTW92ZSwg
aW1tRm9yTW92ZShtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChpbW0o
bV92YWx1ZSkpCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbShtX3ZhbHVlKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjppbW02NChtX3ZhbHVlLT5hc0ludDY0KCkpLCB0bXAobV92YWx1ZSkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDb25zdERvdWJsZTogewor
ICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIG1vdmVDb25zdGFudHMoKSBwaGFzZSBo
YXMgcnVuLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJZGVudGljYWwobV92YWx1ZS0+
YXNEb3VibGUoKSwgMC4wKSk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZVplcm9Ub0RvdWJsZSwg
dG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMzU0
LDcgKzEzNzIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVwc2lsb246IHsKICAgICAgICAg
ICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgYXBwZW5k
KAotICAgICAgICAgICAgICAgIHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1t
T3JUbXBGb3JNb3ZlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICByZWxheGVkTW92ZUZvclR5cGUo
dmFsdWUtPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlKSwKICAgICAgICAgICAgICAgICB0bXAobV92
YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpLT5waGkoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0xMzgxLDkgKzEzOTksMTYgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNl
IFJldHVybjogewogICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7
Ci0gICAgICAgICAgICBhcHBlbmQoCi0gICAgICAgICAgICAgICAgcmVsYXhlZE1vdmVGb3JUeXBl
KHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcEZvck1vdmUodmFsdWUpLAotICAgICAgICAgICAgICAg
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgQWlyOjpPcGNvZGUg
bW92ZTsKKyAgICAgICAgICAgIFRtcCBkZXN0OworICAgICAgICAgICAgaWYgKGlzSW50KHZhbHVl
LT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgbW92ZSA9IE1vdmU7CisgICAgICAgICAgICAg
ICAgZGVzdCA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1vdmUgPSBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAg
IGRlc3QgPSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXBwZW5kKG1vdmUsIGltbU9yVG1wKHZhbHVlKSwgZGVzdCk7CiAgICAgICAgICAg
ICBhcHBlbmQoUmV0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNb3ZlQ29u
c3RhbnRzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCituYW1lc3BhY2UgeworCitjbGFzcyBNb3ZlQ29uc3RhbnRzIHsKK3B1YmxpYzoKKyAgICBN
b3ZlQ29uc3RhbnRzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAg
ICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1
bigpCisgICAgeworICAgICAgICAvLyBFdmVudHVhbGx5IHRoaXMgcGhhc2Ugd2lsbCBkbyBzbWFy
dCB0aGluZ3MuIEZvciBub3csIGl0IHVzZXMgYSBzdXBlciBzaW1wbGUgaGV1cmlzdGljOiBpdAor
ICAgICAgICAvLyBwbGFjZXMgbGFyZ2UgY29uc3RhbnRzIGluIHRoZSBibG9jayB0aGF0IHVzZXMg
dGhlbSwgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIGJsb2NrIGhhcworICAgICAgICAvLyBvbmx5
IG9uZSBtYXRlcmlhbGl6YXRpb24gZm9yIGVhY2ggbGFyZ2UgY29uc3RhbnQuCisKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBhIGJldHRlciBzdG9yeSBmb3IgY29uc3RhbnRzLiBBdCBhIG1p
bmltdW0gdGhpcyBzaG91bGQgYWxsb3cgdGhlIEIzCisgICAgICAgIC8vIGNsaWVudCB0byBzcGVj
aWZ5IGltcG9ydGFudCBjb25zdGFudHMgdGhhdCBhbHdheXMgZ2V0IGhvaXN0ZWQuIEFsc28sIHRo
ZSB0YWJsZSB1c2VkIHRvCisgICAgICAgIC8vIGhvbGQgZG91YmxlIGNvbnN0YW50cyBzaG91bGQg
aGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQgdG8gYmUg
bW9yZQorICAgICAgICAvLyBhZ2dyZXNzaXZlLCB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50IG1hdGVy
aWFsaXphdGlvbiBiZSBhIGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3VsZCBsYWJlbAorICAgICAgICAv
LyBzb21lIFRtcHMgYXMgYmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBoYXZlIGEg
bGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJlZ2lzdGVyCisgICAgICAgIC8vIGFsbG9jYXRpb24gLSB0
aGF0IGNyZWF0ZXMgbWF0ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBzIGJ5IHNj
YXZlbmdpbmcgbGVmdG92ZXIKKyAgICAgICAgLy8gcmVnaXN0ZXJzLgorCisgICAgICAgIC8vIEZp
cnN0IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25zdGFudHMgZ28gaW50byB0aGUgZGF0
YSBzZWN0aW9uLiBUaGVzZSBhcmUgbm9uLXplcm8KKyAgICAgICAgLy8gZG91YmxlIGNvbnN0YW50
cy4KKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVzKCkpIHsKKyAgICAg
ICAgICAgIGlmICghbmVlZHNNb3Rpb24odmFsdWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgbV90b1JlbW92ZS5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgVmFs
dWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtl
eSkpCisgICAgICAgICAgICAgICAgbV9jb25zdFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5z
aXplKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8aW50NjRfdCo+KG1fcHJvYy5hZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6
ZSgpICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Nv
bnN0VGFibGUpCisgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5
LmtleS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fcHJvYykgeworICAgICAgICAgICAgbV9jb25zdGFudHMuY2xlYXIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2
YWx1ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVl
KiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW5lZWRzTW90aW9uKGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbWF0ZXJpYWxpemUodmFsdWVJbmRleCwgY2hp
bGQtPmtleSgpLCB2YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB0b1JlbW92ZSA6IG1fdG9S
ZW1vdmUpCisgICAgICAgICAgICB0b1JlbW92ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVmFsdWUqIG1hdGVyaWFsaXplKHVuc2lnbmVkIHZhbHVlSW5kZXgsIGNv
bnN0IFZhbHVlS2V5JiBrZXksIGNvbnN0IE9yaWdpbiYgb3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKFZhbHVlKiByZXN1bHQgPSBtX2NvbnN0YW50cy5nZXQoa2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBkb24n
dCBkbyB0aGlzIGluIG9uZSBhZGQoKSBiZWNhdXNlIHRoaXMgaXMgYSByZWN1cnNpdmUgZnVuY3Rp
b24KKyAgICAgICAgLy8gdGhhdCBtYXkgcmVoYXNoIHRoZSBtYXAuCisKKyAgICAgICAgVmFsdWUq
IHJlc3VsdDsKKyAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpIHsKKyAgICAgICAgICAgIFZh
bHVlKiB0YWJsZUJhc2UgPSBtYXRlcmlhbGl6ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
LAorICAgICAgICAgICAgICAgIFZhbHVlS2V5KAorICAgICAgICAgICAgICAgICAgICBjb25zdFB0
ck9wY29kZSgpLCBwb2ludGVyVHlwZSgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YVNlY3Rpb24pKSksCisgICAg
ICAgICAgICAgICAgb3JpZ2luKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwg
a2V5LnR5cGUoKSwgb3JpZ2luLCB0YWJsZUJhc2UsCisgICAgICAgICAgICAgICAgc2l6ZW9mKGlu
dHB0cl90KSAqIG1fY29uc3RUYWJsZS5nZXQoa2V5KSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUodmFsdWVJbmRleCwga2V5
Lm1hdGVyaWFsaXplKG1fcHJvYywgb3JpZ2luKSk7CisgICAgICAgIG1fY29uc3RhbnRzLmFkZChr
ZXksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBn
b2VzSW5UYWJsZShjb25zdCBWYWx1ZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtl
eS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZSAmJiBrZXkgIT0gZG91YmxlWmVybygpOworICAgIH0K
KworICAgIGJvb2wgbmVlZHNNb3Rpb24oY29uc3QgVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgLy8gV2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IDMyLWJpdCBpbnQg
Y29uc3RhbnRzIGFyZSBhbHdheXMgY2hlYXAgdG8gbWF0ZXJpYWxpemUuCisgICAgICAgIC8vIFRo
aXMgaXMgd3JvbmcgZm9yIEFSTS4gV2UgbmVlZCBzb21lIGFic3RyYWN0IHF1ZXJ5IGxpa2UgImlz
SW1tZWRpYXRlKGludDY0X3QpIi4gT24KKyAgICAgICAgLy8gQVJNNjQgdGhpcyB3b3VsZCB0YWtl
IGludG8gYWNjb3VudCB0aGUgd2F5IHRoYXQgQVJNNjQgY2FuIGVuY29kZSBsYXJnZSBjb25zdGFu
dHMuCisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50KCkgJiYgdmFsdWUtPnJlcHJlc2VudGFibGVB
czxpbnQzMl90PigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZUtleSBkb3VibGVaZXJvKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBWYWx1ZUtleShDb25zdERvdWJsZSwgRG91YmxlLCAwLjApOworICAg
IH0KKworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIFZlY3RvcjxWYWx1ZSo+IG1fdG9SZW1v
dmU7CisgICAgSGFzaE1hcDxWYWx1ZUtleSwgdW5zaWduZWQ+IG1fY29uc3RUYWJsZTsKKyAgICBp
bnQ2NF90KiBtX2RhdGFTZWN0aW9uOworICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gbV9j
b25zdGFudHM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbW92ZUNvbnN0YW50cyhQcm9jZWR1cmUmIHByb2Mp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJtb3ZlQ29uc3RhbnRzIik7Cisg
ICAgTW92ZUNvbnN0YW50cyBtb3ZlQ29uc3RhbnRzKHByb2MpOworICAgIG1vdmVDb25zdGFudHMu
cnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFu
dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25z
dGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNb3ZlQ29uc3RhbnRzX2gK
KyNkZWZpbmUgQjNNb3ZlQ29uc3RhbnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIE1vdmVz
IGxhcmdlIGNvbnN0YW50cyBhcm91bmQsIHdpdGggdGhlIGdvYWwgb2YgcGxhY2luZyB0aGVtIGlu
IHRoZSBvcHRpbWFsIHBvaW50cyBpbiB0aGUgcHJvZ3JhbS4KKwordm9pZCBtb3ZlQ29uc3RhbnRz
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM01vdmVDb25zdGFudHNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3QuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wYXF1ZUJ5cHJvZHVjdF9oCisjZGVmaW5lIEIzT3Bh
cXVlQnlwcm9kdWN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
T3BhcXVlQnlwcm9kdWN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVCeXByb2R1
Y3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9wYXF1ZUJ5
cHJvZHVjdCgpIHsgfQorICAgIHZpcnR1YWwgfk9wYXF1ZUJ5cHJvZHVjdCgpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM09wYXF1ZUJ5cHJvZHVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wYXF1ZUJ5cHJvZHVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
T3BhcXVlQnlwcm9kdWN0czo6T3BhcXVlQnlwcm9kdWN0cygpCit7Cit9CisKK09wYXF1ZUJ5cHJv
ZHVjdHM6On5PcGFxdWVCeXByb2R1Y3RzKCkKK3sKK30KKwordm9pZCBPcGFxdWVCeXByb2R1Y3Rz
OjphZGQoc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdD4gYnlwcm9kdWN0KQoreworICAg
IG1fYnlwcm9kdWN0cy5hcHBlbmQoV1RGOjptb3ZlKGJ5cHJvZHVjdCkpOworfQorCit2b2lkIE9w
YXF1ZUJ5cHJvZHVjdHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIkJ5cHJvZHVjdHM6XG4iKTsKKyAgICBpZiAobV9ieXByb2R1Y3RzLmlzRW1wdHkoKSkg
eworICAgICAgICBvdXQucHJpbnQoIiAgICA8ZW1wdHk+XG4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBmb3IgKGF1dG8mIGJ5cHJvZHVjdCA6IG1fYnlwcm9kdWN0cykKKyAgICAgICAg
b3V0LnByaW50KCIgICAgIiwgKmJ5cHJvZHVjdCwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNPcGFxdWVCeXByb2R1Y3RzX2gKKyNkZWZpbmUgQjNPcGFx
dWVCeXByb2R1Y3RzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM09wYXF1
ZUJ5cHJvZHVjdC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBPcGFxdWVCeXByb2R1
Y3RzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVCeXByb2R1Y3RzKQorICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9wYXF1ZUJ5cHJvZHVjdHMoKTsK
KyAgICB+T3BhcXVlQnlwcm9kdWN0cygpOworCisgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXByb2R1Y3RzLnNpemUoKTsgfQorICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5p
cXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Q+KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlw
cm9kdWN0Pj4gbV9ieXByb2R1Y3RzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGFxdWVCeXByb2R1Y3Rz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjEz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksNiArMjA5LDEzIEBAIGlubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNv
ZGUpCiAKIE9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9wY29kZSwgVHlwZSk7CiAK
K2lubGluZSBPcGNvZGUgY29uc3RQdHJPcGNvZGUoKQoreworICAgIGlmIChpczY0Qml0KCkpCisg
ICAgICAgIHJldHVybiBDb25zdDY0OworICAgIHJldHVybiBDb25zdDMyOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjEzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEy
ICszMSwxNSBAQAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tVdGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1
ZGUgIkIzRGF0YVNlY3Rpb24uaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKIAogUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQogICAgIDogbV9sYXN0UGhhc2VOYW1lKCJpbml0
aWFsIikKKyAgICAsIG1fYnlwcm9kdWN0cyhzdGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVj
dHM+KCkpCiB7CiB9CiAKQEAgLTEwNyw2ICsxMTAsOCBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjCiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlz
KQogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobV9ieXByb2R1
Y3RzLT5jb3VudCgpKQorICAgICAgICBvdXQucHJpbnQoKm1fYnlwcm9kdWN0cyk7CiB9CiAKIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9yZGVyKCkKQEAgLTEyNiw2
ICsxMzEsMTYgQEAgdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKFZhbHVlKiB2YWx1ZQogICAg
IG1fdmFsdWVzW3ZhbHVlLT5pbmRleCgpXSA9IG51bGxwdHI7CiB9CiAKK3ZvaWQqIFByb2NlZHVy
ZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFzaXplKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVNlY3Rpb24+IGRhdGFT
ZWN0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxEYXRhU2VjdGlvbj4oc2l6ZSk7CisgICAgdm9pZCog
cmVzdWx0ID0gZGF0YVNlY3Rpb24tPmRhdGEoKTsKKyAgICBtX2J5cHJvZHVjdHMtPmFkZChXVEY6
Om1vdmUoZGF0YVNlY3Rpb24pKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzaXplX3QgUHJv
Y2VkdXJlOjphZGRWYWx1ZUluZGV4KCkKIHsKICAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3Qu
aXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAko
cmV2aXNpb24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiBjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgT3BhcXVlQnlwcm9kdWN0czsK
IGNsYXNzIFZhbHVlOwogCiBjbGFzcyBQcm9jZWR1cmUgewpAQCAtMjAxLDYgKzIwMiwxOSBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0UGhhc2VOYW1lOyB9CiAKKyAgICB2b2lkKiBhZGREYXRhU2VjdGlvbihzaXplX3Qgc2l6
ZSk7CisKKyAgICBPcGFxdWVCeXByb2R1Y3RzJiBieXByb2R1Y3RzKCkgeyByZXR1cm4gKm1fYnlw
cm9kdWN0czsgfQorCisgICAgLy8gQmVsb3cgYXJlIG1ldGhvZHMgdGhhdCBtYWtlIHNlbnNlIHRv
IGNhbGwgYWZ0ZXIgeW91IGhhdmUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBwcm9jZWR1cmUuCisK
KyAgICAvLyBZb3UgaGF2ZSB0byBjYWxsIHRoaXMgbWV0aG9kIGFmdGVyIGNhbGxpbmcgZ2VuZXJh
dGUoKS4gVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IEIzOjpnZW5lcmF0ZSgpCisgICAgLy8gd2lsbCBy
ZXF1aXJlIHlvdSB0byBrZWVwIHRoaXMgb2JqZWN0IGFsaXZlIGZvciBhcyBsb25nIGFzIHRoYXQg
Y29kZSBpcyBydW5uYWJsZS4gVXN1YWxseSwgdGhpcworICAgIC8vIGp1c3Qga2VlcHMgYWxpdmUg
dGhpbmdzIGxpa2UgdGhlIGRvdWJsZSBjb25zdGFudCBwb29sIGFuZCBzd2l0Y2ggbG9va3VwIHRh
Ymxlcy4gSWYgdGhpcyBzb3VuZHMKKyAgICAvLyBjb25mdXNpbmcsIHlvdSBzaG91bGQgcHJvYmFi
bHkgYmUgdXNpbmcgdGhlIEIzOjpDb21waWxhdGlvbiBBUEkgdG8gY29tcGlsZSBjb2RlLiBJZiB5
b3UgdXNlCisgICAgLy8gdGhhdCBBUEksIHRoZW4geW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJv
dXQgdGhpcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gdGFrZUJ5cHJv
ZHVjdHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQorCiBwcml2YXRlOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBhZGRWYWx1ZUluZGV4KCk7CiAgICAgCkBAIC0y
MDgsNiArMjIyLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVl
Pj4gbV92YWx1ZXM7CiAgICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUluZGV4RnJlZUxpc3Q7CiAg
ICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFx
dWVCeXByb2R1Y3RzPiBtX2J5cHJvZHVjdHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDE5MjEzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotZW51bSBUeXBl
IHsKK2VudW0gVHlwZSA6IGludDhfdCB7CiAgICAgVm9pZCwKICAgICBJbnQzMiwKICAgICBJbnQ2
NCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjEz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKICNpbmNs
dWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKQEAgLTM1Niw2ICszNTcsNjEg
QEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcGNvZGUoKSkg
eworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gVmFsdWVLZXkob3Bjb2Rl
KCksIHR5cGUoKSk7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNh
c2UgU0V4dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgIGNhc2Ug
VHJ1bmM6CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgRFRvSTMy
OgorICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiBWYWx1ZUtleShvcGNvZGUoKSwgdHlw
ZSgpLCBjaGlsZCgwKSk7CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBN
dWw6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoK
KyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNh
c2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVx
dWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNl
IEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2Ug
QmVsb3dFcXVhbDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9w
Y29kZSgpLCB0eXBlKCksIGNoaWxkKDApLCBjaGlsZCgxKSk7CisgICAgY2FzZSBDb25zdDMyOgor
ICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3QzMiwgdHlwZSgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90Pihhc0ludDMyKCkpKTsKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIHJldHVybiBWYWx1
ZUtleShDb25zdDY0LCB0eXBlKCksIGFzSW50NjQoKSk7CisgICAgY2FzZSBDb25zdERvdWJsZToK
KyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0RG91YmxlLCB0eXBlKCksIGFzRG91YmxlKCkp
OworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIHJldHVybiBWYWx1ZUtleSgKKyAgICAg
ICAgICAgIEFyZ3VtZW50UmVnLCB0eXBlKCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2
NF90PihhczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygpLmluZGV4KCkpKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVmFsdWVLZXkoKTsKKyAgICB9Cit9CisKIHZvaWQg
VmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRpb24oKQogewogICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6
IGNoaWxkcmVuKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNp
b24gMTkyMTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCiAjaW5jbHVk
ZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0xNjcsOSArMTY4LDE0IEBA
IHB1YmxpYzoKICAgICBUcmlTdGF0ZSBhc1RyaVN0YXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xp
a2VaZXJvKCkgY29uc3QgeyByZXR1cm4gYXNUcmlTdGF0ZSgpID09IEZhbHNlVHJpU3RhdGU7IH0K
ICAgICBib29sIGlzTGlrZU5vblplcm8oKSBjb25zdCB7IHJldHVybiBhc1RyaVN0YXRlKCkgPT0g
VHJ1ZVRyaVN0YXRlOyB9Ci0gICAgCisKICAgICBFZmZlY3RzIGVmZmVjdHMoKSBjb25zdDsKIAor
ICAgIC8vIFRoaXMgcmV0dXJucyBhIFZhbHVlS2V5IHRoYXQgZGVzY3JpYmVzIHRoYXQgdGhpcyBW
YWx1ZSByZXR1cm5zIHdoZW4gaXQgZXhlY3V0ZXMuIFJldHVybnMgYW4KKyAgICAvLyBlbXB0eSBW
YWx1ZUtleSBpZiB0aGlzIFZhbHVlIGlzIGltcHVyZS4gTm90ZSB0aGF0IGFuIG9wZXJhdGlvbiB0
aGF0IHJldHVybnMgVm9pZCBjb3VsZCBzdGlsbAorICAgIC8vIGhhdmUgYSBub24tZW1wdHkgVmFs
dWVLZXkuIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSB3aXRoIENoZWNrIG9wZXJhdGlvbnMuCisg
ICAgVmFsdWVLZXkga2V5KCkgY29uc3Q7CisKICAgICAvLyBNYWtlcyBzdXJlIHRoYXQgbm9uZSBv
ZiB0aGUgY2hpbGRyZW4gYXJlIElkZW50aXR5J3MuIElmIGEgY2hpbGQgcG9pbnRzIHRvIElkZW50
aXR5LCB0aGlzIHdpbGwKICAgICAvLyByZXBvaW50IGl0IGF0IHRoZSBJZGVudGl0eSdzIGNoaWxk
LiBGb3Igc2ltcGxpY2l0eSwgdGhpcyB3aWxsIGZvbGxvdyBhcmJpdHJhcmlseSBsb25nIGNoYWlu
cwogICAgIC8vIG9mIElkZW50aXR5J3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVLZXkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlS2V5Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAi
LCBtX29wY29kZSwgIigiLCB1LmluZGljZXNbMF0sICIsICIsIHUuaW5kaWNlc1sxXSwgIikiKTsK
K30KKworVmFsdWUqIFZhbHVlS2V5OjptYXRlcmlhbGl6ZShQcm9jZWR1cmUmIHByb2MsIE9yaWdp
biBvcmlnaW4pIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcGNvZGUoKSkgeworICAgIGNhc2UgRnJh
bWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KG9wY29kZSgpLCB0eXBl
KCksIG9yaWdpbik7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNh
c2UgU0V4dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgIGNhc2Ug
VHJ1bmM6CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgRFRvSTMy
OgorICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxWYWx1ZT4ob3Bjb2Rl
KCksIHR5cGUoKSwgb3JpZ2luLCBjaGlsZChwcm9jLCAwKSk7CisgICAgY2FzZSBBZGQ6CisgICAg
Y2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1v
ZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgor
ICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBF
cXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBB
Ym92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICBjYXNlIERpdjoKKyAgICAgICAg
cmV0dXJuIHByb2MuYWRkPFZhbHVlPihvcGNvZGUoKSwgdHlwZSgpLCBvcmlnaW4sIGNoaWxkKHBy
b2MsIDApLCBjaGlsZChwcm9jLCAxKSk7CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKCkpKTsKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbiwgdmFsdWUoKSk7CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbiwgZG91YmxlVmFsdWUo
KSk7CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPEFyZ3Vt
ZW50UmVnVmFsdWU+KG9yaWdpbiwgUmVnOjpmcm9tSW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhbHVlKCkpKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlS2V5X2gKKyNkZWZpbmUgQjNWYWx1ZUtleV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKKyNpbmNsdWRl
ICJCM09wY29kZS5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNz
IFZhbHVlOworCisvLyBWYWx1ZUtleXMgYXJlIHVzZWZ1bCBmb3IgQ1NFLiBUaGV5IGFic3RyYWN0
bHkgZGVzY3JpYmUgdGhlIHZhbHVlIHRoYXQgYSBWYWx1ZSByZXR1cm5zIHdoZW4gaXQKKy8vIGV4
ZWN1dGVzLiBBbnkgVmFsdWUgdGhhdCBoYXMgdGhlIHNhbWUgVmFsdWVLZXkgaXMgZ3VhcmFudGVl
ZCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIHByb3ZpZGVkCisvLyB0aGF0IHRoZXkgcmV0dXJu
IGEgbm9uLWVtcHR5IFZhbHVlS2V5LiBPcGVyYXRpb25zIHRoYXQgaGF2ZSBlZmZlY3RzLCBvciB0
aGF0IGNhbiBoYXZlIHRoZWlyCisvLyBiZWhhdmlvciBhZmZlY3RlZCBieSBvdGhlciBvcGVyYXRp
b25zJyBlZmZlY3RzLCB3aWxsIHJldHVybiBhbiBlbXB0eSBWYWx1ZUtleS4gWW91IGhhdmUgdG8g
dXNlCisvLyBvdGhlciBtZWNoYW5pc21zIGZvciBkb2luZyBDU0UgZm9yIGltcHVyZSBvcGVyYXRp
b25zLgorCitjbGFzcyBWYWx1ZUtleSB7CitwdWJsaWM6CisgICAgVmFsdWVLZXkoKQorICAgIHsK
KyAgICB9CisKKyAgICBWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUpCisgICAgICAg
IDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9
CisKKyAgICBWYWx1ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBjaGlsZCk7CisKKyAgICBWYWx1
ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOworCisgICAgVmFs
dWVLZXkoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6
IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgICAg
IHUudmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICwgbV90eXBlKHR5cGUpCisgICAgeworICAgICAgICB1LmRvdWJsZVZhbHVlID0gdmFsdWU7
CisgICAgfQorCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdW5zaWduZWQg
Y2hpbGRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gdS5pbmRpY2VzW2luZGV4
XTsgfQorICAgIFZhbHVlKiBjaGlsZChQcm9jZWR1cmUmLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHUudmFsdWU7IH0KKyAgICBkb3Vi
bGUgZG91YmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiB1LmRvdWJsZVZhbHVlOyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCisgICAgICAgICAgICAmJiBtX3R5
cGUgPT0gb3RoZXIubV90eXBlCisgICAgICAgICAgICAmJiB1ID09IG90aGVyLnU7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wY29kZSArIG1fdHlwZSAr
IFdURjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaCh1LnZhbHVlKTsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gVmFsdWVLZXkoKTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBib29sIGNhbk1h
dGVyaWFsaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQXR0ZW1wdHMgdG8g
bWF0ZXJpYWxpemUgdGhlIFZhbHVlIGZvciB0aGlzIFZhbHVlS2V5LiBNYXkgcmV0dXJuIG51bGxw
dHIgaWYgdGhlIHZhbHVlIGNhbm5vdAorICAgIC8vIGJlIG1hdGVyaWFsaXplZC4gVGhpcyBoYXBw
ZW5zIGZvciBDaGVja0FkZCBhbmQgZnJpZW5kcy4gWW91IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUo
KSB0byBjaGVjaworICAgIC8vIGlmIHlvdXIga2V5IGlzIG1hdGVyaWFsaXphYmxlLgorICAgIFZh
bHVlKiBtYXRlcmlhbGl6ZShQcm9jZWR1cmUmLCBPcmlnaW4pIGNvbnN0OworCisgICAgVmFsdWVL
ZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdHlwZSB7IElu
dDMyIH0KKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVLZXkoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAgICAgCitwcml2YXRlOgorICAgIE9wY29k
ZSBtX29wY29kZSB7IE9vcHMgfTsKKyAgICBUeXBlIG1fdHlwZSB7IFZvaWQgfTsKKyAgICB1bmlv
biBVIHsKKyAgICAgICAgdW5zaWduZWQgaW5kaWNlc1syXTsKKyAgICAgICAgaW50NjRfdCB2YWx1
ZTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworCisgICAgICAgIFUoKQorICAgICAgICB7
CisgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKKyAgICAgICAgfQorICAgIH0gdTsKK307CisKK3N0cnVj
dCBWYWx1ZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZhbHVlS2V5
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBWYWx1ZUtleSYgYSwgY29uc3QgVmFsdWVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SlNDOjpCMzo6VmFsdWVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OlZh
bHVlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlS2V5PiA6
IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6VmFsdWVLZXk+IHsKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
bHVlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZUtleUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUtleUlu
bGluZXNfaAorI2RlZmluZSBCM1ZhbHVlS2V5SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUtleS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
aW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIFZhbHVl
KiBjaGlsZCkKKyAgICA6IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorewor
ICAgIHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRleCgpOworfQorCitpbmxpbmUgVmFsdWVLZXk6
OlZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKKyAgICA6IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworICAg
IHUuaW5kaWNlc1swXSA9IGxlZnQtPmluZGV4KCk7CisgICAgdS5pbmRpY2VzWzFdID0gcmlnaHQt
PmluZGV4KCk7Cit9CisKK2lubGluZSBWYWx1ZSogVmFsdWVLZXk6OmNoaWxkKFByb2NlZHVyZSYg
cHJvYywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2MudmFsdWVzKClb
aW5kZXhdOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlS2V5SW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEw
IEBACiAKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIz
Q29uc3QzMlZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNDb250cm9sVmFsdWUuaCIKLSNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQjNN
ZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNTdGFj
a1Nsb3RWYWx1ZS5oIgpAQCAtNjcsMTYgKzY3LDEzIEBAIG5hbWVzcGFjZSB7CiAKIFZNKiB2bTsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCitz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUp
CiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgZ2VuZXJhdGUocHJvY2VkdXJlLCBq
aXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KCp2bSwgcHJvY2VkdXJlKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotVCBpbnZva2UoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorVCBp
bnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJn
dW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgcmV0dXJu
IGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CkBAIC04NSw3ICs4Miw3IEBAIFQgaW52b2tlKGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY28KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KIFQgY29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvbXBpbGUocHJv
Y2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKKyAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHBy
b2NlZHVyZSksIGFyZ3VtZW50cy4uLik7CiB9CiAKIHZvaWQgdGVzdDQyKCkKQEAgLTE4MzMsOCAr
MTgzMCw4IEBAIHZvaWQgdGVzdEJyYW5jaCgpCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCiAgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAg
Q0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7
CiB9CiAKIHZvaWQgdGVzdEJyYW5jaFB0cigpCkBAIC0xODU4LDggKzE4NTUsOCBAQCB2b2lkIHRl
c3RCcmFuY2hQdHIoKQogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0g
ICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDQyKSkgPT0g
MSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDAp
KSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KDQyKSkgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIHN0YXRpY19jYXN0
PGludHB0cl90PigwKSkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdERpYW1vbmQoKQpAQCAtMTg5MSw4
ICsxODg4LDggQEAgdm9pZCB0ZXN0RGlhbW9uZCgpCiAgICAgZG9uZS0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKIAogICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgNDIpID09IDEpOwot
ICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOworICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09
IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbCgpCkBAIC0xOTIxLDggKzE5MTgsOCBA
QCB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbCgpCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCiAgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7Ci0gICAg
Q0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7
CiB9CiAKIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsQ29tbXV0ZSgpCkBAIC0xOTUxLDggKzE5NDgs
OCBAQCB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbENvbW11dGUoKQogICAgICAgICBlbHNlQ2FzZS0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAogICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgNDIpID09
IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUs
IDApID09IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbE5vdEVxdWFsKCkKQEAgLTE5
ODQsOCArMTk4MSw4IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsTm90RXF1YWwoKQogICAgICAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsK
IAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4o
Y29kZSwgNDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hFcXVhbCgpCkBAIC0y
MDE0LDggKzIwMTEsOCBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbCgpCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCiAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0Mikg
PT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdEJyYW5jaEVxdWFsRXF1YWwoKQpAQCAtMjA0Nyw4
ICsyMDQ0LDggQEAgdm9pZCB0ZXN0QnJhbmNoRXF1YWxFcXVhbCgpCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCiAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCA0Mikg
PT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdEJyYW5jaEVxdWFsQ29tbXV0ZSgpCkBAIC0yMDc3
LDggKzIwNzQsOCBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbENvbW11dGUoKQogICAgICAgICBlbHNl
Q2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKTsKIAogICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwg
NDIpID09IDEpOwotICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOworICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsIDApID09IDApOwogfQogCiB2b2lkIHRlc3RCcmFuY2hFcXVhbEVxdWFsMSgpCkBAIC0y
MTEwLDggKzIxMDcsOCBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbEVxdWFsMSgpCiAgICAgICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCiAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2Rl
LCA0MikgPT0gMSk7Ci0gICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwgMCkgPT0gMCk7CisgICAg
Q0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgMCkgPT0gMCk7CiB9CiAKIHZvaWQgdGVzdEJyYW5jaEZvbGQoaW50IHZhbHVlKQpA
QCAtMjM5NywxMCArMjM5NCwxMCBAQCB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKICAgICAKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAw
KSA9PSAwKTsKLSAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAxKSA9PSA0Mik7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAxKSA9PSA0Mik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0eXBl
bmFtZSBSaWdodEZ1bmN0b3I+CkBAIC0yNjUwLDYgKzI2NDcsMTcgQEAgdm9pZCB0ZXN0Q29tcGFy
ZShCMzo6T3Bjb2RlIG9wY29kZSwgaW50IAogICAgIHZhcmlhbnRzKC1sZWZ0LCAtcmlnaHQpOwog
fQogCit2b2lkIHRlc3RSZXR1cm5Eb3VibGUoZG91YmxlIHZhbHVlKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmln
aW4oKSwgdmFsdWUpKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91
YmxlPihwcm9jKSwgdmFsdWUpKTsKK30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMzExNCw2ICszMTIyLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRl
cikKICAgICBSVU4odGVzdExvYWQ8dWludDE2X3Q+KExvYWQxNlosIDEwMDAwMDAwMDApKTsKICAg
ICBSVU4odGVzdExvYWQ8dWludDE2X3Q+KExvYWQxNlosIC0xMDAwMDAwMDAwKSk7CiAKKyAgICBS
VU4odGVzdFJldHVybkRvdWJsZSgwLjApKTsKKyAgICBSVU4odGVzdFJldHVybkRvdWJsZSgtMC4w
KSk7CisgICAgUlVOKHRlc3RSZXR1cm5Eb3VibGUoNDIuNSkpOworCiAgICAgaWYgKHRhc2tzLmlz
RW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotQ29k
ZTo6Q29kZSgpCi0gICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQorQ29kZTo6Q29kZShQ
cm9jZWR1cmUmIHByb2MpCisgICAgOiBtX3Byb2MocHJvYykKKyAgICAsIG1fbGFzdFBoYXNlTmFt
ZSgiaW5pdGlhbCIpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5oCShyZXZpc2lvbiAxOTIxMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsMTEgQEAgY2xhc3MgQ29kZSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgQ29kZSgpOworICAgIENvZGUoUHJvY2VkdXJlJik7CiAgICAg
fkNvZGUoKTsKIAorICAgIFByb2NlZHVyZSYgcHJvYygpIHsgcmV0dXJuIG1fcHJvYzsgfQorCiAg
ICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwogCiAgICAg
U3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQs
IFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOwpAQCAtMjkzLDYgKzI5NSw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhh
c2VOYW1lOyB9CiAKIHByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2M7IC8vIFNvbWUgbWV0
YS1kYXRhLCBsaWtlIGJ5cHJvZHVjdHMsIGlzIHN0b3JlZCBpbiB0aGUgUHJvY2VkdXJlLgogICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjEzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtp
bmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOSBAQCBNb3ZlRG91YmxlIFU6RiwgRDpGCiAgICAgVG1w
LCBBZGRyIGFzIHN0b3JlRG91YmxlCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZURvdWJsZQogCitN
b3ZlWmVyb1RvRG91YmxlIEQ6RgorICAgIFRtcAorCiBNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6Rgog
ICAgIFRtcCwgVG1wCiAK
</data>
<flag name="review"
          id="290124"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>