<?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>46177</bug_id>
          
          <creation_ts>2010-09-21 04:50:54 -0700</creation_ts>
          <short_desc>Make FilterEffects independent of SVG</short_desc>
          <delta_ts>2014-05-12 05:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>68469</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>282215</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 04:50:54 -0700</bug_when>
    <thetext>Make FilterEffects independent of SVG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282217</commentid>
    <comment_count>1</comment_count>
      <attachid>68220</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 04:58:25 -0700</bug_when>
    <thetext>Created attachment 68220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282218</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 04:59:08 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=68220) [details]
&gt; Patch

Just Mac is missing, since I can&apos;t update Xcode from here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282222</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-21 05:13:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=68220) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Just Mac is missing, since I can&apos;t update Xcode from here.

Isn&apos;t it possible to manually move them, by just editing the file?;
The UUID stays the same, you should just have to reorder them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282223</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-21 05:15:54 -0700</bug_when>
    <thetext>Attachment 68220 did not build on qt:
Build output: http://queues.webkit.org/results/3999077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282226</commentid>
    <comment_count>5</comment_count>
      <attachid>68222</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 05:22:59 -0700</bug_when>
    <thetext>Created attachment 68222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282229</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-21 05:32:47 -0700</bug_when>
    <thetext>Attachment 68220 did not build on mac:
Build output: http://queues.webkit.org/results/4049096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282235</commentid>
    <comment_count>7</comment_count>
      <attachid>68224</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 05:42:12 -0700</bug_when>
    <thetext>Created attachment 68224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282236</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 05:42:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; Created an attachment (id=68220) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Just Mac is missing, since I can&apos;t update Xcode from here.
&gt; 
&gt; Isn&apos;t it possible to manually move them, by just editing the file?;
&gt; The UUID stays the same, you should just have to reorder them.

Tried it with the last patch. Let&apos;s see if I got it to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282237</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-21 05:43:19 -0700</bug_when>
    <thetext>Attachment 68222 did not build on mac:
Build output: http://queues.webkit.org/results/4026090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282244</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-21 05:57:38 -0700</bug_when>
    <thetext>Attachment 68224 did not build on mac:
Build output: http://queues.webkit.org/results/4098015</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282301</commentid>
    <comment_count>11</comment_count>
      <attachid>68239</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 07:33:03 -0700</bug_when>
    <thetext>Created attachment 68239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282306</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 07:38:59 -0700</bug_when>
    <thetext>Modified the project file with Xcode this time. Hopefully it builds now. Didn&apos;t test it on my local machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282768</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 22:20:49 -0700</bug_when>
    <thetext>Not sure why the ews bot for win has problems. I updated to trunk and had no problems applying this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282787</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 23:46:16 -0700</bug_when>
    <thetext>Uploading the same patch again to restart Win EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282788</commentid>
    <comment_count>15</comment_count>
      <attachid>68341</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 23:47:20 -0700</bug_when>
    <thetext>Created attachment 68341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282795</commentid>
    <comment_count>16</comment_count>
      <attachid>68341</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-22 00:12:52 -0700</bug_when>
    <thetext>Comment on attachment 68341
Patch

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

&gt; WebCore/ChangeLog:16
&gt; +        * WebCore.vcproj/WebCore.vcproj:

WebCore.xcodeproj not listed here.

Even if we don&apos;t know if win builds, EWS is taking just too long. Just try landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282816</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-22 00:42:37 -0700</bug_when>
    <thetext>Committed r68022: &lt;http://trac.webkit.org/changeset/68022&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288833</commentid>
    <comment_count>18</comment_count>
      <attachid>68341</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-04 01:35:59 -0700</bug_when>
    <thetext>Comment on attachment 68341
Patch

Already committed. Clearing r-flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68220</attachid>
            <date>2010-09-21 04:58:25 -0700</date>
            <delta_ts>2010-09-21 05:22:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46177-20100921135822.patch</filename>
            <type>text/plain</type>
            <size>308443</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMTAtMDktMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IEZpbHRlckVmZmVjdHMgaW5kZXBlbmRlbnQgb2YgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE3NworCisgICAgICAgIE1vdmluZyBhbGwgRmls
dGVyRWZmZWN0cyBmcm9tIHN2Zy9ncmFwaGljcy9maWx0ZXJzIHRvIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMsIG5vdyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIFNWRy4g
UmVtb3ZlZCB0aGUgU1ZHIHByZWZpeCBvZiB0aGUgZmlsZXMgYW5kIHVwZGF0ZWQgdGhlIGhlYWRl
cnMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRM
aWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlzcGxhY2VtZW50TWFwLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDogQ29waWVkIGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9s
dmVNYXRyaXguY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFQ29udm9sdmVNYXRyaXguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmg6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5o
OiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3ku
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhv
bG9neS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zm
c2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9m
ZnNldC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVRpbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaDogUmVtb3Zl
ZC4KKwogMjAxMC0wOS0yMSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL0FuZHJv
aWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2NzkzNSkK
KysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMywxOCBA
QCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwIFwKLQlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIFwKKwlwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKKwlwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAg
XAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBcCisJcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCiBlbmRpZgog
CiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKQEAgLTk1NiwyMCArOTY3
LDkgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCXN2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAgXAogCVwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNv
bnZvbHZlTWF0cml4LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGln
aHRpbmcuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5j
cHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwIFwKIAlzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVN
ZXJnZS5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAgXAot
CXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVUaWxlLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNw
cCBcCiAJc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCi0Jc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0xpZ2h0U291cmNlLmNwcAorCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwCiBlbmRpZgogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKSW5k
ZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjU3LDkgKzEyNTcsMjEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiAK
QEAgLTE4MTIsMjEgKzE4MjQsOSBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAKICAgICAgICAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAotICAgICAgICBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAotICAgICAgICBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAKLSAgICAgICAgc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCi0gICAgICAgIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRp
bmcuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCi0gICAg
ICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAKLSAgICAgICAgc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVUaWxlLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1
cmJ1bGVuY2UuY3BwCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
ICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKLSAgICAg
ICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwCiAgICAgKQogRU5ESUYo
KQogCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSw2ICsyMDg1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rh
c2hBcnJheS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKQEAg
LTIwOTMsMTcgKzIwOTQsNDMgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgXAorCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJG
aWx0ZXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwIFwKQEAgLTI4NTYsMzkgKzI4ODMsMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3N2Zy9Db2xvckRpc3RhbmNlLmggXAogCVdlYkNvcmUvc3ZnL0VsZW1lbnRUaW1l
Q29udHJvbC5oIFwKIAlXZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaCBcCi0JV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50TGlnaHRTb3VyY2UuaCBcCi0JV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBcCi0JV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmggXAotCVdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKLQlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAotCVdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwIFwKLQlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmggXAotCVdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBc
Ci0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmggXAotCVdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVNb3JwaG9sb2d5LmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVP
ZmZzZXQuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmgg
XAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcu
aCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwKLQlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmggXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAot
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwIFwKLQlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmggXAotCVdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oIFwKLQlXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmggXAog
CVdlYkNvcmUvc3ZnL0xpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA2NzkzNSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUz
LDYgKzIzNTMsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAnLApAQCAtMjM2MSw4ICsyMzYyLDM0IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgnLApAQCAtMzc3MiwzOSArMzc5OSwxMiBAQAog
ICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCcsCiAgICAgICAg
ICAgICAnc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwJywKLSAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgnLAotICAgICAgICAgICAgJ3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCcsCi0gICAgICAgICAg
ICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCcsCi0gICAgICAg
ICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwJywKLSAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oJywK
LSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcCcsCi0gICAg
ICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oJywKICAgICAgICAgICAg
ICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCcsCiAgICAgICAgICAgICAnc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU1lcmdlLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVNZXJnZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1v
cnBob2xvZ3kuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1v
cnBob2xvZ3kuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZz
ZXQuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5o
JywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmcuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxl
LmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgnLAot
ICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAnLAot
ICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oJywKICAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwJywKICAgICAgICAg
ICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCcsCiAgICAgICAgICAgICAnc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAnLAogICAgICAgICAgICAgJ3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCcsCi0gICAgICAgICAgICAnc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwJywKLSAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oJywKICAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuaCcsCiAgICAgICAgICAgICAnc3ZnL0NvbG9yRGlzdGFuY2UuY3BwJywKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gNjc5MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgx
LDggKzE5ODEsMjAgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludDNELmggXApAQCAtMjI3NCwyMSArMjI4Niw5IEBAIEhFQURFUlMgKz0gXAogICAg
IHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oIFwKICAgICBzdmcvQ29sb3JEaXN0YW5jZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlz
cGxhY2VtZW50TWFwLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaCBc
CiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIFwKLSAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTWVyZ2UuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmgg
XAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmggXAotICAgIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oIFwKLSAgICBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVRpbGUuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJi
dWxlbmNlLmggXAogICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBc
CiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAotICAgIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmggXAogICAgIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5o
IFwKICAgICBzdmcvU1ZHQUVsZW1lbnQuaCBcCiAgICAgc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5o
IFwKQEAgLTMxMDYsOCArMzEwNiwyMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMVEVS
Uz0xKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5j
cHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAogfQpAQCAtMzM3NiwyMSArMzM4OCw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9TVkc9MSkgewogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAg
ICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRmxvb2QuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBc
Ci0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwIFwKLSAgICAgICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcCBcCiAg
ICAgICAgIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVu
ZGVyRm9yZWlnbk9iamVjdC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2Nzkz
NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OTA3LDYgKzI2OTA3LDEwIEBACiAJCQkJCU5hbWU9ImZpbHRlcnMiDQogCQkJCQk+
DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
ZmlsdGVyc1xEaXN0YW50TGlnaHRTb3VyY2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQor
CQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmls
dGVyc1xGRUJsZW5kLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtMjY5MzksNiAr
MjY5NDMsMzggQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFQ29udm9sdmVNYXRy
aXguY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFQ29udm9sdmVNYXRyaXgu
aCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRURpZmZ1c2VMaWdodGluZy5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVEaWZmdXNlTGlnaHRpbmcuaCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRURpc3BsYWNlbWVudE1hcC5jcHAiDQorCQkJ
CQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVEaXNwbGFjZW1lbnRNYXAuaCINCisJCQkJCQk+
DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUZsb29kLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0Zp
bGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZmlsdGVyc1xGRUZsb29kLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZp
bGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVH
YXVzc2lhbkJsdXIuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0yNjk0Nyw2ICsy
Njk4Myw2MiBAQAogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVMaWdodGluZy5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVMaWdodGluZy5oIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTWVyZ2UuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmls
ZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xmaWx0ZXJzXEZFTWVyZ2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8Rmls
ZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU1v
cnBob2xvZ3kuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTW9ycGhvbG9n
eS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFT2Zmc2V0LmNwcCINCisJCQkJ
CQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU9mZnNldC5oIg0KKwkJCQkJCT4NCisJCQkJCTwv
RmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xmaWx0ZXJzXEZFU3BlY3VsYXJMaWdodGluZy5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9G
aWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGZpbHRlcnNcRkVTcGVjdWxhckxpZ2h0aW5nLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGZpbHRlcnNcRkVUaWxlLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8Rmls
ZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVRp
bGUuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVR1cmJ1bGVuY2UuY3BwIg0K
KwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFVHVyYnVsZW5jZS5oIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZpbHRlci5oIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4N
CkBAIC0yNjk2Nyw2ICsyNzA1OSwxOCBAQAogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJ
PEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNc
TGlnaHRTb3VyY2UuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQor
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXExpZ2h0U291
cmNlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcUG9pbnRMaWdodFNvdXJjZS5o
Ig0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFNvdXJjZUFscGhhLmNwcCINCiAJCQkJ
CQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtMjY5ODIsNiArMjcwODYsMTAgQEAKIAkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xTb3VyY2VHcmFwaGljLmgiDQog
CQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcU3BvdExpZ2h0U291cmNlLmgiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KIAkJCQk8L0ZpbHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8Rmls
dGVyDQpAQCAtMjc0NDksNiArMjc1NTcsNyBAQAogCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxk
VG9vbCINCiAJCQkJCQkJLz4NCiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKw0KIAkJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0K
IAkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCkBAIC00MzMxNCw2ICs0MzQyMyw3IEBA
CiAJCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCiAJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSINCiAJCQkJCQk+DQorDQogCQkJCQkJPFRvb2wNCiAJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCINCiAJCQkJCQkvPg0KQEAgLTUxMTQzLDQyICs1MTI1Myw2IEBACiAJCQkJ
CU5hbWU9ImZpbHRlcnMiDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiDQotCQkJ
CQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFQ29udm9sdmVNYXRyaXguY3BwIg0KLQkJCQkJCT4N
Ci0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdc
Z3JhcGhpY3NcZmlsdGVyc1xTVkdGRUNvbnZvbHZlTWF0cml4LmgiDQotCQkJCQkJPg0KLQkJCQkJ
PC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGlj
c1xmaWx0ZXJzXFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0Zp
bGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZp
bHRlcnNcU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJ
CTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdG
RURpc3BsYWNlbWVudE1hcC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUZsb29k
LmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVGbG9vZC5oIg0KLQkJCQkJCT4N
Ci0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdc
Z3JhcGhpY3NcZmlsdGVyc1xTVkdGRUltYWdlLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+
DQpAQCAtNTExODcsNjIgKzUxMjYxLDYgQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJ
CTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdG
RUxpZ2h0aW5nLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVMaWdodGluZy5o
Ig0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1lcmdlLmNwcCINCi0JCQkJCQk+DQot
CQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdy
YXBoaWNzXGZpbHRlcnNcU1ZHRkVNZXJnZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0J
CQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xT
VkdGRU1vcnBob2xvZ3kuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1vcnBo
b2xvZ3kuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVPZmZzZXQuY3BwIg0KLQkJ
CQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU9mZnNldC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwv
RmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3Nc
ZmlsdGVyc1xTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmls
ZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmls
dGVyc1xTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHRkVUaWxlLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVUaWxlLmgiDQot
CQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFVHVyYnVsZW5jZS5jcHAiDQotCQkJCQkJPg0K
LQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xn
cmFwaGljc1xmaWx0ZXJzXFNWR0ZFVHVyYnVsZW5jZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmls
ZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmls
dGVyc1xTVkdGaWx0ZXIuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC01MTI1OCwy
MiArNTEyNzYsNiBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVy
c1xTVkdGaWx0ZXJCdWlsZGVyLmgiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KLQkJCQkJPEZp
bGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0xpZ2h0
U291cmNlLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHTGlnaHRTb3VyY2UuaCIN
Ci0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHUG9pbnRMaWdodFNvdXJjZS5oIg0KLQkJCQkJ
CT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdTcG90TGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJ
CQk8L0ZpbGU+DQogCQkJCTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0
YW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmg6Njc5MzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaAorI2RlZmluZSBTVkdEaXN0YW50TGlnaHRTb3VyY2Vf
aAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHTGln
aHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXN0YW50TGlnaHRT
b3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERpc3RhbnRMaWdodFNvdXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZh
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlzdGFudExpZ2h0U291
cmNlKGF6aW11dGgsIGVsZXZhdGlvbikpOworICAgIH0KKworICAgIGZsb2F0IGF6aW11dGgoKSBj
b25zdCB7IHJldHVybiBtX2F6aW11dGg7IH0KKyAgICBmbG9hdCBlbGV2YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2VsZXZhdGlvbjsgfQorCisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0Rh
dGEoUGFpbnRpbmdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQ
YWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOworCisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBEaXN0YW50TGlnaHRTb3VyY2UoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0
aW9uKQorICAgICAgICA6IExpZ2h0U291cmNlKExTX0RJU1RBTlQpCisgICAgICAgICwgbV9hemlt
dXRoKGF6aW11dGgpCisgICAgICAgICwgbV9lbGV2YXRpb24oZWxldmF0aW9uKQorICAgIHsKKyAg
ICB9CisKKyAgICBmbG9hdCBtX2F6aW11dGg7CisgICAgZmxvYXQgbV9lbGV2YXRpb247Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdo
dFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIw
LDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNW
R0Rpc3RhbnRMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCisj
aWZuZGVmIERpc3RhbnRMaWdodFNvdXJjZV9oCisjZGVmaW5lIERpc3RhbnRMaWdodFNvdXJjZV9o
CiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdo
dFNvdXJjZS5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNiArNTcsNiBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0Rpc3Rh
bnRMaWdodFNvdXJjZV9oCisjZW5kaWYgLy8gRGlzdGFudExpZ2h0U291cmNlX2gKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0
YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVDb252b2x2
ZU1hdHJpeC5oIgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVs
U2l6ZSwKKyAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFy
Z2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCisgICAgY29uc3QgRmxvYXRQb2ludCYg
a2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBrZXJuZWxNYXRyaXgpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV9rZXJuZWxTaXpl
KGtlcm5lbFNpemUpCisgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKKyAgICAsIG1fYmlhcyhiaWFz
KQorICAgICwgbV90YXJnZXRPZmZzZXQodGFyZ2V0T2Zmc2V0KQorICAgICwgbV9lZGdlTW9kZShl
ZGdlTW9kZSkKKyAgICAsIG1fa2VybmVsVW5pdExlbmd0aChrZXJuZWxVbml0TGVuZ3RoKQorICAg
ICwgbV9wcmVzZXJ2ZUFscGhhKHByZXNlcnZlQWxwaGEpCisgICAgLCBtX2tlcm5lbE1hdHJpeChr
ZXJuZWxNYXRyaXgpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252
b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCisgICAgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlLAorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAor
ICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKK30KKworCitJbnRTaXplIEZF
Q29udm9sdmVNYXRyaXg6Omtlcm5lbFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5l
bFNpemU7Cit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsU2l6ZShJbnRTaXpl
IGtlcm5lbFNpemUpCit7CisgICAgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgCit9CisKK2Nv
bnN0IFZlY3RvcjxmbG9hdD4mIEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fa2VybmVsTWF0cml4OyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKQoreworICAgIG1fa2VybmVsTWF0
cml4ID0ga2VybmVsOyAKK30KKworZmxvYXQgRkVDb252b2x2ZU1hdHJpeDo6ZGl2aXNvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGl2aXNvcjsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6c2V0RGl2aXNvcihmbG9hdCBkaXZpc29yKQoreworICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7
IAorfQorCitmbG9hdCBGRUNvbnZvbHZlTWF0cml4OjpiaWFzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9iaWFzOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKGZsb2F0IGJp
YXMpCit7CisgICAgbV9iaWFzID0gYmlhczsgCit9CisKK0ludFBvaW50IEZFQ29udm9sdmVNYXRy
aXg6OnRhcmdldE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyAK
K30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQgdGFy
Z2V0T2Zmc2V0KQoreworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OyAKK30KKwor
RWRnZU1vZGVUeXBlIEZFQ29udm9sdmVNYXRyaXg6OmVkZ2VNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9lZGdlTW9kZTsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1v
ZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsg
Cit9CisKK0Zsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgCit9CisKK3ZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5n
dGgpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsgCit9CisK
K2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6cHJlc2VydmVBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJlc2VydmVBbHBoYTsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCit7CisgICAgbV9wcmVzZXJ2ZUFscGhhID0g
cHJlc2VydmVBbHBoYTsgCit9CisKKy8qCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KKyAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMg
c3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8CisgICAgICB8IEIgfCAgICAg
IEMgICAgICB8IEQgfAorICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKKyAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAorICAgICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhv
c2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKKyAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jv
c3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KKworICAgRXhhbXBsZToKKyAgICAgIElt
YWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAorCisgICAgICBPcmRlciAoa2VybmVsIG1h
dHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0CisgICAgICBUYXJnZXQ6IHg6MSwgeTozCisK
KyAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBr
ZXJuZWwgbWF0cml4OgorCisgICAgICAgIC4uLgorICAgICAgICAuLi4KKyAgICAgICAgLi4uCisg
ICAgICAgIC5YLgorCisgICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dp
bmc6CisgICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJv
dHRvbS1yaWdodCBjb3JuZXIKKyAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5v
dCBwYXJ0IG9mIHRoZSByZWdpb24KKyAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVs
cywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKKworICAgICAgUmVnaW9uIEE6
IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMworICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTog
MywgeDI6IDEsIHkyOiAxMAorICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHky
OiAxMAorICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKKyAgICAg
IFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQor
CisgICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywg
d2UgaW1wbGVtZW50ZWQKKyAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFs
dWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgorICAgRm9yIG90aGVyIHJlZ2lvbnMs
IGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAor
ICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVh
dGlvbnMsIHdoZW4KKyAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBh
bGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKKyAgIGZ1bmN0aW9uLgorCisgICBBbHRo
b3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5v
dCB0byBtYWtlCisgICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJl
IGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAorICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhh
cmQgdG8gdW5kZXJzdGFuZC4KKyovCisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNo
YXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUp
Cit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNo
YW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4OworICAgIHJldHVybiBjaGFubmVsOwor
fQorCit0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CitBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0RGVzdGluYXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4
ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVs
QXJyYXkqIHNyYykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBo
YVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFz
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaW1hZ2UtPnNldChw
aXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxw
aGEpKTsKKworICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7CisgICAgICAgIGltYWdlLT5z
ZXQocGl4ZWwsIHNyYy0+Z2V0KHBpeGVsKSk7CisgICAgICAgICsrcGl4ZWw7CisgICAgfSBlbHNl
CisgICAgICAgIGltYWdlLT5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCisvLyBPbmx5IGZv
ciByZWdpb24gQwordGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgorQUxXQVlTX0lO
TElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pCit7Cisg
ICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKKyAgICBpbnQgcGl4
ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRP
ZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWwgPSAwOworICAgIGludCBr
ZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChtX2tl
cm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVl
cyA/IDAgOiAxKV07CisKKyAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChtX2Rpdmlzb3IpOworCisg
ICAgZm9yIChpbnQgeSA9IGNsaXBCb3R0b20gKyAxOyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZv
ciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQg
a2VybmVsVmFsdWUgPSBtX2tlcm5lbE1hdHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAgaW50
IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsKKyAgICAgICAgICAgIGludCB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOworICAg
ICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7CisgICAg
ICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgdG90YWxz
WzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAgICAg
ICAgICAgICAgICB0b3RhbHNbMF0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4
ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkt
PmdldChrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IG1fa2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBt
X2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsr
a2VybmVsUGl4ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0g
a2VybmVsSW5jcmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXpl
LndpZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlh
cywgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkpOworICAgICAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbCArPSA0OworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKKyAgICAg
ICAgc3RhcnRLZXJuZWxQaXhlbCArPSB4SW5jcmVhc2U7CisgICAgfQorfQorCitBTFdBWVNfSU5M
SU5FIGludCBGRUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRp
bmdEYXRhLndpZHRoICYmIHggPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAg
ICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRj
aCAobV9lZGdlTW9kZSkgeworICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgorICAgICAgICBpZiAoeCA8
IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0Rh
dGEud2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKKyAgICAg
ICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIGVsc2UgaWYgKHkgPj0g
cGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0
IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsK
KyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAgIHdoaWxlICh4IDwgMCkKKyAgICAgICAg
ICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53
aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAgICAgICAgICAgeSArPSBwYWludGluZ0Rh
dGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisgICAgfQorfQorCisvLyBG
b3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKK3RlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisgICAg
aW50IHBpeGVsID0gKHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKKyAgICBpbnQg
aGVpZ2h0ID0geTIgLSB5MTsKKyAgICBpbnQgd2lkdGggPSB4MiAtIHgxOworICAgIGludCBiZWdp
bktlcm5lbFBpeGVsWCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOworICAgIGludCBzdGFydEtl
cm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOworICAgIGludCBzdGFydEtlcm5lbFBpeGVs
WSA9IHkxIC0gbV90YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRp
bmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVl
cyA/IDAgOiAxKV07CisKKyAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChtX2Rpdmlzb3IpOworCisg
ICAgZm9yIChpbnQgeSA9IGhlaWdodDsgeSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4
ID0gd2lkdGg7IHggPiAwOyAtLXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1f
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0g
c3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRL
ZXJuZWxQaXhlbFk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sxXSA9
IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAgICAgaWYgKCFwcmVzZXJ2
ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisKKyAgICAgICAg
ICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IHBpeGVs
SW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQ
aXhlbFkpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdG90YWxzWzBdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IG1fa2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS0+Z2V0KHBpeGVsSW5kZXggKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSAr
PSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gbV9rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LT5nZXQocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAgICArK2tlcm5lbFBp
eGVsWDsKKyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlm
ICghLS13aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7CisgICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxw
cmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkpOworICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgfQorICAg
ICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVn
aW5LZXJuZWxQaXhlbFg7CisgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgfQorfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9t
KQoreworICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFu
b3RoZXIgQUxXQVlTX0lOTElORQorICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRo
aXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAg
ICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQs
IGNsaXBCb3R0b20pOworICAgIGVsc2UKKyAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPGZh
bHNlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQoreworICAgIC8v
IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlz
IGltcGxlbWVudGVkIGhlcmUKKyAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFs
c28gaW1wbGVtZW50ZWQgaGVyZQorICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIGZh
c3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKKyAg
ICBlbHNlCisgICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Cit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVy
KiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkp
OworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisKKyAgICBSZWZQdHI8
Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhh
KQorICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKyAgICBlbHNlCisgICAg
ICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKworICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFn
ZVJlY3QuaGVpZ2h0KCkpOworCisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFp
bnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBwYWludGlu
Z0RhdGEud2lkdGggPSBpbWFnZVJlY3Qud2lkdGgoKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0
ID0gaW1hZ2VSZWN0LmhlaWdodCgpOworICAgIHBhaW50aW5nRGF0YS5iaWFzID0gbV9iaWFzICog
MjU1OworCisgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlw
UmlnaHQgPSBpbWFnZVJlY3Qud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGlu
dCBjbGlwQm90dG9tID0gaW1hZ2VSZWN0LmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgp
OworCisgICAgaWYgKGNsaXBSaWdodCA+PSAwICYmIGNsaXBCb3R0b20gPj0gMCkgeworICAgICAg
ICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7
CisKKyAgICAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgICAg
IGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKKyAgICAgICAgaWYgKG1fdGFy
Z2V0T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOworICAgICAg
ICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgaW1hZ2VSZWN0LndpZHRoKCks
IGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAw
KQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9m
ZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAgICAgIGlmIChj
bGlwUmlnaHQgPCBpbWFnZVJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlUmVjdC53
aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSYXJlIHNpdHVh
dGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
CisgICAgfQorCisgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKKyAgICAgICAgcmVzdWx0SW1hZ2Uo
KS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRp
cGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwor
fQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmR1bXAoKQoreworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRURHRU1PREVfVU5LTk9XTjoKKyAg
ICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVER0VNT0RF
X0RVUExJQ0FURToKKyAgICAgICAgdHMgPDwgIkRVUExJQ0FURSI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICAgICAgdHMgPDwgIldSQVAiOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVER0VNT0RFX05PTkU6CisgICAgICAgIHRzIDw8ICJOT05FIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgRkVD
b252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8
PCAiW2ZlQ29udm9sdmVNYXRyaXgiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJc
IiAiCisgICAgICAgPDwgImtlcm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJc
IiAiCisgICAgICAgPDwgImRpdmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgorICAgICAg
IDw8ICJiaWFzPVwiIiA8PCBtX2JpYXMgPDwgIlwiICIKKyAgICAgICA8PCAidGFyZ2V0PVwiIiA8
PCBtX3RhcmdldE9mZnNldCA8PCAiXCIgIgorICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9l
ZGdlTW9kZSA8PCAiXCIgIgorICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tl
cm5lbFVuaXRMZW5ndGggPDwgIlwiICIKKyAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwg
bV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfTsg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVDb252b2x2ZU1hdHJpeC5o
IgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAog
I2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTQ2
OCw0ICs0NjgsNCBAQCBUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlCiAK
IH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2
aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252
b2x2ZU1hdHJpeC5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpo
ZXJjemVnQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVDb252b2x2ZU1hdHJpeF9oCisjZGVmaW5l
IFNWR0ZFQ29udm9sdmVNYXRyaXhfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgPHd0
Zi9BbHdheXNJbmxpbmUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZW51bSBFZGdlTW9kZVR5cGUgeworICAgIEVER0VNT0RFX1VOS05PV04gICA9
IDAsCisgICAgRURHRU1PREVfRFVQTElDQVRFID0gMSwKKyAgICBFREdFTU9ERV9XUkFQICAgICAg
PSAyLAorICAgIEVER0VNT0RFX05PTkUgICAgICA9IDMKK307CisKK2NsYXNzIENhbnZhc1BpeGVs
QXJyYXk7CisKK2NsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYsCisgICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50
JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKKyAgICAgICAgICAgIGJvb2wsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mKTsKKworICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0S2VybmVsU2l6ZShJbnRTaXplKTsKKworICAgIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIGtlcm5lbCgpIGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKKworICAgIGZsb2F0IGRpdmlzb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldERpdmlzb3Io
ZmxvYXQpOworCisgICAgZmxvYXQgYmlhcygpIGNvbnN0OworICAgIHZvaWQgc2V0QmlhcyhmbG9h
dCk7CisKKyAgICBJbnRQb2ludCB0YXJnZXRPZmZzZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldFRh
cmdldE9mZnNldChJbnRQb2ludCk7CisKKyAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25z
dDsKKyAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7CisKKyAgICBGbG9hdFBvaW50
IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgo
RmxvYXRQb2ludCk7CisKKyAgICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdDsKKyAgICB2b2lk
IHNldFByZXNlcnZlQWxwaGEoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVy
Kik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiwgZmxvYXQs
IGZsb2F0LAorICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisKKyAgICBzdHJ1Y3Qg
UGFpbnRpbmdEYXRhIHsKKyAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsK
KyAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgaW50IHdp
ZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICBmbG9hdCBiaWFzOworICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0
LCBpbnQgY2xpcEJvdHRvbSk7CisKKyAgICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVl
KFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSk7CisKKyAgICB0ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+CisgICAgdm9pZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRh
JiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKKworICAgIC8vIFdyYXBwZXIgZnVu
Y3Rpb25zCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgSW50U2l6ZSBtX2tl
cm5lbFNpemU7CisgICAgZmxvYXQgbV9kaXZpc29yOworICAgIGZsb2F0IG1fYmlhczsKKyAgICBJ
bnRQb2ludCBtX3RhcmdldE9mZnNldDsKKyAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKKyAg
ICBGbG9hdFBvaW50IG1fa2VybmVsVW5pdExlbmd0aDsKKyAgICBib29sIG1fcHJlc2VydmVBbHBo
YTsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fa2VybmVsTWF0cml4OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisK
KyNlbmRpZiAvLyBTVkdGRUNvbnZvbHZlTWF0cml4X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24g
Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTAgQEAKICAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVDb252b2x2ZU1hdHJpeF9oCi0j
ZGVmaW5lIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAorI2lmbmRlZiBGRUNvbnZvbHZlTWF0cml4X2gK
KyNkZWZpbmUgRkVDb252b2x2ZU1hdHJpeF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCkBAIC0xMTMs
NiArMTEzLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCiAKLSNlbmRpZiAvLyBTVkdGRUNvbnZvbHZlTWF0cml4X2gKKyNlbmRpZiAvLyBGRUNvbnZv
bHZlTWF0cml4X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwOjY3OTM1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJTVkdMaWdo
dFNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpG
RURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLAorICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9y
LCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkKK3sKK30KKworUGFzc1JlZlB0cjxGRURp
ZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwKKyAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGln
aHRTb3VyY2UpKTsKK30KKworRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygp
Cit7Cit9CisKK0NvbG9yIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9saWdodGluZ0NvbG9yOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0
aW5nOjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQoreworICAg
IG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxp
Z2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlU2Nh
bGU7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBz
dXJmYWNlU2NhbGUpCit7CisgICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Cit9CisK
K2Zsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29uc3RhbnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsKK30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6
c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKK3sKKyAgICBtX2RpZmZ1
c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsKK30KKworZmxvYXQgRkVEaWZmdXNlTGlnaHRp
bmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0
TGVuZ3RoWDsKK30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0
aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9
IGtlcm5lbFVuaXRMZW5ndGhYOworfQorCitmbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVs
VW5pdExlbmd0aFkoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOwor
fQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSkKK3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5p
dExlbmd0aFk7Cit9CisKK2NvbnN0IExpZ2h0U291cmNlKiBGRURpZmZ1c2VMaWdodGluZzo6bGln
aHRTb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOworfQor
Cit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0
U291cmNlPiBsaWdodFNvdXJjZSkKK3sgICAgCisgICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291
cmNlOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpkdW1wKCkKK3sKK30KKworVGV4dFN0
cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
CisgICAgdHMgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwg
bV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKKyAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8
PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgorICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3Ro
PVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3Ro
WSA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEw
ICsyMSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgorI2lmIEVO
QUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFRGlmZnVzZUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTIzLDQgKzEyMyw0IEBAIFRleHRTdHJlYW0mIEZFRGlmZnVzZUxp
Z2h0aW5nOjpleHRlcm5hbFIKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nX2gKKyNkZWZpbmUgU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAorCisjaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExpZ2h0U291cmNlOworCitjbGFzcyBGRURpZmZ1
c2VMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LAorICAgICAgICBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKyAg
ICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdodGluZygpOworCisgICAgQ29sb3IgbGlnaHRpbmdDb2xv
cigpIGNvbnN0OworICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworCisg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUo
ZmxvYXQpOworCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgo
KSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKKworICAgIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVu
Z3RoWShmbG9hdCk7CisKKyAgICBjb25zdCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2UoKSBjb25z
dDsKKyAgICB2b2lkIHNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitw
cml2YXRlOgorICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorCisjZW5kaWYgLy8gU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHJl
dmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRURpZmZ1c2VMaWdo
dGluZ19oCi0jZGVmaW5lIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKKyNpZm5kZWYgRkVEaWZmdXNl
TGlnaHRpbmdfaAorI2RlZmluZSBGRURpZmZ1c2VMaWdodGluZ19oCiAKLSNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisjaWYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYzLDYgKzYzLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8g
RU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRURpZmZ1c2VMaWdodGluZ19oCisjZW5k
aWYgLy8gRkVEaWZmdXNlTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2
NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCIKKworI2luY2x1
ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1feENo
YW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9y
KHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3NjYWxlKHNjYWxlKQoreworfQorCitQYXNzUmVm
UHRyPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKKyAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlD
aGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2Nh
bGUpKTsKK30KKworQ2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxTZWxlY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsKK30K
Kwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCit7CisgICAgbV94Q2hhbm5lbFNlbGVj
dG9yID0geENoYW5uZWxTZWxlY3RvcjsKK30KKworQ2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3Bs
YWNlbWVudE1hcDo6eUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1feUNo
YW5uZWxTZWxlY3RvcjsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WUNoYW5uZWxT
ZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IpCit7Cisg
ICAgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsKK30KKworZmxvYXQgRkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2FsZTsKK30K
Kwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAg
bV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBpbi0+YXBwbHkoZmls
dGVyKTsKKyAgICBpbjItPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2Uo
KSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV94
Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFubmVsU2VsZWN0b3Ig
PT0gQ0hBTk5FTF9VTktOT1dOKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWVmZmVjdENv
bnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxB
cnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFy
cmF5QihpbjItPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RC
RHJhd2luZ1JlY3QpLT5kYXRhKCkpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdo
dCgpKTsKKworICAgIEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCkgPT0gc3JjUGl4ZWxB
cnJheUItPmxlbmd0aCgpKTsKKworICAgIGZsb2F0IHNjYWxlWCA9IG1fc2NhbGUgLyAyNTUuZiAq
IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7CisgICAgZmxvYXQgc2NhbGVZID0g
bV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7Cisg
ICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WCA9ICgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpICogZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKKyAgICBmbG9hdCBzY2FsZUFkanVzdG1l
bnRZID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKTsKKyAgICBpbnQgc3RyaWRlID0gaW1hZ2VSZWN0LndpZHRoKCkgKiA0OworICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAg
aW50IGxpbmUgPSB5ICogc3RyaWRlOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdl
UmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBkc3RJbmRleCA9IGxpbmUgKyB4
ICogNDsKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVY
ICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feENoYW5uZWxTZWxlY3RvciAtIDEp
ICsgc2NhbGVBZGp1c3RtZW50WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KHNjYWxlWSAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3lDaGFu
bmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFkpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAg
ICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IGltYWdlUmVjdC53aWR0aCgpIHx8IHNyY1kg
PCAwIHx8IHNyY1kgPj0gaW1hZ2VSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBp
bWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMCkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHNyY1kg
KiBzdHJpZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpbWFn
ZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgcGl4ZWxWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisgICAgcmVz
dWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGlt
YWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmR1bXAo
KQoreworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIENIQU5ORUxfVU5LTk9XTjoKKyAgICAgICAgdHMgPDwgIlVOS05PV04iOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENIQU5ORUxfUjoKKyAgICAgICAgdHMgPDwgIlJFRCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0hBTk5FTF9HOgorICAgICAgICB0cyA8PCAiR1JFRU4i
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENIQU5ORUxfQjoKKyAgICAgICAgdHMgPDwgIkJM
VUUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENIQU5ORUxfQToKKyAgICAgICAgdHMgPDwg
IkFMUEhBIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4
dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CisgICAgdHMgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7CisgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3Nj
YWxlIDw8ICJcIiAiCisgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5u
ZWxTZWxlY3RvciA8PCAiXCIgIgorICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBt
X3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRURpc3BsYWNl
bWVudE1hcC5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50
TWFwLmgiCiAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCkBAIC0xNjgsNCArMTY4LDQgQEAgVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRURpc3BsYWNlbWVudE1hcC5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBf
aAorI2RlZmluZSBTVkdGRURpc3BsYWNlbWVudE1hcF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CisgICAgQ0hBTk5FTF9VTktOT1dOID0gMCwK
KyAgICBDSEFOTkVMX1IgPSAxLAorICAgIENIQU5ORUxfRyA9IDIsCisgICAgQ0hBTk5FTF9CID0g
MywKKyAgICBDSEFOTkVMX0EgPSA0Cit9OworCitjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlz
cGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9y
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKworICAgIENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAgIHZvaWQgc2V0
WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKKworICAgIENoYW5u
ZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OworICAgIHZvaWQgc2V0WUNo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKKworICAgIGZsb2F0IHNj
YWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwg
aW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVEaXNwbGFjZW1lbnRNYXAo
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKworICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV94
Q2hhbm5lbFNlbGVjdG9yOworICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5lbFNlbGVj
dG9yOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNW
R0ZFRGlzcGxhY2VtZW50TWFwX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAotI2RlZmluZSBT
VkdGRURpc3BsYWNlbWVudE1hcF9oCisjaWZuZGVmIEZFRGlzcGxhY2VtZW50TWFwX2gKKyNkZWZp
bmUgRkVEaXNwbGFjZW1lbnRNYXBfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTY1LDYgKzY1
LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAK
LSNlbmRpZiAvLyBTVkdGRURpc3BsYWNlbWVudE1hcF9oCisjZW5kaWYgLy8gRkVEaXNwbGFjZW1l
bnRNYXBfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVGbG9vZC5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkZpbHRlci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3Bh
Y2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xv
cikKKyAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK3sKK30KKworUGFzc1JlZlB0
cjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0
IGZsb29kT3BhY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRmxvb2QoZmxvb2RD
b2xvciwgZmxvb2RPcGFjaXR5KSk7Cit9CisKK0NvbG9yIEZFRmxvb2Q6OmZsb29kQ29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBtX2Zsb29kQ29sb3I7Cit9CisKK3ZvaWQgRkVGbG9vZDo6c2V0
Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9mbG9vZENvbG9yID0gY29s
b3I7Cit9CisKK2Zsb2F0IEZFRmxvb2Q6OmZsb29kT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmxvb2RPcGFjaXR5OworfQorCit2b2lkIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShm
bG9hdCBmbG9vZE9wYWNpdHkpCit7CisgICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7
Cit9CisKK3ZvaWQgRkVGbG9vZDo6YXBwbHkoRmlsdGVyKikKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250
ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJy
aWRlQWxwaGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7CisgICAgZmlsdGVy
Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpLCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7Cit9CisK
K3ZvaWQgRkVGbG9vZDo6ZHVtcCgpCit7Cit9CisKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7Cisg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZUZsb29kIjsKKyAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgZmxv
b2QtY29sb3I9XCIiIDw8IGZsb29kQ29sb3IoKS5uYW1lKCkgPDwgIlwiICIKKyAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICByZXR1
cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVGbG9vZC5oIgorI2lmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtODgsNCArODgsNCBAQCBUZXh0U3RyZWFtJiBGRUZsb29k
OjpleHRlcm5hbFJlcHJlc2VudGF0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5o
CShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFNWR0ZFRmxvb2RfaAorI2RlZmluZSBTVkdGRUZsb29kX2gKKworI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0KTsK
KworICAgIENvbG9yIGZsb29kQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldEZsb29kQ29sb3Io
Y29uc3QgQ29sb3IgJik7CisKKyAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdDsKKyAgICB2
b2lkIHNldEZsb29kT3BhY2l0eShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmls
dGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgRkVGbG9vZChjb25zdCBDb2xvciYsIGZsb2F0KTsKKworICAg
IENvbG9yIG1fZmxvb2RDb2xvcjsKKyAgICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVGbG9vZF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTksMTAgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0j
aWZuZGVmIFNWR0ZFRmxvb2RfaAotI2RlZmluZSBTVkdGRUZsb29kX2gKKyNpZm5kZWYgRkVGbG9v
ZF9oCisjZGVmaW5lIEZFRmxvb2RfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKQEAgLTUzLDYgKzUzLDYgQEAgcHJp
dmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAv
LyBTVkdGRUZsb29kX2gKKyNlbmRpZiAvLyBGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3OTM1
KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwOjY3
OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhl
cmN6ZWcKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZF
UlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorCisjaW5jbHVkZSAi
Q2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlNW
R0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVMaWdodGluZzo6RkVM
aWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwKKyAgICBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGln
aHRTb3VyY2U+IGxpZ2h0U291cmNlKQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fbGln
aHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKKyAgICAsIG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2Up
CisgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKKyAgICAsIG1fc3VyZmFjZVNj
YWxlKHN1cmZhY2VTY2FsZSkKKyAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFu
dCkKKyAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQorICAgICwgbV9z
cGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5n
dGhYKGtlcm5lbFVuaXRMZW5ndGhYKQorICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxV
bml0TGVuZ3RoWSkKK3sKK30KKworY29uc3Qgc3RhdGljIGludCBjUGl4ZWxTaXplID0gNDsKK2Nv
bnN0IHN0YXRpYyBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Citjb25zdCBzdGF0aWMgdW5z
aWduZWQgY2hhciBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGZm
KTsKKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cExlZnRQ
aXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChv
ZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dXBQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OmNlbnRlclBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodFBpeGVsVmFsdWUo
KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93bkxlZnRQaXhlbFZhbHVlKCkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVsVmFs
dWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAr
IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQor
CitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25SaWdodFBp
eGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9m
ZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEZFTGlnaHRpbmc6OnNldFBp
eGVsKExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLAorICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGludCBu
b3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFsWSkKK3sKKyAgICBtX2xpZ2h0U291cmNl
LT51cGRhdGVQYWludGluZ0RhdGEocGFpbnRpbmdEYXRhLCBsaWdodFgsIGxpZ2h0WSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGRhdGEucGl4ZWxzLT5nZXQoZGF0YS5vZmZzZXQgKyAzKSkgKiBkYXRhLnN1
cmZhY2VTY2FsZSk7CisKKyAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0
aWNfY2FzdDxmbG9hdD4obm9ybWFsWCkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisgICAgZGF0YS5u
b3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFkpICog
ZGF0YS5zdXJmYWNlU2NhbGUpOworICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFooMS4wZik7Cisg
ICAgZGF0YS5ub3JtYWxWZWN0b3Iubm9ybWFsaXplKCk7CisKKyAgICBpZiAobV9saWdodGluZ1R5
cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICBkYXRhLmxpZ2h0U3Ry
ZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChkYXRhLm5vcm1hbFZlY3RvciAqIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvcik7CisgICAgZWxzZSB7CisgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxm
d2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICBoYWxmd2F5VmVj
dG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyAxLjBmKTsKKyAgICAgICAgaGFsZndheVZlY3Rv
ci5ub3JtYWxpemUoKTsKKyAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQor
ICAgICAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKGRh
dGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoZGF0YS5u
b3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgIH0K
KworICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5ndGggPiAxLjBmKQorICAgICAgICBkYXRhLmxpZ2h0
U3RyZW5ndGggPSAxLjBmOworICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5ndGggPCAwLjBmKQorICAg
ICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAwLjBmOworCisgICAgZGF0YS5waXhlbHMtPnNldChk
YXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3Ro
ICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSkpOworICAgIGRhdGEucGl4ZWxzLT5zZXQo
ZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3Ry
ZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSgpKSk7CisgICAgZGF0YS5waXhlbHMt
PnNldChkYXRhLm9mZnNldCArIDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGln
aHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56KCkpKTsKK30KKworYm9vbCBG
RUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGE7CisgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisKKyAgICBpZiAoIW1fbGlnaHRTb3VyY2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYg
d2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVj
IGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4K
KyAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZGF0YS5waXhlbHMgPSBwaXhlbHM7CisgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBt
X3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKKyAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplID0gd2lkdGggKiBjUGl4ZWxTaXplOworICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9
IHdpZHRoIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsK
KyAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0Nv
bG9yLnJlZCgpLCBtX2xpZ2h0aW5nQ29sb3IuZ3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUo
KSk7CisgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YShwYWludGluZ0RhdGEpOwor
CisgICAgLy8gVG9wL0xlZnQgY29ybmVyCisgICAgZGF0YS5vZmZzZXQgPSAwOworICAgIHNldFBp
eGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAq
IGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBk
YXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAgICAg
ICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdo
dFBpeGVsVmFsdWUoKSk7CisKKyAgICAvLyBUb3AvUmlnaHQgcGl4ZWwKKyAgICBkYXRhLm9mZnNl
dCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLAor
ICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRh
dGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEu
ZG93blBpeGVsVmFsdWUoKSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS5sZWZ0UGl4ZWxW
YWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVs
VmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkpOworCisgICAgLy8gQm90dG9tL0xl
ZnQgcGl4ZWwKKyAgICBkYXRhLm9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIHNldFBpeGVsKGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKKyAgICAgICAgLTIuMGYgLyAz
LjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAor
ICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBS
aWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmln
aHRQaXhlbFZhbHVlKCkpOworCisgICAgLy8gQm90dG9tL1JpZ2h0IHBpeGVsCisgICAgZGF0YS5v
ZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVs
U2l6ZTsKKyAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKKyAgICAgICAgLTIuMGYgLyAzLjBm
LCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gMiAqIGRh
dGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSwKKyAgICAg
ICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBp
eGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVs
VmFsdWUoKSk7CisKKyAgICBpZiAod2lkdGggPj0gMykgeworICAgICAgICAvLyBUb3AgbGluZQor
ICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhl
bFNpemUpIHsKKyAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwK
KyAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgp
ICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAy
LjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgp
IC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAy
ICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIC8vIEJvdHRvbSBsaW5lCisgICAgICAgIGRhdGEub2Zmc2V0ID0g
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKyBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhE
ZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAg
ICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUsCisgICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZh
bHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYg
LyAyLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUo
KSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGhlaWdodCA+PSAzKSB7CisgICAgICAgIC8vIExlZnQg
bGluZQorICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7
CisgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksCisgICAgICAg
ICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdo
dFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJp
Z2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQ
aXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQ
aXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICB9CisgICAg
ICAgIC8vIFJpZ2h0IGxpbmUKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
KSB7CisgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhE
ZWNyZWFzZWRCeU9uZSwgeSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVw
TGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBQaXhlbFZhbHVlKCkgLTIgKiBkYXRhLmxlZnRQaXhl
bFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0xLjBm
IC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVl
KCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUo
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0g
MykgeworICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7
IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3kpIHsKKyAgICAgICAgICAgIGRhdGEu
b2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXpl
OworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgLTEu
MGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZh
bHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZh
bHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZh
bHVlKCksCisgICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4
ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZh
bHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGludCB0b3RhbFNpemUgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplICogaGVpZ2h0OworICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGln
aHRpbmcpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkK
KyAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGExID0gZGF0YS5waXhlbHMtPmdldChpKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYTIgPSBkYXRhLnBpeGVscy0+Z2V0KGkgKyAxKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYTMgPSBkYXRhLnBpeGVscy0+Z2V0KGkgKyAyKTsKKyAgICAg
ICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCisgICAgICAgICAg
ICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMp
IDogKGEyID49IGEzID8gYTIgOiBhMykpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgRkVMaWdodGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0
ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRJc0FscGhh
SW1hZ2UoZmFsc2UpOworCisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShzcmNJbWFnZURhdGEtPmRhdGEoKSk7CisKKyAg
ICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBU
aGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMworICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0
IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3Ry
YW5nZQorICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkg
YW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCisgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZl
TWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KKworICAgIGlmIChkcmF3
TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSwgZWZmZWN0
RHJhd2luZ1JlY3QuaGVpZ2h0KCkpKQorICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlKCktPnNpemUoKSksIEludFBvaW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5j
bHVkZSAiU1ZHRkVMaWdodGluZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZF
TGlnaHRpbmcuaCIKIAogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkxpZ2h0
U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjY3LDQgKzI2Nyw0IEBAIHZv
aWQgRkVMaWdodGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNW
R0ZFTGlnaHRpbmdfaAorI2RlZmluZSBTVkdGRUxpZ2h0aW5nX2gKKworI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVy
LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2Uu
aCIKKyNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisKKy8vIENvbW1vbiBiYXNlIGNsYXNz
IGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKKworY2xhc3MgRkVMaWdodGlu
ZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKworcHJvdGVjdGVkOgorICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKKyAgICAg
ICAgRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCisgICAgfTsKKwor
ICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgeworICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVj
dG9yOworICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbHM7CisgICAgICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7CisgICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKKyAgICAgICAgaW50IG9m
ZnNldDsKKyAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBp
bnQgd2lkdGhEZWNyZWFzZWRCeU9uZTsKKyAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25l
OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwTGVmdFBpeGVsVmFsdWUoKTsKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBpbnQgdXBQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJ
TkUgaW50IHVwUmlnaHRQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGxl
ZnRQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGNlbnRlclBpeGVsVmFs
dWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgcmlnaHRQaXhlbFZhbHVlKCk7CisgICAg
ICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25MZWZ0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdB
WVNfSU5MSU5FIGludCBkb3duUGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGlu
dCBkb3duUmlnaHRQaXhlbFZhbHVlKCk7CisgICAgfTsKKworICAgIEZFTGlnaHRpbmcoTGlnaHRp
bmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKworICAgIGJvb2wgZHJhd0xpZ2h0aW5n
KENhbnZhc1BpeGVsQXJyYXkqLCBpbnQsIGludCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dFBpeGVsKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAorICAgICAg
ICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxv
YXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpOworCisgICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdU
eXBlOworICAgIFJlZlB0cjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKKworICAgIENvbG9y
IG1fbGlnaHRpbmdDb2xvcjsKKyAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKKyAgICBmbG9hdCBt
X2RpZmZ1c2VDb25zdGFudDsKKyAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxv
YXQgbV9zcGVjdWxhckV4cG9uZW50OworICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7Cisg
ICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYg
Ly8gU1ZHRkVMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQg
KzI0LDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFNWR0ZFTGlnaHRpbmdf
aAotI2RlZmluZSBTVkdGRUxpZ2h0aW5nX2gKKyNpZm5kZWYgRkVMaWdodGluZ19oCisjZGVmaW5l
IEZFTGlnaHRpbmdfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYg
RU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgor
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgog
CiAvLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3Vs
YXJMaWdodGluZwpAQCAtOTEsNiArOTEsNiBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2Vu
ZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVMaWdodGluZ19oCisjZW5k
aWYgLy8gRkVMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorCisjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRkVNZXJnZTo6RkVNZXJnZSgpIAorICAgIDogRmlsdGVyRWZmZWN0KCkK
K3sKK30KKworUGFzc1JlZlB0cjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRkVNZXJnZSk7Cit9CisKK3ZvaWQgRkVNZXJnZTo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIpCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRz
KCk7CisgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsK
KyAgICAgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSkpOworICAgIH0KK30KKwordm9pZCBGRU1lcmdlOjpkdW1wKCkKK3sK
K30KKworVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
KTsKKyAgICB0cyA8PCAiW2ZlTWVyZ2UiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cyk7CisgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRz
KCk7CisgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8
IHNpemUgPDwgIlwiXVxuIjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5k
ZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHJldmlzaW9uIDY3OTM1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIK
KyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRU1lcmdlLmgiCiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTc5LDQgKzc5LDQgQEAg
VGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdAogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRU1lcmdlX2gKKyNkZWZpbmUgU1ZHRkVN
ZXJnZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0
ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZF
TWVyZ2UoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVNZXJnZV9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHJldmlzaW9u
IDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFTWVyZ2VfaAotI2RlZmluZSBTVkdGRU1lcmdl
X2gKKyNpZm5kZWYgRkVNZXJnZV9oCisjZGVmaW5lIEVNZXJnZV9oCiAKLSNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CkBAIC00NCw2ICs0NCw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJM
RShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVNZXJnZV9oCisjZW5kaWYgLy8gRkVNZXJnZV9o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisK
KyNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIHN0
ZDo6bWluOwordXNpbmcgc3RkOjptYXg7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVNb3Jw
aG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCBy
YWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fdHlw
ZSh0eXBlKQorICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCisgICAgLCBtX3JhZGl1c1kocmFkaXVz
WSkKK3sKK30KKworUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRl
KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNY
LCByYWRpdXNZKSk7Cit9CisKK01vcnBob2xvZ3lPcGVyYXRvclR5cGUgRkVNb3JwaG9sb2d5Ojpt
b3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK3Zv
aWQgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlKQoreworICAgIG1fdHlwZSA9IHR5cGU7Cit9CisKK2Zsb2F0IEZFTW9ycGhvbG9n
eTo6cmFkaXVzWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmFkaXVzWDsKK30KKwordm9pZCBG
RU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKK3sKKyAgICBtX3JhZGl1c1gg
PSByYWRpdXNYOworfQorCitmbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JhZGl1c1k7Cit9CisKK3ZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KGZsb2F0IHJhZGl1c1kpCit7CisgICAgbV9yYWRpdXNZID0gcmFkaXVzWTsKK30KKwordm9pZCBG
RU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWlu
LT5yZXN1bHRJbWFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWVmZmVjdENvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7CisKKyAgICBpbnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNY
ICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFkaXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
LmhlaWdodCgpKTsKKyAgICBpZiAocmFkaXVzWCA8PSAwIHx8IHJhZGl1c1kgPD0gMCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UoKS0+c2l6ZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkoaW4tPnJlc3Vs
dEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5k
YXRhKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworCisgICAgaW50IGVm
ZmVjdFdpZHRoID0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7CisgICAgCisgICAgLy8g
TGltaXQgdGhlIHJhZGl1cyBzaXplIHRvIGVmZmVjdCBkaW1lbnNpb25zCisgICAgcmFkaXVzWCA9
IG1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzWCk7CisgICAgcmFkaXVz
WSA9IG1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1c1kpOworICAgIAor
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBleHRyZW1hOworICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBpbnQgc3RhcnRZ
ID0gbWF4KDAsIHkgLSByYWRpdXNZKTsKKyAgICAgICAgaW50IGVuZFkgPSBtaW4oZWZmZWN0RHJh
d2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCB5ICsgcmFkaXVzWSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIC8v
IEZpbGwgdGhlIGtlcm5lbAorICAgICAgICAgICAgZXh0cmVtYS5jbGVhcigpOworICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPD0gcmFkaXVzWDsgKytqKSB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBjb2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHN0YXJ0WSAq
IGVmZmVjdFdpZHRoICsgNCAqIGogKyBjaGFubmVsKTsKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gc3RhcnRZOyBpIDw9IGVuZFk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHBpeGVsID0gc3JjUGl4ZWxBcnJheS0+Z2V0KGkgKiBlZmZlY3RXaWR0aCArIDQg
KiBqICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAmJiBwaXhlbCA8PSBjb2x1bW5FeHRyZW1hKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElM
QVRFICYmIHBpeGVsID49IGNvbHVtbkV4dHJlbWEpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29sdW1uRXh0cmVtYSA9IHBpeGVsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW1hKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4
dCBjb2x1bW4gCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFggPSBtaW4o
eCArIHJhZGl1c1gsIGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGNvbHVtbkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3Rh
cnRZICogZWZmZWN0V2lkdGggKyBlbmRYICogNCArIGNoYW5uZWwpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSBzdGFydFk7IGkgPD0gZW5kWTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWwgPSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdp
ZHRoICsgZW5kWCAqIDQgKyBjaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5
cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJl
bWEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9ESUxBVEUgJiYgcGl4ZWwgPj0gY29sdW1uRXh0cmVtYSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb2x1bW5FeHRyZW1hID0gcGl4ZWw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh4IC0gcmFkaXVzWCA+PSAwKQorICAgICAgICAgICAgICAgICAgICBl
eHRyZW1hLnJlbW92ZSgwKTsKKyAgICAgICAgICAgICAgICBpZiAoeCArIHJhZGl1c1ggPD0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBl
bmQoY29sdW1uRXh0cmVtYSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbnRpcmVF
eHRyZW1hID0gZXh0cmVtYVswXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGtlcm5l
bEluZGV4ID0gMDsga2VybmVsSW5kZXggPCBleHRyZW1hLnNpemUoKTsgKytrZXJuZWxJbmRleCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRVJPREUgJiYgZXh0cmVtYVtrZXJuZWxJbmRleF0gPD0gZW50aXJlRXh0cmVtYSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJ
TEFURSAmJiBleHRyZW1hW2tlcm5lbEluZGV4XSA+PSBlbnRpcmVFeHRyZW1hKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVudGlyZUV4dHJlbWEgPSBleHRyZW1hW2tlcm5lbEluZGV4XTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldCh5
ICogZWZmZWN0V2lkdGggKyA0ICogeCArIGNoYW5uZWwsIGVudGlyZUV4dHJlbWEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRp
cGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwor
fQorCit2b2lkIEZFTW9ycGhvbG9neTo6ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
JiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV046CisgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6CisgICAgICAgIHRzIDw8ICJF
Uk9ERSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJ
TEFURToKKyAgICAgICAgdHMgPDwgIkRJTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlTW9ycGhvbG9neSI7CisgICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIG9wZXJh
dG9yPVwiIiA8PCBtb3JwaG9sb2d5T3BlcmF0b3IoKSA8PCAiXCIgIgorICAgICAgIDw8ICJyYWRp
dXM9XCIiIDw8IHJhZGl1c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAK
KyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsg
MSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiA2
NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZF
TW9ycGhvbG9neS5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFTW9ycGhvbG9n
eS5oIgogCiAjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgpAQCAtMTg1LDQgKzE4NSw0IEBAIFRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxS
ZXByZXMKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCShyZXZp
c2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBo
b2xvZ3kuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBTVkdGRU1vcnBob2xvZ3lfaAorI2RlZmluZSBTVkdGRU1vcnBob2xvZ3lf
aAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKKyAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
VU5LTk9XTiA9IDAsCisgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKKyAgICBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgorfTsKKworY2xhc3MgRkVNb3JwaG9sb2d5
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7ICAKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xv
Z3lPcGVyYXRvcigpIGNvbnN0OworICAgIHZvaWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUpOworCisgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0OworICAgIHZv
aWQgc2V0UmFkaXVzWChmbG9hdCk7CisKKyAgICBmbG9hdCByYWRpdXNZKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRSYWRpdXNZKGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgCisgICAgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSBtX3R5cGU7CisgICAgZmxvYXQgbV9yYWRpdXNYOworICAgIGZsb2F0IG1fcmFkaXVzWTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVNb3JwaG9sb2d5X2gKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHJl
dmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVNb3JwaG9sb2d5X2gKLSNk
ZWZpbmUgU1ZHRkVNb3JwaG9sb2d5X2gKKyNpZm5kZWYgRkVNb3JwaG9sb2d5X2gKKyNkZWZpbmUg
RkVNb3JwaG9sb2d5X2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lm
IEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgogCkBAIC02MSw2ICs2MSw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVNb3JwaG9sb2d5X2gKKyNlbmRp
ZiAvLyBGRU1vcnBob2xvZ3lfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVPZmZzZXQuaCIKKwor
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZFT2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkp
CisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV9keChkeCkKKyAgICAsIG1fZHkoZHkpCit7
Cit9CisKK1Bhc3NSZWZQdHI8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZs
b2F0IGR5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVPZmZzZXQoZHgsIGR5KSk7Cit9
CisKK2Zsb2F0IEZFT2Zmc2V0OjpkeCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHg7Cit9CisK
K3ZvaWQgRkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQoreworICAgIG1fZHggPSBkeDsKK30KKwor
ZmxvYXQgRkVPZmZzZXQ6OmR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keTsKK30KKwordm9p
ZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCit7CisgICAgbV9keSA9IGR5OworfQorCit2b2lk
IEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+
cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CisKKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFn
ZVJlY3QoKTsKKyAgICBzb3VyY2VJbWFnZVJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworCisg
ICAgaWYgKGZpbHRlci0+ZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkpIHsKKyAgICAgICAgbV9keCAq
PSBzb3VyY2VJbWFnZVJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9keSAqPSBzb3VyY2VJbWFnZVJl
Y3QuaGVpZ2h0KCk7CisgICAgfQorICAgIG1fZHggKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9u
KCkud2lkdGgoKTsKKyAgICBtX2R5ICo9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdo
dCgpOworCisgICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBGbG9hdFJlY3QobV9keCArIGluLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHkgKyBp
bi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS53aWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
LmhlaWdodCgpKTsKKworICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7Cit9CisKK3ZvaWQgRkVPZmZz
ZXQ6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlT2Zmc2V0IjsgCisgICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBk
eCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDAp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIy
LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVPZmZzZXQuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykK
KyNpbmNsdWRlICJGRU9mZnNldC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMDksNCArMTA5LDQgQEAgVGV4dFN0cmVhbSYgRkVPZmZz
ZXQ6OmV4dGVybmFsUmVwcmVzZW50YQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklM
VEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU9mZnNldC5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgU1ZHRkVPZmZzZXRfaAorI2RlZmluZSBTVkdGRU9mZnNldF9oCisKKyNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
RU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZFT2Zmc2V0PiBjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KTsKKworICAgIGZsb2F0
IGR4KCkgY29uc3Q7CisgICAgdm9pZCBzZXREeChmbG9hdCk7CisKKyAgICBmbG9hdCBkeSgpIGNv
bnN0OworICAgIHZvaWQgc2V0RHkoZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZp
bHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNv
bnN0OworCitwcml2YXRlOgorICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CisKKyAg
ICBmbG9hdCBtX2R4OworICAgIGZsb2F0IG1fZHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlm
IC8vIFNWR0ZFT2Zmc2V0X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAg
QEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVP
ZmZzZXRfaAotI2RlZmluZSBTVkdGRU9mZnNldF9oCisjaWZuZGVmIEZFT2Zmc2V0X2gKKyNkZWZp
bmUgRkVPZmZzZXRfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYg
RU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAKQEAgLTUyLDYgKzUyLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYg
Ly8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRU9mZnNldF9oCisjZW5kaWYgLy8g
RkVPZmZzZXRfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6Njc5
MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgorCisjaW5jbHVkZSAiU1ZH
TGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLAorICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLAorICAgIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKKyAgICA6IEZFTGln
aHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBz
cGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQoreworfQorCitQYXNzUmVmUHRyPEZFU3BlY3Vs
YXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IsCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3Vy
Y2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVNwZWN1bGFyTGlnaHRpbmcobGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LAorICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291
cmNlKSk7Cit9CisKK0ZFU3BlY3VsYXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygpCit7
Cit9CisKK0NvbG9yIEZFU3BlY3VsYXJMaWdodGluZzo6bGlnaHRpbmdDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsKK30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRp
bmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCit7CisgICAg
bV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsKK30KKworZmxvYXQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2VTY2Fs
ZTsKK30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBz
dXJmYWNlU2NhbGUpCit7CisgICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Cit9CisK
K2Zsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsKK30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRp
bmc6OnNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKK3sKKyAgICBt
X3NwZWN1bGFyQ29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OworfQorCitmbG9hdCBGRVNwZWN1
bGFyTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Nw
ZWN1bGFyRXhwb25lbnQ7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCit7CisgICAgbV9zcGVjdWxhckV4cG9u
ZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKK30KKworZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjpr
ZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0
aFg7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkKK3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2Vy
bmVsVW5pdExlbmd0aFg7Cit9CisKK2Zsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6a2VybmVsVW5p
dExlbmd0aFkoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOworfQor
Cit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFkpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRM
ZW5ndGhZOworfQorCitjb25zdCBMaWdodFNvdXJjZSogRkVTcGVjdWxhckxpZ2h0aW5nOjpsaWdo
dFNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Cit9CisK
K3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0
U291cmNlPiBsaWdodFNvdXJjZSkKK3sKKyAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7
Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVh
bSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwor
ICAgIHRzIDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBt
X3N1cmZhY2VTY2FsZSA8PCAiXCIgIgorICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8
IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgorICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50
PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRz
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVT
cGVjdWxhckxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1
ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTM1LDQgKzEz
NSw0IEBAIFRleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWwKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCShyZXZpc2lv
biA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAorI2RlZmluZSBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBD
b2xvciYsIGZsb2F0LCBmbG9hdCwKKyAgICAgICAgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1Jl
ZlB0cjxMaWdodFNvdXJjZT4pOworICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOwor
CisgICAgQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0TGlnaHRpbmdD
b2xvcihjb25zdCBDb2xvciYpOworCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCgpIGNvbnN0OworICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CisKKyAg
ICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTcGVjdWxhckV4
cG9uZW50KGZsb2F0KTsKKworICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7CisKKyAgICBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWSgpIGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQp
OworCisgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQor
CisjZW5kaWYgLy8gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHJl
dmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksMTEgQEAKICAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nX2gKLSNkZWZpbmUgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKKyNpZm5kZWYgRkVTcGVj
dWxhckxpZ2h0aW5nX2gKKyNkZWZpbmUgRkVTcGVjdWxhckxpZ2h0aW5nX2gKIAotI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKyNp
ZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjQsNiArNjQsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRp
ZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19o
CisjZW5kaWYgLy8gRkVTcGVjdWxhckxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOjY3OTM1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxw
b3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVUaWxlLmgiCisKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KCkKK3sKK30K
KworUGFzc1JlZlB0cjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFVGlsZSk7Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBpbnB1dEVmZmVjdCgw
KS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisKKyAgICBmaWx0
ZXItPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbih0aGlzLCBmaWx0ZXItPmZpbHRl
clJlZ2lvbigpKTsKKyAgICByZXR1cm4gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Cit9CisK
K3ZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFp
bi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0
KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CisKKyAgICBJbnRSZWN0IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChpbi0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisKKyAgICAvLyBTb3VyY2UgaW5wdXQgbmVl
ZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1
dCBnaXZlcyB0aGUKKyAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4g
VGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCisgICAg
aWYgKGluLT5pc1NvdXJjZUlucHV0KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lv
biA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgICAgIGZpbHRlclJlZ2lvbi5zY2FsZShm
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKS5oZWlnaHQoKSk7CisgICAgICAgIHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0
ZXJSZWdpb24pOworICAgIH0KKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOworICAgIEdyYXBoaWNzQ29udGV4
dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworICAgIHRpbGVJbWFn
ZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgSW50UG9pbnQoKSk7CisgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUodGlsZUltYWdlLT5jb3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbWF0cml4OworICAgIG1hdHJpeC50cmFuc2xhdGUoaW4tPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KS54KCksCisgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSk7CisgICAg
cGF0dGVybi5nZXQoKS0+c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CisKKyAgICBm
aWx0ZXJDb250ZXh0LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuKTsKKyAgICBmaWx0ZXJDb250ZXh0
LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpLnNpemUoKSkpOworfQorCit2b2lkIEZFVGlsZTo6ZHVtcCgpCit7Cit9CisKK1Rl
eHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
aW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0
cyA8PCAiW2ZlVGlsZSI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKKyAgICB0cyA8PCAiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRVRpbGUuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVRpbGUu
aCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpA
QCAtMTAyLDUgKzEwMiw1IEBAIFRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgJKHJldmlzaW9uIDY3OTM1KQko
ZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oOjY3OTM1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFVGlsZV9o
CisjZGVmaW5lIFNWR0ZFVGlsZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUaWxlPiBjcmVhdGUoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgp
OworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgRkVUaWxlKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFVGlsZV9o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCShyZXZp
c2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFVGlsZV9oCi0jZGVmaW5lIFNWR0ZFVGls
ZV9oCisjaWZuZGVmIEZFVGlsZV9oCisjZGVmaW5lIEZFVGlsZV9oCiAKLSNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKIApAQCAtNDUsNiArNDUsNiBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8v
IFNWR0ZFVGlsZV9oCisjZW5kaWYgLy8gRkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiA2Nzkz
NSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3Bw
OjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiU1ZHRkVUdXJidWxlbmNlLmgiCisKKyNpbmNsdWRlICJDYW52YXNQaXhl
bEFycmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8q
CisgICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29y
aXRobSBpczoKKyAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9
IDE2ODA3IGFuZAorICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcs
IHIgPSBzZWVkLgorICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAg
cC4gMTE5NSwgT2N0LiAxOTg4CisgICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJv
ZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKKyAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVk
IG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgorKi8KK3N0YXRpYyBjb25zdCBpbnQg
c19wZXJsaW5Ob2lzZSA9IDQwOTY7CitzdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0g
MjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCitzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVk
ZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCitzdGF0aWMgY29uc3QgaW50
IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCitzdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAy
ODM2OyAvLyBtICUgYQorCitGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlw
ZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBu
dW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVyRWZm
ZWN0KCkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9iYXNlRnJlcXVlbmN5WChiYXNlRnJl
cXVlbmN5WCkKKyAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCisgICAgLCBt
X251bU9jdGF2ZXMobnVtT2N0YXZlcykKKyAgICAsIG1fc2VlZChzZWVkKQorICAgICwgbV9zdGl0
Y2hUaWxlcyhzdGl0Y2hUaWxlcykKK3sKK30KKworUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IEZF
VHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVR1cmJ1bGVuY2Uo
dHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBz
dGl0Y2hUaWxlcykpOworfQorCitUdXJidWxhbmNlVHlwZSBGRVR1cmJ1bGVuY2U6OnR5cGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRU
eXBlKFR1cmJ1bGFuY2VUeXBlIHR5cGUpCit7CisgICAgbV90eXBlID0gdHlwZTsKK30KKworZmxv
YXQgRkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YmFzZUZyZXF1ZW5jeVk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKK3sKKyAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZy
ZXF1ZW5jeVk7Cit9CisKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6YmFzZUZyZXF1ZW5jeVgoKSBjb25z
dAoreworICAgIHJldHVybiBtX2Jhc2VGcmVxdWVuY3lYOworfQorCit2b2lkIEZFVHVyYnVsZW5j
ZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCit7CisgICAgICAgbV9i
YXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6
OnNlZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlZWQ7IAorfQorCit2b2lkIEZFVHVyYnVs
ZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQoreworICAgIG1fc2VlZCA9IHNlZWQ7Cit9CisKK2lu
dCBGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX251bU9j
dGF2ZXM7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKGJvb2wgbnVtT2N0
YXZlcykKK3sKKyAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOworfQorCitib29sIEZFVHVy
YnVsZW5jZTo6c3RpdGNoVGlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0aXRjaFRpbGVz
OworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCit7
CisgICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKK30KKworLy8gVGhlIHR1cmJ1bGVuY2UgY2Fs
Y3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRo
ZSBTVkcgMS4xIHNwZWNpZmljYXRpb246CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9m
aWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCisKK0ZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQ
YWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6
ZSkKKyAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQorICAgICwgd2lkdGgoMCkKKyAgICAsIGhlaWdo
dCgwKQorICAgICwgd3JhcFgoMCkKKyAgICAsIHdyYXBZKDApCisgICAgLCBjaGFubmVsKDApCisg
ICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKK3sKK30KKworLy8gQ29tcHV0ZSBwc2V1ZG8g
cmFuZG9tIG51bWJlci4KK2lubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpy
YW5kb20oKQoreworICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBz
X3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgIGlmIChyZXN1bHQgPD0g
MCkKKyAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07CisgICAgc2VlZCA9IHJlc3VsdDsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQg
dCkKK3sKKyAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKK30KKworaW5saW5lIGZsb2F0
IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICBy
ZXR1cm4gYSArIHQgKiAoYiAtIGEpOworfQorCitpbmxpbmUgdm9pZCBGRVR1cmJ1bGVuY2U6Omlu
aXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxp
emF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdl
IFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDAp
CisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3Jh
bmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRN
YXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0g
MTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxv
Y2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
aV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hh
bm5lbF1baV07CisgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0Pigo
cGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUp
IC8gc19ibG9ja1NpemU7CisgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZs
b2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9j
a1NpemUpIC8gc19ibG9ja1NpemU7CisgICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0g
c3FydGYoZ3JhZGllbnRbMF0gKiBncmFkaWVudFswXSArIGdyYWRpZW50WzFdICogZ3JhZGllbnRb
MV0pOworICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAg
ICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgIH0K
KyAgICB9CisgICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewor
ICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAg
IGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIEFT
U0VSVChqID49IDApOworICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwor
ICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltq
XSA9IGs7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyAr
K2kpIHsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSAr
IGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgZm9yIChpbnQg
Y2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHBhaW50
aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV1bMV07CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGNo
ZWNrTm9pc2UoaW50JiBub2lzZVZhbHVlLCBpbnQgbGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQor
eworICAgIGlmIChub2lzZVZhbHVlID49IGxpbWl0VmFsdWUpCisgICAgICAgIG5vaXNlVmFsdWUg
LT0gbmV3VmFsdWU7CisgICAgaWYgKG5vaXNlVmFsdWUgPj0gbGltaXRWYWx1ZSAtIDEpCisgICAg
ICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5v
aXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lzZSB7CisgICAgICAgIGludCBub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlOworICAgICAgICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZTsKKworICAgICAgICBOb2lzZShmbG9hdCBjb21wb25lbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKKyAgICAgICAg
ICAgIG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9u
KTsKKyAgICAgICAgICAgIG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gcG9zaXRpb24gLSBu
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOworICAgICAgICB9CisgICAgfTsKKworICAgIE5vaXNl
IG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5vaXNlIG5vaXNlWShub2lzZVZlY3Rvci55
KCkpOworICAgIGZsb2F0KiBxOworICAgIGZsb2F0IHN4LCBzeSwgYSwgYiwgdSwgdjsKKworICAg
IC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAg
IGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgICAgIGNoZWNrTm9pc2Uobm9pc2VYLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUsIHBhaW50aW5nRGF0YS53cmFwWCwgcGFpbnRpbmdEYXRhLndpZHRo
KTsKKyAgICAgICAgY2hlY2tOb2lzZShub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSwg
cGFpbnRpbmdEYXRhLndyYXBZLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKKyAgICB9CisKKyAgICBu
b2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lz
ZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBpbnQgbGF0
dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZV07CisgICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yWyhub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDEp
ICYgc19ibG9ja01hc2tdOworCisgICAgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVgubm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWUpOworICAgIHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlKTsKKworICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZH
IHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVu
Y2VFbGVtZW50LgorICAgIGludCB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvclts
YXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAgcSA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07CisgICAg
dSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyBub2lzZVkubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzFdOworICAgIHRlbXAgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZV07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEu
Y2hhbm5lbF1bdGVtcF07CisgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWUgLSAxKSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzFd
OworICAgIGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKyAgICB0ZW1wID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZSArIDFdOworICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFp
bnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZy
YWN0aW9uVmFsdWUgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAt
IDEpICogcVsxXTsKKyAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0
TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAg
ICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsK
KyAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSAr
IChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07CisgICAgYiA9
IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHJldHVybiBsaW5lYXJJbnRlcnBv
bGF0aW9uKHN5LCBhLCBiKTsKK30KKwordW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWludGlu
Z0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpOworICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsKKyAg
ICBmbG9hdCB0aWxlSGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUuaGVpZ2h0KCk7Cisg
ICAgQVNTRVJUKHRpbGVIZWlnaHQgPiAwKTsKKyAgICAvLyBBZGp1c3QgdGhlIGJhc2UgZnJlcXVl
bmNpZXMgaWYgbmVjZXNzYXJ5IGZvciBzdGl0Y2hpbmcuCisgICAgaWYgKG1fc3RpdGNoVGlsZXMp
IHsKKyAgICAgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1
ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAgICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3Jk
ZXJzIHdpbGwgYmUgY29udGludW91cy4KKyAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVgpIHsK
KyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBtX2Jh
c2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVu
Y3kgPSBjZWlsZih0aWxlV2lkdGggKiBtX2Jhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAg
ICAgICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRp
bmcgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVggLyBs
b3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gbV9iYXNlRnJlcXVlbmN5WCkKKyAgICAgICAg
ICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OworICAg
ICAgICB9CisgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZKSB7CisgICAgICAgICAgICBmbG9h
dCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5jeVkpIC8g
dGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxl
SGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgaWYg
KG1fYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gbV9iYXNl
RnJlcXVlbmN5WSkKKyAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVl
bmN5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkg
PSBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBUdXJidWxlbmNl
SW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBwYWludGluZ0RhdGEud2lkdGggPSByb3Vu
ZGYodGlsZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCk7CisgICAgICAgIHBhaW50aW5nRGF0YS53
cmFwWCA9IHNfcGVybGluTm9pc2UgKyBwYWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHBhaW50
aW5nRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5jeVkpOwor
ICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRpbmdEYXRh
LmhlaWdodDsKKyAgICB9CisgICAgZmxvYXQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gMDsK
KyAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIG1fYmFzZUZyZXF1ZW5jeVgs
IHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkpOworICAgIGZsb2F0IHJhdGlvID0gMTsKKyAg
ICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7
CisgICAgICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFKQor
ICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdE
YXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IGZhYnNmKG5vaXNlMkQocGFpbnRpbmdEYXRhLCBub2lz
ZVZlY3RvcikpIC8gcmF0aW87CisgICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3Iu
eCgpICogMik7CisgICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7
CisgICAgICAgIHJhdGlvICo9IDI7CisgICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAg
ICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lz
ZW9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZGlu
ZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgorICAgICAg
ICAgICAgcGFpbnRpbmdEYXRhLndpZHRoICo9IDI7CisgICAgICAgICAgICBwYWludGluZ0RhdGEu
d3JhcFggPSAyICogcGFpbnRpbmdEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAg
ICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS53
cmFwWSA9IDIgKiBwYWludGluZ0RhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBj
b21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5
IGZyYWN0YWxOb2lzZQorICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1
KSBieSB0dXJidWxlbmNlLgorICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJB
Q1RBTE5PSVNFKQorICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKKyAgICAvLyBDbGFtcCByZXN1bHQKKyAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBzdGQ6Om1heChzdGQ6Om1pbih0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQsIDEuZiksIDAuZik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSk7Cit9CisKK3ZvaWQgRkVUdXJi
dWxlbmNlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBpZiAoIWVmZmVjdENvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBpZiAoIWltYWdlUmVjdC5zaXplKCkud2lkdGgo
KSB8fCAhaW1hZ2VSZWN0LnNpemUoKS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0
LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YShtX3NlZWQsIGltYWdlUmVjdC5zaXplKCkpOworICAgIGluaXRQYWludChwYWludGluZ0Rh
dGEpOworCisgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9u
KCk7CisgICAgRmxvYXRQb2ludCBwb2ludDsKKyAgICBwb2ludC5zZXRZKGZpbHRlclJlZ2lvbi55
KCkpOworICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9p
bnQueSgpICsgMSk7CisgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgeworICAgICAg
ICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIGZvciAocGFpbnRp
bmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdE
YXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKKyAgICAgICAgICAgICAgICBpbWFn
ZURhdGEtPmRhdGEoKS0+c2V0KGluZGV4T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgcG9pbnQpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdl
dCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6ZHVt
cCgpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBUdXJidWxhbmNlVHlwZSYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBFX1VOS05PV046CisgICAgICAgIHRzIDw8ICJVTktOT1dO
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNF
OgorICAgICAgICB0cyA8PCAiVFVSQlVMQU5DRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFOgorICAgICAgICB0cyA8PCAiTk9JU0UiOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBG
RVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBp
bmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwg
IltmZVR1cmJ1bGVuY2UiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7CisgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKKyAgICAgICA8
PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VG
cmVxdWVuY3lZKCkgPDwgIlwiICIKKyAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJc
IiAiCisgICAgICAgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAiXCIgIgor
ICAgICAgIDw8ICJzdGl0Y2hUaWxlcz1cIiIgPDwgc3RpdGNoVGlsZXMoKSA8PCAiXCJdXG4iOwor
ICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNjc5MzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVR1cmJ1
bGVuY2UuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIK
IAogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAg
LTM4Myw0ICszODMsNCBAQCBUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVz
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24g
Njc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNl
Lmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTVkdGRVR1cmJ1bGVuY2VfaAorI2RlZmluZSBTVkdGRVR1cmJ1bGVuY2VfaAor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSBUdXJidWxhbmNlVHlwZSB7CisgICAgRkVUVVJCVUxFTkNFX1RZUEVfVU5LTk9XTiA9IDAsCisg
ICAgRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFID0gMSwKKyAgICBGRVRVUkJVTEVOQ0Vf
VFlQRV9UVVJCVUxFTkNFID0gMgorfTsKKworY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUdXJidWxlbmNl
PiBjcmVhdGUoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7
CisKKyAgICBUdXJidWxhbmNlVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKFR1
cmJ1bGFuY2VUeXBlKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCk7CisKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WCgpIGNvbnN0OworICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOworCisgICAgZmxv
YXQgc2VlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0U2VlZChmbG9hdCk7CisKKyAgICBpbnQgbnVt
T2N0YXZlcygpIGNvbnN0OworICAgIHZvaWQgc2V0TnVtT2N0YXZlcyhib29sKTsKKworICAgIGJv
b2wgc3RpdGNoVGlsZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wpOwor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1w
KCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
TWFzayA9IHNfYmxvY2tTaXplIC0gMTsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAg
ICAgICBsb25nIHNlZWQ7CisgICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tT
aXplICsgMl07CisgICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJd
WzJdOworICAgICAgICBpbnQgd2lkdGg7IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAg
Zm9yIHN0aXRjaGluZy4KKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgaW50IHdyYXBYOyAv
LyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCisgICAgICAgIGludCB3cmFwWTsKKyAgICAgICAgaW50
IGNoYW5uZWw7CisgICAgICAgIEludFNpemUgZmlsdGVyU2l6ZTsKKworICAgICAgICBQYWludGlu
Z0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSk7Cisg
ICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOworICAgIH07CisKKyAgICBGRVR1cmJ1bGVuY2Uo
VHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisKKyAgICBp
bmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7CisgICAgZmxvYXQgbm9pc2UyRChQ
YWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBv
aW50Jik7CisKKyAgICBUdXJidWxhbmNlVHlwZSBtX3R5cGU7CisgICAgZmxvYXQgbV9iYXNlRnJl
cXVlbmN5WDsKKyAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGludCBtX251bU9jdGF2
ZXM7CisgICAgZmxvYXQgbV9zZWVkOworICAgIGJvb2wgbV9zdGl0Y2hUaWxlczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVUdXJidWxlbmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVUdXJidWxlbmNlX2gKLSNkZWZpbmUgU1ZH
RkVUdXJidWxlbmNlX2gKKyNpZm5kZWYgRkVUdXJidWxlbmNlX2gKKyNkZWZpbmUgRkVUdXJidWxl
bmNlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgog
CkBAIC05OCw2ICs5OCw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJM
RShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVUdXJidWxlbmNlX2gKKyNlbmRpZiAvLyBGRVR1
cmJ1bGVuY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHTGlnaHRT
b3VyY2UuaCIKKworI2luY2x1ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUg
IlNWR1BvaW50TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0Lmgi
CisjaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6Omlu
aXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJikKK3sKK30KKwordm9pZCBQb2ludExpZ2h0U291
cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
LCBpbnQgeSwgZmxvYXQgeikKK3sKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WCht
X3Bvc2l0aW9uLngoKSAtIHgpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1f
cG9zaXRpb24ueSgpIC0geSk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9w
b3NpdGlvbi56KCkgLSB6KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXpl
KCk7Cit9CisKKy8vIHNwb3QtbGlnaHQgZWRnZSBkYXJrZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNv
bHV0ZSB0cmVzaG9sZAorLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jl
c3Npb24gdGVzdHMKK3N0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2
ZjsKKwordm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCit7CisgICAgcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3RvciA9
IHBhaW50aW5nRGF0YS5jb2xvclZlY3RvcjsKKyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVj
dG9yLnNldFgobV9kaXJlY3Rpb24ueCgpIC0gbV9wb3NpdGlvbi54KCkpOworICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WShtX2RpcmVjdGlvbi55KCkgLSBtX3Bvc2l0aW9uLnko
KSk7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5zZXRaKG1fZGlyZWN0aW9uLnoo
KSAtIG1fcG9zaXRpb24ueigpKTsKKyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5v
cm1hbGl6ZSgpOworCisgICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7CisgICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSAwLjBmOworICAgICAgICBwYWludGluZ0RhdGEu
Y29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisgICAgICAgICAgICBsaW1pdGluZ0NvbmVB
bmdsZSA9IC1saW1pdGluZ0NvbmVBbmdsZTsKKyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xl
ID4gOTAuMGYpCisgICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworICAgICAg
ICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxp
bWl0aW5nQ29uZUFuZ2xlKSk7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0g
cGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOworICAgIH0K
KworICAgIC8vIE9wdGltaXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVz
CisgICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMDsKKyAgICBlbHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4w
ZikKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworICAgIGVsc2Ug
Ly8gSXQgaXMgbmVpdGhlciAwLjBmIG5vciAxLjBmCisgICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMjsKK30KKwordm9pZCBTcG90TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6
KQoreworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0g
eCk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5
KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHop
OworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5ub3JtYWxpemUoKTsKKworICAgIGZsb2F0
IGNvc2luZU9mQW5nbGUgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEu
ZGlyZWN0aW9uVmVjdG9yOworICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNv
bmVDdXRPZmZMaW1pdCkgeworICAgICAgICAvLyBObyBsaWdodCBpcyBwcm9kdWNlZCwgc2Nhbmxp
bmVzIGFyZSBub3QgdXBkYXRlZAorICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0
WCgwLjBmKTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFkoMC4wZik7Cisg
ICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRaKDAuMGYpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwKKyAgICBmbG9h
dCBsaWdodFN0cmVuZ3RoOworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25l
bnQpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOyAvLyAtY29z
aW5lT2ZBbmdsZSBeIDAgPT0gMQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSAtY29zaW5lT2ZBbmdsZTsgLy8gLWNvc2luZU9mQW5nbGUgXiAxID09
IC1jb3NpbmVPZkFuZ2xlCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBwb3dmKC1jb3NpbmVPZkFuZ2xlLCBtX3NwZWN1bGFyRXhwb25lbnQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5n
RGF0YS5jb25lRnVsbExpZ2h0KQorICAgICAgICBsaWdodFN0cmVuZ3RoICo9IChwYWludGluZ0Rh
dGEuY29uZUN1dE9mZkxpbWl0IC0gY29zaW5lT2ZBbmdsZSkgLyAocGFpbnRpbmdEYXRhLmNvbmVD
dXRPZmZMaW1pdCAtIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0KTsKKworICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMS4wZikKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7CisKKyAgICBw
YWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WChwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVj
dG9yLngoKSAqIGxpZ2h0U3RyZW5ndGgpOworICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5z
ZXRZKHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueSgpICogbGlnaHRTdHJlbmd0aCk7
CisgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFoocGFpbnRpbmdEYXRhLnByaXZhdGVD
b2xvclZlY3Rvci56KCkgKiBsaWdodFN0cmVuZ3RoKTsKK30KKwordm9pZCBEaXN0YW50TGlnaHRT
b3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit7Cisg
ICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemltdXRoKTsKKyAgICBmbG9hdCBlbGV2YXRp
b24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iu
c2V0WChjb3NmKGF6aW11dGgpICogY29zZihlbGV2YXRpb24pKTsKKyAgICBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3Iuc2V0WShzaW5mKGF6aW11dGgpICogY29zZihlbGV2YXRpb24pKTsKKyAgICBw
YWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WihzaW5mKGVsZXZhdGlvbikpOworfQorCit2b2lk
IERpc3RhbnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGlu
dCwgaW50LCBmbG9hdCkKK3sKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKK3sKKyAgICB0cyA8PCAieD0iIDw8
IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8ICIgej0iIDw8IHAueigpOworICAgIHJldHVybiB0
czsKK30KKworVGV4dFN0cmVhbSYgUG9pbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9UE9JTlQtTElH
SFRdICI7CisgICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJdIjsK
KyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5
cGU9U1BPVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigp
IDw8ICJcIl0iOworICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAi
XCJdIjsKKyAgICB0cyA8PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25l
bnQoKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1p
dGluZ0NvbmVBbmdsZSgpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVh
bSYgRGlzdGFudExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzKSBjb25zdAoreworICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOworICAgIHRz
IDw8ICJbYXppbXV0aD1cIiIgPDwgYXppbXV0aCgpIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZWxl
dmF0aW9uPVwiIiA8PCBlbGV2YXRpb24oKSA8PCAiXCJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEz
ICsyMiwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKLSNpbmNsdWRlICJTVkdEaXN0YW50
TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5o
IgorI2luY2x1ZGUgIkRpc3RhbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIlBvaW50TGlnaHRT
b3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiU3BvdExp
Z2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTY2LDQgKzE2Niw0IEBAIFRleHRTdHJlYW0mIERpc3RhbnRMaWdodFNvdXJj
ZTo6ZXh0ZXJuYWwKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAko
cmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGln
aHRTb3VyY2UuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHTGlnaHRTb3VyY2VfaAorI2RlZmluZSBT
VkdMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBM
aWdodFR5cGUgeworICAgIExTX0RJU1RBTlQsCisgICAgTFNfUE9JTlQsCisgICAgTFNfU1BPVAor
fTsKKworY2xhc3MgVGV4dFN0cmVhbTsKKworY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxMaWdodFNvdXJjZT4geworcHVibGljOgorCisgICAgLy8gTGlnaHQgdmVjdG9ycyBt
dXN0IGJlIGNhbGN1bGF0ZWQgZm9yIGV2ZXJ5IHBpeGVsIGR1cmluZworICAgIC8vIHBhaW50aW5n
LiBJdCBpcyBleHBlbnNpdmUgdG8gcGFzcyBhbGwgdGhlc2UgYXJndW1lbnRzIHRvCisgICAgLy8g
YSBmcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbiwgZXNwZWNpYWxseSBiZWNhdXNlIG5vdCBhbGwK
KyAgICAvLyBsaWdodCBzb3VyY2VzIHJlcXVpcmUgYWxsIG9mIHRoZW0uIEluc3RlYWQsIHdlIGp1
c3QgcGFzcworICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlCisg
ICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIC8vIFNWR0ZFTGlnaHRpbmcgYWxzbyB1
c2UgdGhlbQorICAgICAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3I7CisgICAgICAgIEZsb2F0
UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAgICAgICAgLy8gUHJpdmF0ZSBtZW1iZXJzCisgICAgICAg
IEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7CisgICAgICAgIEZsb2F0UG9pbnQzRCBwcml2
YXRlQ29sb3JWZWN0b3I7CisgICAgICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKKyAgICAgICAg
ZmxvYXQgY29uZUZ1bGxMaWdodDsKKyAgICAgICAgaW50IHNwZWN1bGFyRXhwb25lbnQ7CisgICAg
fTsKKworICAgIExpZ2h0U291cmNlKExpZ2h0VHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0
eXBlKQorICAgIHsgfQorCisgICAgdmlydHVhbCB+TGlnaHRTb3VyY2UoKSB7IH0KKworICAgIExp
Z2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKSA9IDA7Cisg
ICAgLy8geiBpcyBhIGZsb2F0IG51bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNj
YWxlZCBieSBhIHVzZXIKKyAgICAvLyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQs
IHdoaWNoIHR5cGUgaXMgPG51bWJlcj4gaW4gdGhlIFNWRyBzdGFuZGFyZAorICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCB6KSA9IDA7CisKK3ByaXZhdGU6CisgICAgTGlnaHRUeXBlIG1fdHlwZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorCisjZW5kaWYgLy8gU1ZHTGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBTVkdMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0xpZ2h0U291
cmNlX2gKKyNpZm5kZWYgTGlnaHRTb3VyY2VfaAorI2RlZmluZSBMaWdodFNvdXJjZV9oCiAKLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03OSw2ICs3OSw2IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHTGlnaHRT
b3VyY2VfaAorI2VuZGlmIC8vIExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24g
Njc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRMaWdodFNv
dXJjZS5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1BvaW50TGlnaHRTb3VyY2VfaAorI2RlZmlu
ZSBTVkdQb2ludExpZ2h0U291cmNlX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUG9pbnRMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFBvaW50TGlnaHRTb3VyY2UocG9zaXRpb24pKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBv
aW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgdmly
dHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IHopOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0
IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQp
CisgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRmxv
YXRQb2ludDNEIG1fcG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR1Bv
aW50TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDExICsyMCwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTVkdQb2ludExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHUG9pbnRM
aWdodFNvdXJjZV9oCisjaWZuZGVmIFBvaW50TGlnaHRTb3VyY2VfaAorI2RlZmluZSBQb2ludExp
Z2h0U291cmNlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1
ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGln
aHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NCw2ICs1NCw2IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYg
Ly8gU1ZHUG9pbnRMaWdodFNvdXJjZV9oCisjZW5kaWYgLy8gUG9pbnRMaWdodFNvdXJjZV9oCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2Vk
cGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1Nwb3RMaWdo
dFNvdXJjZV9oCisjZGVmaW5lIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNv
dXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BvdExpZ2h0U291cmNlPiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwKKyAgICAgICAgY29uc3QgRmxvYXRQ
b2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5n
Q29uZUFuZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcG90TGlnaHRT
b3VyY2UocG9zaXRpb24sIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25l
QW5nbGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKworICAgIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICBmbG9h
dCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25lQW5nbGU7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3BvdExpZ2h0
U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYg
ZGlyZWN0aW9uLAorICAgICAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGlu
Z0NvbmVBbmdsZSkKKyAgICAgICAgOiBMaWdodFNvdXJjZShMU19TUE9UKQorICAgICAgICAsIG1f
cG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAg
ICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQorICAgICAgICAsIG1f
bGltaXRpbmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpCisgICAgeworICAgIH0KKworICAg
IEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX2RpcmVjdGlvbjsK
KworICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBtX2xpbWl0aW5nQ29u
ZUFuZ2xlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdTcG90TGlnaHRTb3VyY2Vf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDExICsy
MCwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBT
VkdTcG90TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdTcG90TGlnaHRTb3VyY2VfaAorI2lmbmRl
ZiBTcG90TGlnaHRTb3VyY2VfaAorI2RlZmluZSBTcG90TGlnaHRTb3VyY2VfaAogCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIK
KyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTY3LDYgKzY3LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisj
ZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdTcG90TGlnaHRTb3VyY2Vf
aAorI2VuZGlmIC8vIFNwb3RMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBA
QAogI2RlZmluZSBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisj
aW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lv
biA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJGRURpZmZ1
c2VMaWdodGluZy5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHRkVEaWZm
dXNlTGlnaHRpbmcuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRf
aAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVE
aXNwbGFjZW1lbnRNYXAuaCIKKyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogI2luY2x1
ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogCiAjaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJEaXN0YW50
TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRmxv
b2RFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVkdGRUZs
b29kRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRUZsb29kLmgiCisjaW5jbHVkZSAiRkVGbG9vZC5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBA
QAogI2RlZmluZSBTVkdGRUxpZ2h0RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAkocmV2
aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFTWVyZ2VFbGVtZW50X2gKIAog
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTWVyZ2Uu
aCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjZGVmaW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisjaW5jbHVkZSAi
RkVNb3JwaG9sb2d5LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjZGVmaW5lIFNWR0ZFT2Zmc2V0
RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRl
ICJGRU9mZnNldC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIgotI2luY2x1ZGUgIlNWR0ZFT2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDggQEAKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQogI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdQ
b2ludExpZ2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNk
ZWZpbmUgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCIKKyNp
bmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcg
KzIxLDggQEAKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUg
IlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5o
IgorCisjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNkZWZpbmUgU1ZHRkVUaWxlRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJGRVRpbGUuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTVkdGRVRpbGUuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rp
c3RhbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0
aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZu
ZGVmIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJj
ZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdM
aWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERpc3RhbnRMaWdo
dFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGlzdGFudExpZ2h0U291cmNlPiBjcmVhdGUoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxl
dmF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXN0YW50TGlnaHRT
b3VyY2UoYXppbXV0aCwgZWxldmF0aW9uKSk7Ci0gICAgfQotCi0gICAgZmxvYXQgYXppbXV0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aDsgfQotICAgIGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZWxldmF0aW9uOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRh
KFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeik7Ci0KLSAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIERpc3RhbnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2
YXRpb24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfRElTVEFOVCkKLSAgICAgICAgLCBtX2F6
aW11dGgoYXppbXV0aCkKLSAgICAgICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCi0gICAgewot
ICAgIH0KLQotICAgIGZsb2F0IG1fYXppbXV0aDsKLSAgICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0
cml4LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVDb252b2x2ZU1hdHJpeC5oIgot
Ci0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBm
bG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUp
Ci0gICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKLSAgICAsIG1fYmlhcyhiaWFzKQotICAgICwgbV90
YXJnZXRPZmZzZXQodGFyZ2V0T2Zmc2V0KQotICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKLSAg
ICAsIG1fa2VybmVsVW5pdExlbmd0aChrZXJuZWxVbml0TGVuZ3RoKQotICAgICwgbV9wcmVzZXJ2
ZUFscGhhKHByZXNlcnZlQWxwaGEpCi0gICAgLCBtX2tlcm5lbE1hdHJpeChrZXJuZWxNYXRyaXgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6
Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFz
LCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVz
ZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQotCi1JbnRTaXplIEZFQ29udm9sdmVNYXRy
aXg6Omtlcm5lbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFNpemU7Ci19Ci0K
LXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsU2l6ZShJbnRTaXplIGtlcm5lbFNpemUp
Ci17Ci0gICAgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgCi19Ci0KLWNvbnN0IFZlY3Rvcjxm
bG9hdD4mIEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
a2VybmVsTWF0cml4OyAKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKQotewotICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVs
OyAKLX0KLQotZmxvYXQgRkVDb252b2x2ZU1hdHJpeDo6ZGl2aXNvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGl2aXNvcjsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNv
cihmbG9hdCBkaXZpc29yKQotewotICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7IAotfQotCi1mbG9h
dCBGRUNvbnZvbHZlTWF0cml4OjpiaWFzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iaWFzOyAK
LX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKGZsb2F0IGJpYXMpCi17Ci0gICAg
bV9iaWFzID0gYmlhczsgCi19Ci0KLUludFBvaW50IEZFQ29udm9sdmVNYXRyaXg6OnRhcmdldE9m
ZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyAKLX0KLQotdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQgdGFyZ2V0T2Zmc2V0KQot
ewotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OyAKLX0KLQotRWRnZU1vZGVUeXBl
IEZFQ29udm9sdmVNYXRyaXg6OmVkZ2VNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lZGdl
TW9kZTsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUoRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgCi19Ci0KLUZsb2F0
UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExlbmd0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
c2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgpCi17Ci0gICAg
bV9rZXJuZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsgCi19Ci0KLWJvb2wgRkVDb252
b2x2ZU1hdHJpeDo6cHJlc2VydmVBbHBoYSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJlc2Vy
dmVBbHBoYTsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShi
b29sIHByZXNlcnZlQWxwaGEpCi17Ci0gICAgbV9wcmVzZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBo
YTsgCi19Ci0KLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhl
IGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8
ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAg
ICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQg
fAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3
aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVk
Z2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdp
ZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTog
d2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBm
b2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4
OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgot
Ci0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBO
b3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBj
b3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRo
ZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEg
PD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTog
MCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHky
OiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAg
UmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4
MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSBy
ZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50
ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQg
ZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRl
clBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxl
IHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4K
LSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFy
ZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0
d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0g
ICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJl
bmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJz
dGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JB
VmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCi17Ci0gICAgaWYg
KGNoYW5uZWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4
KQotICAgICAgICByZXR1cm4gbWF4OwotICAgIHJldHVybiBjaGFubmVsOwotfQotCi10ZW1wbGF0
ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGlu
YXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4ZWwsIGZsb2F0KiB0
b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVsQXJyYXkqIHNyYykK
LXsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1
NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaW1hZ2UtPnNldChwaXhlbCsrLCBjbGFt
cFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKLQotICAg
IGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGltYWdlLT5zZXQocGl4ZWwsIHNy
Yy0+Z2V0KHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGlt
YWdlLT5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0vLyBPbmx5IGZvciByZWdpb24gQwot
dGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pCi17Ci0gICAgLy8gZWRnZSBt
b2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJn
ZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAq
IDQ7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWwgPSAwOwotICAgIGludCBrZXJuZWxJbmNyZWFz
ZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lk
dGgoKSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25l
bnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07
Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgZm9yIChpbnQg
eSA9IGNsaXBCb3R0b20gKyAxOyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBj
bGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUg
PSBtX2tlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
ID0gc3RhcnRLZXJuZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6
ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90
YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAo
IXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQot
ICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0
b3RhbHNbMF0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwrKykpOwotICAg
ICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQ
aXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxw
aGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBtX2tlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXktPmdldChrZXJuZWxQaXhlbCkpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7
Ci0gICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0t
d2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVh
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5h
dGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkpOwotICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0Owot
ICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJu
ZWxQaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUNv
bnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRo
ICYmIHggPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgcmV0dXJuICh5
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAobV9lZGdlTW9k
ZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAgICAg
ICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCi0g
ICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkgPCAw
KQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRh
LmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAgICAg
ICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNlIEVE
R0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0gcGFp
bnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAg
ICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0Owot
ICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCi0vLyBGb3Igb3RoZXIgcmVn
aW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLXZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCi17Ci0gICAgaW50IHBpeGVsID0g
KHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKLSAgICBpbnQgaGVpZ2h0ID0geTIg
LSB5MTsKLSAgICBpbnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5lbFBpeGVs
WCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWCA9
IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWSA9IHkxIC0gbV90
YXJnZXRPZmZzZXQueSgpOwotICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRo
IC0gd2lkdGgpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25l
bnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07
Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgZm9yIChpbnQg
eSA9IGhlaWdodDsgeSA+IDA7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHgg
PiAwOyAtLXgpIHsKLSAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1fa2VybmVsTWF0cml4
LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQ
aXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7
Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVz
KQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChr
ZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQ
aXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAg
ICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzBdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZs
b2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVs
SW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBtX2tlcm5lbE1h
dHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXktPmdldChwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQot
ICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQo
cGl4ZWxJbmRleCArIDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAgICAg
ICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsK
LSAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAg
IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhh
VmFsdWVzPihwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZp
c29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkpOwotICAg
ICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCAr
PSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhl
bFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKQotewotICAgIC8v
IE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlT
X0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJj
ZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0
SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20p
OwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPGZhbHNlPihwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRo
aXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVk
IGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50
ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBp
eGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5
Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShm
aWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0
IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0KLSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxB
cnJheT4gc3JjUGl4ZWxBcnJheTsKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBz
cmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKLSAgICBlbHNlCi0gICAgICAgIHNyY1BpeGVs
QXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZl
Y3REcmF3aW5nUmVjdCktPmRhdGEoKTsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBwYWludGluZ0RhdGEud2lkdGgg
PSBpbWFnZVJlY3Qud2lkdGgoKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0
LmhlaWdodCgpOwotICAgIHBhaW50aW5nRGF0YS5iaWFzID0gbV9iaWFzICogMjU1OwotCi0gICAg
Ly8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBpbWFn
ZVJlY3Qud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9t
ID0gaW1hZ2VSZWN0LmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYg
KGNsaXBSaWdodCA+PSAwICYmIGNsaXBCb3R0b20gPj0gMCkgewotICAgICAgICBzZXRJbnRlcmlv
clBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAg
Y2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgICAgIGNsaXBCb3R0b20g
Kz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0Lnko
KSA+IDApCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGlt
YWdlUmVjdC53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgICAgICBpZiAoY2xpcEJv
dHRvbSA8IGltYWdlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICAg
ICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1f
dGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgICAgIGlmIChjbGlwUmlnaHQgPCBp
bWFnZVJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlUmVjdC53aWR0aCgpLCBjbGlw
Qm90dG9tKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9w
dGltaXppZWQgZm9yIHNwZWVkCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEZF
Q29udm9sdmVNYXRyaXg6OmR1bXAoKQotewotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQotewotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgRURHRU1PREVfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwg
IlVOS05PV04iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToK
LSAgICAgICAgdHMgPDwgIkRVUExJQ0FURSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURH
RU1PREVfV1JBUDoKLSAgICAgICAgdHMgPDwgIldSQVAiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVER0VNT0RFX05PTkU6Ci0gICAgICAgIHRzIDw8ICJOT05FIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJp
eDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlQ29udm9s
dmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7
Ci0gICAgdHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCi0gICAgICAg
PDwgImtlcm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCi0gICAgICAg
PDwgImRpdmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgotICAgICAgIDw8ICJiaWFzPVwi
IiA8PCBtX2JpYXMgPDwgIlwiICIKLSAgICAgICA8PCAidGFyZ2V0PVwiIiA8PCBtX3RhcmdldE9m
ZnNldCA8PCAiXCIgIgotICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAi
XCIgIgotICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5n
dGggPDwgIlwiICIKLSAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFs
cGhhIDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0
cml4LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6
aGVyY3plZ0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAotI2RlZmlu
ZSBTVkdGRUNvbnZvbHZlTWF0cml4X2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvQWx3YXlzSW5saW5lLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWVudW0gRWRnZU1vZGVUeXBlIHsKLSAgICBFREdFTU9ERV9VTktOT1dOICAg
PSAwLAotICAgIEVER0VNT0RFX0RVUExJQ0FURSA9IDEsCi0gICAgRURHRU1PREVfV1JBUCAgICAg
ID0gMiwKLSAgICBFREdFTU9ERV9OT05FICAgICAgPSAzCi19OwotCi1jbGFzcyBDYW52YXNQaXhl
bEFycmF5OwotCi1jbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRl
KGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdDsK
LSAgICB2b2lkIHNldEtlcm5lbFNpemUoSW50U2l6ZSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBrZXJuZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5lbChjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7Ci0KLSAgICBmbG9hdCBkaXZpc29yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXZpc29y
KGZsb2F0KTsKLQotICAgIGZsb2F0IGJpYXMoKSBjb25zdDsKLSAgICB2b2lkIHNldEJpYXMoZmxv
YXQpOwotCi0gICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRU
YXJnZXRPZmZzZXQoSW50UG9pbnQpOwotCi0gICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOwotCi0gICAgRmxvYXRQb2lu
dCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3Ro
KEZsb2F0UG9pbnQpOwotCi0gICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYsIGZsb2F0
LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgc3RydWN0
IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXk7
Ci0gICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdo
dCwgaW50IGNsaXBCb3R0b20pOwotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1
ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVz
ZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1
bmN0aW9ucwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pOwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIEludFNpemUgbV9r
ZXJuZWxTaXplOwotICAgIGZsb2F0IG1fZGl2aXNvcjsKLSAgICBmbG9hdCBtX2JpYXM7Ci0gICAg
SW50UG9pbnQgbV90YXJnZXRPZmZzZXQ7Ci0gICAgRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7Ci0g
ICAgRmxvYXRQb2ludCBtX2tlcm5lbFVuaXRMZW5ndGg7Ci0gICAgYm9vbCBtX3ByZXNlcnZlQWxw
aGE7Ci0gICAgVmVjdG9yPGZsb2F0PiBtX2tlcm5lbE1hdHJpeDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
Ci0jZW5kaWYgLy8gU1ZHRkVDb252b2x2ZU1hdHJpeF9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkocmV2aXNp
b24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCi0KLSNpbmNsdWRlICJT
VkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFRGlmZnVzZUxpZ2h0
aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLAotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExl
bmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkKLXsKLX0KLQotUGFzc1JlZlB0
cjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwKLSAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCi0gICAgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNj
YWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgbGlnaHRTb3VyY2UpKTsKLX0KLQotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdo
dGluZygpCi17Ci19Ci0KLUNvbG9yIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodGluZ0NvbG9yOwotfQotCi12b2lkIEZFRGlmZnVz
ZUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQot
ewotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci19Ci0KLWZsb2F0IEZFRGlm
ZnVzZUxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBjb25zdCAKLXsKLSAgICByZXR1cm4gbV9zdXJm
YWNlU2NhbGU7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShm
bG9hdCBzdXJmYWNlU2NhbGUpCi17Ci0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7
Ci19Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29uc3RhbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsKLX0KLQotdm9pZCBGRURpZmZ1c2VMaWdo
dGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKLXsKLSAgICBt
X2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsKLX0KLQotZmxvYXQgRkVEaWZmdXNl
TGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJu
ZWxVbml0TGVuZ3RoWDsKLX0KLQotdm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0S2VybmVsVW5p
dExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVu
Z3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhYOwotfQotCi1mbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6
a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5n
dGhZOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2Vy
bmVsVW5pdExlbmd0aFk7Ci19Ci0KLWNvbnN0IExpZ2h0U291cmNlKiBGRURpZmZ1c2VMaWdodGlu
Zzo6bGlnaHRTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgp
OwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRy
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLXsgICAgCi0gICAgbV9saWdodFNvdXJjZSA9IGxp
Z2h0U291cmNlOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpkdW1wKCkKLXsKLX0KLQot
VGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCk7Ci0gICAgdHMgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1c
IiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKLSAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50
PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgotICAgICAgIDw8ICJrZXJuZWxVbml0
TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0
TGVuZ3RoWSA8PCAiXCJdXG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAotI2Rl
ZmluZSBTVkdGRURpZmZ1c2VMaWdodGluZ19oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KLWNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVi
bGljIEZFTGlnaHRpbmcgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVz
ZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgIGZs
b2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBDb2xvciBsaWdodGluZ0NvbG9yKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICBmbG9hdCBzdXJmYWNl
U2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7Ci0KLSAgICBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldERpZmZ1c2VDb25zdGFu
dChmbG9hdCk7Ci0KLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwotCi0gICAgZmxvYXQga2VybmVsVW5pdExl
bmd0aFkoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKLQot
ICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotCi0gICAgdmlydHVhbCB2b2lk
IGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVE
aWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
UGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBT
VkdGRURpZmZ1c2VMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1
ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwLmgiCi0KLSNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVEaXNwbGFj
ZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5u
ZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV9zY2FsZShzY2FsZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1h
cD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9h
dCBzY2FsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRGlzcGxhY2VtZW50TWFwKHhD
aGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7Ci19Ci0KLUNoYW5uZWxT
ZWxlY3RvclR5cGUgRkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0b3IoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yKQotewotICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0
b3I7Ci19Ci0KLUNoYW5uZWxTZWxlY3RvclR5cGUgRkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVs
U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3I7Ci19Ci0K
LXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIG1feUNoYW5uZWxTZWxlY3Rv
ciA9IHlDaGFubmVsU2VsZWN0b3I7Ci19Ci0KLWZsb2F0IEZFRGlzcGxhY2VtZW50TWFwOjpzY2Fs
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NhbGU7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQotewotICAgIG1fc2NhbGUgPSBzY2FsZTsKLX0K
LQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4y
ID0gaW5wdXRFZmZlY3QoMSk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaW4yLT5hcHBs
eShmaWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSBD
SEFOTkVMX1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0g
ICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGluLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEo
KSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRJbWFnZURhdGEoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAg
ICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIoaW4yLT5yZXN1bHRJbWFn
ZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgp
KTsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNp
emUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBBU1NFUlQo
c3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1BpeGVsQXJyYXlCLT5sZW5ndGgoKSk7Ci0K
LSAgICBmbG9hdCBzY2FsZVggPSBtX3NjYWxlIC8gMjU1LmYgKiBmaWx0ZXItPmZpbHRlclJlc29s
dXRpb24oKS53aWR0aCgpOwotICAgIGZsb2F0IHNjYWxlWSA9IG1fc2NhbGUgLyAyNTUuZiAqIGZp
bHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOwotICAgIGZsb2F0IHNjYWxlQWRqdXN0
bWVudFggPSAoMC41ZiAtIDAuNWYgKiBtX3NjYWxlKSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCk7Ci0gICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WSA9ICgwLjVmIC0gMC41ZiAq
IG1fc2NhbGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7Ci0gICAgaW50
IHN0cmlkZSA9IGltYWdlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlk
ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7
Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXggPSBsaW5lICsgeCAqIDQ7Ci0gICAgICAgICAgICBp
bnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWCAqIHNyY1BpeGVsQXJyYXlCLT5n
ZXQoZHN0SW5kZXggKyBtX3hDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFgp
OwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVkgKiBz
cmNQaXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV95Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBz
Y2FsZUFkanVzdG1lbnRZKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7
IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3JjWCA8IDAg
fHwgc3JjWCA+PSBpbWFnZVJlY3Qud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IGltYWdl
UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNl
dChkc3RJbmRleCArIGNoYW5uZWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBw
aXhlbFZhbHVlID0gc3JjUGl4ZWxBcnJheUEtPmdldChzcmNZICogc3RyaWRlICsgc3JjWCAqIDQg
KyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChk
c3RJbmRleCArIGNoYW5uZWwsIHBpeGVsVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11
bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkp
OwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpkdW1wKCkKLXsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDSEFOTkVMX1VO
S05PV046Ci0gICAgICAgIHRzIDw8ICJVTktOT1dOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDSEFOTkVMX1I6Ci0gICAgICAgIHRzIDw8ICJSRUQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENIQU5ORUxfRzoKLSAgICAgICAgdHMgPDwgIkdSRUVOIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDSEFOTkVMX0I6Ci0gICAgICAgIHRzIDw8ICJCTFVFIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDSEFOTkVMX0E6Ci0gICAgICAgIHRzIDw8ICJBTFBIQSI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIEZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50
KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVE
aXNwbGFjZW1lbnRNYXAiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7Ci0gICAgdHMgPDwgIiBzY2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgotICAgICAg
IDw8ICJ4Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIK
LSAgICAgICA8PCAieUNoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8
ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IGluZGVudCArIDEpOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRN
YXAuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAotI2RlZmluZSBT
VkdGRURpc3BsYWNlbWVudE1hcF9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gQ2hh
bm5lbFNlbGVjdG9yVHlwZSB7Ci0gICAgQ0hBTk5FTF9VTktOT1dOID0gMCwKLSAgICBDSEFOTkVM
X1IgPSAxLAotICAgIENIQU5ORUxfRyA9IDIsCi0gICAgQ0hBTk5FTF9CID0gMywKLSAgICBDSEFO
TkVMX0EgPSA0Ci19OwotCi1jbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFw
PiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKLQotICAgIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0WENoYW5uZWxTZWxl
Y3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rv
cihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlv
bikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKLQotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVj
dG9yOwotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOwotICAgIGZs
b2F0IG1fc2NhbGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29k
LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLSNpbmNsdWRlICJTVkdGRUZsb29kLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRUZs
b29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCi0g
ICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVG
bG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9v
ZE9wYWNpdHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUZsb29kKGZsb29kQ29sb3Is
IGZsb29kT3BhY2l0eSkpOwotfQotCi1Db2xvciBGRUZsb29kOjpmbG9vZENvbG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9mbG9vZENvbG9yOwotfQotCi12b2lkIEZFRmxvb2Q6OnNldEZsb29k
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fZmxvb2RDb2xvciA9IGNvbG9yOwot
fQotCi1mbG9hdCBGRUZsb29kOjpmbG9vZE9wYWNpdHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X2Zsb29kT3BhY2l0eTsKLX0KLQotdm9pZCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQg
Zmxvb2RPcGFjaXR5KQotewotICAgIG1fZmxvb2RPcGFjaXR5ID0gZmxvb2RPcGFjaXR5OwotfQot
Ci12b2lkIEZFRmxvb2Q6OmFwcGx5KEZpbHRlciopCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFs
cGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOwotICAgIGZpbHRlckNvbnRl
eHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkuc2l6ZSgpKSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOwotfQotCi12b2lk
IEZFRmxvb2Q6OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdy
aXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVGbG9vZCI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIGZsb29kLWNv
bG9yPVwiIiA8PCBmbG9vZENvbG9yKCkubmFtZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImZsb29k
LW9wYWNpdHk9XCIiIDw8IGZsb29kT3BhY2l0eSgpIDw8ICJcIl1cbiI7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVGbG9vZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVGbG9vZC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFRmxvb2RfaAotI2RlZmluZSBTVkdGRUZsb29kX2gKLQot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYs
IGZsb2F0KTsKLQotICAgIENvbG9yIGZsb29kQ29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldEZs
b29kQ29sb3IoY29uc3QgQ29sb3IgJik7Ci0KLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25z
dDsKLSAgICB2b2lkIHNldEZsb29kT3BhY2l0eShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVu
dGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVGbG9vZChjb25zdCBDb2xvciYsIGZsb2F0
KTsKLQotICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKLSAgICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVGbG9vZF9oCkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKLQotI2luY2x1ZGUgIkNh
bnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJTVkdM
aWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFTGlnaHRpbmc6OkZFTGln
aHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsCi0gICAgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2xpZ2h0
aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKGxpZ2h0U291cmNlKQot
ICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCi0gICAgLCBtX3N1cmZhY2VTY2Fs
ZShzdXJmYWNlU2NhbGUpCi0gICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQp
Ci0gICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFudCkKLSAgICAsIG1fc3Bl
Y3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQotICAgICwgbV9rZXJuZWxVbml0TGVuZ3Ro
WChrZXJuZWxVbml0TGVuZ3RoWCkKLSAgICAsIG1fa2VybmVsVW5pdExlbmd0aFkoa2VybmVsVW5p
dExlbmd0aFkpCi17Ci19Ci0KLWNvbnN0IHN0YXRpYyBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1jb25z
dCBzdGF0aWMgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOwotY29uc3Qgc3RhdGljIHVuc2ln
bmVkIGNoYXIgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhmZik7
Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBMZWZ0UGl4
ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zm
c2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OnVwUGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6dXBSaWdodFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0UGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpjZW50ZXJQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRQaXhlbFZhbHVlKCkK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25MZWZ0UGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1B
TFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25QaXhlbFZhbHVl
KCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQot
QUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duUmlnaHRQaXhl
bFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwKLSAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9y
bWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpCi17Ci0gICAgbV9saWdodFNvdXJjZS0+
dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSwgbGlnaHRYLCBsaWdodFksIHN0YXRpY19j
YXN0PGZsb2F0PihkYXRhLnBpeGVscy0+Z2V0KGRhdGEub2Zmc2V0ICsgMykpICogZGF0YS5zdXJm
YWNlU2NhbGUpOwotCi0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbFgpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotICAgIGRhdGEubm9y
bWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxZKSAqIGRh
dGEuc3VyZmFjZVNjYWxlKTsKLSAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRaKDEuMGYpOwotICAg
IGRhdGEubm9ybWFsVmVjdG9yLm5vcm1hbGl6ZSgpOwotCi0gICAgaWYgKG1fbGlnaHRpbmdUeXBl
ID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgZGF0YS5saWdodFN0cmVu
Z3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAoZGF0YS5ub3JtYWxWZWN0b3IgKiBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IpOwotICAgIGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndh
eVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvcjsKLSAgICAgICAgaGFsZndheVZlY3Rv
ci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsgMS4wZik7Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iu
bm9ybWFsaXplKCk7Ci0gICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKLSAg
ICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIChkYXRh
Lm5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGRhdGEubm9y
bWFsVmVjdG9yICogaGFsZndheVZlY3RvciwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICB9Ci0K
LSAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoID4gMS4wZikKLSAgICAgICAgZGF0YS5saWdodFN0
cmVuZ3RoID0gMS4wZjsKLSAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoIDwgMC4wZikKLSAgICAg
ICAgZGF0YS5saWdodFN0cmVuZ3RoID0gMC4wZjsKLQotICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0
YS5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAq
IHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KCkpKTsKLSAgICBkYXRhLnBpeGVscy0+c2V0KGRh
dGEub2Zmc2V0ICsgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVu
Z3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSkpOwotICAgIGRhdGEucGl4ZWxzLT5z
ZXQoZGF0YS5vZmZzZXQgKyAyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0
U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueigpKSk7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6ZHJhd0xpZ2h0aW5nKENhbnZhc1BpeGVsQXJyYXkqIHBpeGVscywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQotewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhOwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgaWYgKCFtX2xpZ2h0U291cmNlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdp
ZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBk
b2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0g
ICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGRhdGEucGl4ZWxzID0gcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9z
dXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3
aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0g
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKG1fbGlnaHRpbmdDb2xv
ci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5ibHVlKCkp
OwotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEocGFpbnRpbmdEYXRhKTsKLQot
ICAgIC8vIFRvcC9MZWZ0IGNvcm5lcgotICAgIGRhdGEub2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhl
bChkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLTIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0
YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAg
IC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEucmlnaHRQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQ
aXhlbFZhbHVlKCkpOwotCi0gICAgLy8gVG9wL1JpZ2h0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQg
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQ
aXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgMCwKLSAg
ICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRv
d25QaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEubGVmdFBpeGVsVmFs
dWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZh
bHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKLQotICAgIC8vIEJvdHRvbS9MZWZ0
IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWludGlu
Z0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0gICAgICAgIC0yLjBmIC8gMy4w
ZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICog
ZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSwKLSAg
ICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmln
aHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLnJpZ2h0
UGl4ZWxWYWx1ZSgpKTsKLQotICAgIC8vIEJvdHRvbS9SaWdodCBwaXhlbAotICAgIGRhdGEub2Zm
c2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emU7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0gICAgICAgIC0yLjBmIC8gMy4wZiwg
LWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRh
LmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCksCi0gICAgICAg
IC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhl
bFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZh
bHVlKCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9wIGxpbmUKLSAg
ICAgICAgZGF0YS5vZmZzZXQgPSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsg
eCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxT
aXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsCi0g
ICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSAr
IDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4w
ZiwgLWRhdGEubGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAt
IGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAq
IGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBCb3R0b20gbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1
ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8g
Mi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkg
LSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICog
ZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGxp
bmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7
ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkgewot
ICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LAotICAgICAgICAg
ICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQ
aXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4
ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLTIgKiBkYXRhLnVwUGl4
ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVs
VmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBSaWdodCBsaW5lCi0gICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxT
aXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkg
ewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmUsIHksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cExl
ZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0yICogZGF0YS5sZWZ0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVs
VmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAtMS4wZiAv
IDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgp
ICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzCi0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5
IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5KSB7Ci0gICAgICAgICAgICBkYXRhLm9m
ZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsK
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
OyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgICAgICBzZXRQ
aXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgIC0xLjBm
IC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1
ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1
ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1
ZSgpLAotICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQuMGYsIC1kYXRhLnVwTGVmdFBpeGVs
VmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1
ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVl
KCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpbnQgdG90YWxTaXplID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0
aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAzOyBpIDwgdG90YWxTaXplOyBpICs9IDQpCi0g
ICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBhMSA9IGRhdGEucGl4ZWxzLT5nZXQoaSk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGEyID0gZGF0YS5waXhlbHMtPmdldChpICsgMSk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGEzID0gZGF0YS5waXhlbHMtPmdldChpICsgMik7Ci0gICAgICAg
ICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAg
ZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6
IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVy
KTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUlt
YWdlKGZhbHNlKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCkt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOwotICAgIENhbnZh
c1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOwotCi0gICAg
Ly8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhl
IGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBj
YXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFu
Z2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFt
IG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1h
dHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCi0KLSAgICBpZiAoZHJhd0xp
Z2h0aW5nKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCksIGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpKSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXN1
bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAkocmV2aXNpb24g
Njc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6
ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBTVkdGRUxpZ2h0aW5nX2gKLSNkZWZpbmUgU1ZHRkVMaWdodGlu
Z19oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgot
Ci0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3Vs
YXJMaWdodGluZwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhbnZhc1BpeGVsQXJy
YXk7Ci0KLWNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0KLXByb3RlY3RlZDoKLSAgICBlbnVt
IExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgU3BlY3Vs
YXJMaWdodGluZwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAg
RmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKLSAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4
ZWxzOwotICAgICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgICAgICBmbG9hdCBzdXJmYWNl
U2NhbGU7Ci0gICAgICAgIGludCBvZmZzZXQ7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGlu
dCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cExl
ZnRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwUGl4ZWxWYWx1ZSgp
OwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cFJpZ2h0UGl4ZWxWYWx1ZSgpOwotICAgICAg
ICBBTFdBWVNfSU5MSU5FIGludCBsZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIGludCBjZW50ZXJQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHJp
Z2h0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duTGVmdFBpeGVs
VmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93blBpeGVsVmFsdWUoKTsKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93blJpZ2h0UGl4ZWxWYWx1ZSgpOwotICAgIH07Ci0K
LSAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Ci0K
LSAgICBib29sIGRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiwgaW50LCBpbnQpOwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQaXhlbChMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiwKLSAgICAgICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFj
dG9yWCwgaW50IG5vcm1hbFgsIGZsb2F0IGZhY3RvclksIGludCBub3JtYWxZKTsKLQotICAgIExp
Z2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWZQdHI8TGlnaHRTb3VyY2U+IG1fbGln
aHRTb3VyY2U7Ci0KLSAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7Ci0gICAgZmxvYXQgbV9zdXJm
YWNlU2NhbGU7Ci0gICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7Ci0gICAgZmxvYXQgbV9zcGVj
dWxhckNvbnN0YW50OwotICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKLSAgICBmbG9hdCBt
X2tlcm5lbFVuaXRMZW5ndGhYOwotICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZF
TWVyZ2UuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFTWVyZ2U6OkZFTWVyZ2UoKSAKLSAgICA6
IEZpbHRlckVmZmVjdCgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3Jl
YXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFTWVyZ2UpOwotfQotCi12b2lkIEZF
TWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1i
ZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAgICAgICBpZiAo
IWluLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAo
IWZpbHRlckNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KGkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3Vs
dEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVN
ZXJnZTo6ZHVtcCgpCi17Ci19Ci0KLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJ
bmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZU1lcmdlIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1i
ZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBt
ZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAkocmV2aXNp
b24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBTVkdGRU1lcmdlX2gKLSNkZWZpbmUgU1ZHRkVNZXJnZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFTWVyZ2UoKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
Ci0jZW5kaWYgLy8gU1ZHRkVNZXJnZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTW9y
cGhvbG9neS5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi11c2luZyBzdGQ6Om1pbjsKLXVzaW5nIHN0ZDo6bWF4OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdCgp
Ci0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQotICAgICwgbV9y
YWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1vcnBob2xvZ3ko
dHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwotfQotCi1Nb3JwaG9sb2d5T3BlcmF0b3JUeXBlIEZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
eXBlOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQotCi1mbG9h
dCBGRU1vcnBob2xvZ3k6OnJhZGl1c1goKSBjb25zdAotewotICAgIHJldHVybiBtX3JhZGl1c1g7
Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpCi17Ci0g
ICAgbV9yYWRpdXNYID0gcmFkaXVzWDsKLX0KLQotZmxvYXQgRkVNb3JwaG9sb2d5OjpyYWRpdXNZ
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yYWRpdXNZOwotfQotCi12b2lkIEZFTW9ycGhvbG9n
eTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQotewotICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7
Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7
Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFlZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFn
ZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgaW50IHJhZGl1c1ggPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fcmFkaXVzWCAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCkpOwotICAg
IGludCByYWRpdXNZID0gc3RhdGljX2Nhc3Q8aW50PihtX3JhZGl1c1kgKiBmaWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgaWYgKHJhZGl1c1ggPD0gMCB8fCByYWRpdXNZ
IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFy
cmF5KGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERy
YXdpbmdSZWN0KS0+ZGF0YSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
LQotICAgIGludCBlZmZlY3RXaWR0aCA9IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiA0Owot
ICAgIAotICAgIC8vIExpbWl0IHRoZSByYWRpdXMgc2l6ZSB0byBlZmZlY3QgZGltZW5zaW9ucwot
ICAgIHJhZGl1c1ggPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1c1gp
OwotICAgIHJhZGl1c1kgPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRp
dXNZKTsKLSAgICAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZXh0cmVtYTsKLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAg
ICAgaW50IHN0YXJ0WSA9IG1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCBlbmRZID0g
bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgeSArIHJhZGl1c1kpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0g
ICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwKLSAgICAgICAgICAgIGV4dHJlbWEuY2xlYXIo
KTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHJhZGl1c1g7ICsraikgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sdW1uRXh0cmVtYSA9IHNyY1BpeGVsQXJyYXkt
PmdldChzdGFydFkgKiBlZmZlY3RXaWR0aCArIDQgKiBqICsgY2hhbm5lbCk7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0WTsgaSA8PSBlbmRZOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbCA9IHNyY1BpeGVsQXJyYXktPmdldChpICogZWZm
ZWN0V2lkdGggKyA0ICogaiArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKG1f
dHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYgcGl4ZWwgPD0gY29sdW1uRXh0
cmVtYSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZ
X09QRVJBVE9SX0RJTEFURSAmJiBwaXhlbCA+PSBjb2x1bW5FeHRyZW1hKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbkV4dHJlbWEgPSBwaXhlbDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBl
eHRyZW1hIG9mIG5leHQgY29sdW1uIAotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBl
ZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBlbmRYID0gbWluKHggKyByYWRpdXNYLCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxB
cnJheS0+Z2V0KHN0YXJ0WSAqIGVmZmVjdFdpZHRoICsgZW5kWCAqIDQgKyBjaGFubmVsKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnRZOyBpIDw9IGVuZFk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsID0gc3JjUGl4ZWxBcnJheS0+Z2V0
KGkgKiBlZmZlY3RXaWR0aCArIGVuZFggKiA0ICsgY2hhbm5lbCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAmJiBwaXhlbCA8
PSBjb2x1bW5FeHRyZW1hKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKG1fdHlwZSA9PSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIHBpeGVsID49IGNvbHVtbkV4dHJlbWEpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRXh0cmVtYSA9IHBpeGVsOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCAtIHJhZGl1c1ggPj0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBy
YWRpdXNYIDw9IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAg
IGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbWEpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFbMF07Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrZXJuZWxJbmRleCA9IDA7IGtlcm5lbEluZGV4IDwgZXh0cmVtYS5zaXplKCk7ICsr
a2VybmVsSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFICYmIGV4dHJlbWFba2VybmVsSW5kZXhdIDw9IGVudGlyZUV4
dHJlbWEpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEUgJiYgZXh0cmVtYVtrZXJuZWxJbmRleF0gPj0gZW50aXJlRXh0cmVt
YSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmVFeHRyZW1hID0gZXh0cmVtYVtrZXJu
ZWxJbmRleF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+
ZGF0YSgpLT5zZXQoeSAqIGVmZmVjdFdpZHRoICsgNCAqIHggKyBjaGFubmVsLCBlbnRpcmVFeHRy
ZW1hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXN1bHRJbWFnZSgp
LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJ
bnRQb2ludCgpKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmR1bXAoKQotewotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgotICAg
ICAgICB0cyA8PCAiRVJPREUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU6Ci0gICAgICAgIHRzIDw8ICJESUxBVEUiOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0
Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZU1vcnBob2xv
Z3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAg
dHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKLSAg
ICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwg
IlwiXVxuIjsgICAgCi0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmgJKHJldmlz
aW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xv
Z3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBTVkdGRU1vcnBob2xvZ3lfaAotI2RlZmluZSBTVkdGRU1vcnBob2xvZ3lfaAotCi0j
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9X
TiA9IDAsCi0gICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKLSAgICBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgotfTsKLQotY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVi
bGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNb3Jw
aG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxv
YXQgcmFkaXVzWSk7ICAKLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVy
YXRvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUpOwotCi0gICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
UmFkaXVzWChmbG9hdCk7Ci0KLSAgICBmbG9hdCByYWRpdXNZKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRSYWRpdXNZKGZsb2F0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSk7Ci0gICAgCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBt
X3R5cGU7Ci0gICAgZmxvYXQgbV9yYWRpdXNYOwotICAgIGZsb2F0IG1fcmFkaXVzWTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVNb3JwaG9sb2d5X2gKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA2NzkzNSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZH
RkVPZmZzZXQuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFT2Zmc2V0OjpGRU9mZnNldChmbG9h
dCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9keChkeCkKLSAg
ICAsIG1fZHkoZHkpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVh
dGUoZmxvYXQgZHgsIGZsb2F0IGR5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVPZmZz
ZXQoZHgsIGR5KSk7Ci19Ci0KLWZsb2F0IEZFT2Zmc2V0OjpkeCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZHg7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQotewotICAgIG1f
ZHggPSBkeDsKLX0KLQotZmxvYXQgRkVPZmZzZXQ6OmR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9keTsKLX0KLQotdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCi17Ci0gICAgbV9keSA9
IGR5OwotfQotCi12b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7
Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICgh
ZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0ID0gZmls
dGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBzb3VyY2VJbWFnZVJlY3Quc2NhbGUoZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwotCi0gICAgaWYgKGZpbHRlci0+ZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkpIHsK
LSAgICAgICAgbV9keCAqPSBzb3VyY2VJbWFnZVJlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9keSAq
PSBzb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCk7Ci0gICAgfQotICAgIG1fZHggKj0gZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKLSAgICBtX2R5ICo9IGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLmhlaWdodCgpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBGbG9hdFJlY3Qo
bV9keCArIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZHkgKyBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS53aWR0aCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpLmhlaWdodCgpKTsKLQotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7Ci19
Ci0KLXZvaWQgRkVPZmZzZXQ6OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRU9mZnNldDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
LXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlT2Zmc2V0Ijsg
Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8
PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4iOwotICAg
IGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVPZmZzZXRfaAotI2RlZmlu
ZSBTVkdGRU9mZnNldF9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFT2Zmc2V0PiBjcmVhdGUoZmxvYXQgZHgsIGZs
b2F0IGR5KTsKLQotICAgIGZsb2F0IGR4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7
Ci0KLSAgICBmbG9hdCBkeSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RHkoZmxvYXQpOwotCi0gICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0K
LSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFT2Zmc2V0KGZsb2F0
IGR4LCBmbG9hdCBkeSk7Ci0KLSAgICBmbG9hdCBtX2R4OwotICAgIGZsb2F0IG1fZHk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFT2Zmc2V0X2gKSW5kZXg6IFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgiCi0KLSNp
bmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFU3Bl
Y3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCi0gICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCi0gICAgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQot
ICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwKLSAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsCi0gICAgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdo
dGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1
bGFyRXhwb25lbnQsCi0gICAgICAgIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgbGlnaHRTb3VyY2UpKTsKLX0KLQotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxp
Z2h0aW5nKCkKLXsKLX0KLQotQ29sb3IgRkVTcGVjdWxhckxpZ2h0aW5nOjpsaWdodGluZ0NvbG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodGluZ0NvbG9yOwotfQotCi12b2lkIEZFU3Bl
Y3VsYXJMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
cikKLXsKLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotfQotCi1mbG9hdCBG
RVNwZWN1bGFyTGlnaHRpbmc6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c3VyZmFjZVNjYWxlOwotfQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3VyZmFjZVNj
YWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKLXsKLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VT
Y2FsZTsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OwotfQotCi12b2lkIEZFU3Bl
Y3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50
KQotewotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci19Ci0KLWZs
b2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6
OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBtX3Nw
ZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotfQotCi1mbG9hdCBGRVNwZWN1bGFy
TGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJu
ZWxVbml0TGVuZ3RoWDsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQotewotICAgIG1fa2VybmVsVW5pdExl
bmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5n
OjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5pdExl
bmd0aFk7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3Ro
WShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0g
a2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLWNvbnN0IExpZ2h0U291cmNlKiBGRVNwZWN1bGFyTGln
aHRpbmc6OmxpZ2h0U291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodFNvdXJjZS5n
ZXQoKTsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NS
ZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotewotICAgIG1fbGlnaHRTb3VyY2UgPSBs
aWdodFNvdXJjZTsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OmR1bXAoKQotewotfQot
Ci1UZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7Ci0gICAgdHMgPDwgIltmZVNwZWN1bGFyTGlnaHRpbmciOwotICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBzdXJmYWNlU2Nh
bGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCi0gICAgICAgPDwgInNwZWN1YWxDb25z
dGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8ICJcIiAiCi0gICAgICAgPDwgInNwZWN1
bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oCShyZXZpc2lvbiA2Nzkz
NSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKLSNkZWZpbmUgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNW
R0ZFTGlnaHRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRVNwZWN1bGFy
TGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsCi0gICAgICAgIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+
KTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmcoKTsKLQotICAgIENvbG9yIGxpZ2h0
aW5nQ29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3Im
KTsKLQotICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3VyZmFj
ZVNjYWxlKGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Ci0K
LSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVs
VW5pdExlbmd0aFgoZmxvYXQpOwotCi0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFkoKSBjb25z
dDsKLSAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKLQotICAgIGNvbnN0IExp
Z2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TGlnaHRTb3VyY2Uo
UGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQot
ICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNz
UmVmUHRyPExpZ2h0U291cmNlPik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZF
U3BlY3VsYXJMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRVRpbGUuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVRpbGUuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRVRpbGU6
OkZFVGlsZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotewotfQotCi1QYXNzUmVmUHRyPEZFVGls
ZT4gRkVUaWxlOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUaWxlKTsK
LX0KLQotRmxvYXRSZWN0IEZFVGlsZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KEZpbHRlciogZmlsdGVyKQotewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKLQotICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkpOwotICAgIHJl
dHVybiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLX0KLQotdm9pZCBGRVRpbGU6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBl
ZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEludFJl
Y3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKLQotICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4g
SXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQotICAgIC8v
IHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhl
IHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KLSAgICBpZiAoaW4tPmlzU291cmNlSW5w
dXQoKSkgewotICAgICAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKTsKLSAgICAgICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAg
ICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlZ2lvbik7Ci0gICAgfQot
Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRpbGVSZWN0LnNpemUoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0
ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsK
LSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2Ut
PmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7
Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsKLSAgICBwYXR0ZXJuLmdldCgpLT5zZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0obWF0cml4KTsKLQotICAgIGZpbHRlckNvbnRleHQtPnNldEZp
bGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgpKSk7
Ci19Ci0KLXZvaWQgRkVUaWxlOjpkdW1wKCkKLXsKLX0KLQotVGV4dFN0cmVhbSYgRkVUaWxlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAot
ewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVUaWxlIjsKLSAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICJd
XG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRl
bnQgKyAxKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaAkocmV2aXNpb24gNjc5MzUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFVGlsZV9oCi0j
ZGVmaW5lIFNWR0ZFVGlsZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUaWxlPiBjcmVhdGUoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwot
Ci0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqKTsKLSAgICAKLXByaXZhdGU6Ci0g
ICAgRkVUaWxlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFVGlsZV9oCklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2Uu
Y3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzODYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5m
LnUtc3plZ2VkLmh1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2UuaCIKLQotI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEg
LSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5k
QW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0g
MjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wu
IDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGht
IHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0
aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGlj
IGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFu
ZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRp
YyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQg
c19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1
cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi0gICAg
OiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX2Jhc2VGcmVxdWVu
Y3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5
WSkKLSAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3RhdmVzKQotICAgICwgbV9zZWVkKHNlZWQpCi0g
ICAgLCBtX3N0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQotewotfQotCi1QYXNzUmVmUHRyPEZFVHVy
YnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZF
VHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2
ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLVR1cmJ1bGFuY2VUeXBlIEZFVHVyYnVsZW5j
ZTo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHlwZTsKLX0KLQotdm9pZCBGRVR1cmJ1
bGVuY2U6OnNldFR5cGUoVHVyYnVsYW5jZVR5cGUgdHlwZSkKLXsKLSAgICBtX3R5cGUgPSB0eXBl
OwotfQotCi1mbG9hdCBGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJh
c2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotewotICAgIG1fYmFzZUZyZXF1ZW5j
eVkgPSBiYXNlRnJlcXVlbmN5WTsKLX0KLQotZmxvYXQgRkVUdXJidWxlbmNlOjpiYXNlRnJlcXVl
bmN5WCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVg7Ci19Ci0KLXZvaWQg
RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKLXsK
LSAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci19Ci0KLWZsb2F0IEZF
VHVyYnVsZW5jZTo6c2VlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2VlZDsgCi19Ci0KLXZv
aWQgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCi17Ci0gICAgbV9zZWVkID0gc2Vl
ZDsKLX0KLQotaW50IEZFVHVyYnVsZW5jZTo6bnVtT2N0YXZlcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbnVtT2N0YXZlczsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMo
Ym9vbCBudW1PY3RhdmVzKQotewotICAgIG1fbnVtT2N0YXZlcyA9IG51bU9jdGF2ZXM7Ci19Ci0K
LWJvb2wgRkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c3RpdGNoVGlsZXM7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29s
IHN0aXRjaCkKLXsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNoOwotfQotCi0vLyBUaGUgdHVy
YnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFw
cGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKLQotRkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OlBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYg
cGFpbnRpbmdTaXplKQotICAgIDogc2VlZChwYWludGluZ1NlZWQpCi0gICAgLCB3aWR0aCgwKQot
ICAgICwgaGVpZ2h0KDApCi0gICAgLCB3cmFwWCgwKQotICAgICwgd3JhcFkoMCkKLSAgICAsIGNo
YW5uZWwoMCkKLSAgICAsIGZpbHRlclNpemUocGFpbnRpbmdTaXplKQotewotfQotCi0vLyBDb21w
dXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUg
KiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYg
KHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVk
ID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhD
dXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOwotfQotCi1p
bmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBi
KQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFVHVy
YnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIGZs
b2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0
byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAgICBpZiAocGFpbnRpbmdEYXRh
LnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5z
ZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlmIChwYWludGluZ0RhdGEuc2Vl
ZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHNfcmFu
ZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50OwotICAgIGZvciAoaW50IGNoYW5u
ZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5n
cmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBz
X2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXpl
KSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRp
b25GYWN0b3IgPSBzcXJ0ZihncmFkaWVudFswXSAqIGdyYWRpZW50WzBdICsgZ3JhZGllbnRbMV0g
KiBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9u
RmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBpID0gc19ibG9ja1NpemUgLSAxOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltp
XTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsK
LSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tT
aXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2Nr
U2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3Nf
YmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAg
ICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0g
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5s
aW5lIHZvaWQgY2hlY2tOb2lzZShpbnQmIG5vaXNlVmFsdWUsIGludCBsaW1pdFZhbHVlLCBpbnQg
bmV3VmFsdWUpCi17Ci0gICAgaWYgKG5vaXNlVmFsdWUgPj0gbGltaXRWYWx1ZSkKLSAgICAgICAg
bm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZTsKLSAgICBpZiAobm9pc2VWYWx1ZSA+PSBsaW1pdFZhbHVl
IC0gMSkKLSAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZSAtIDE7Ci19Ci0KLWZsb2F0IEZF
VHVyYnVsZW5jZTo6bm9pc2UyRChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxv
YXRQb2ludCYgbm9pc2VWZWN0b3IpCi17Ci0gICAgc3RydWN0IE5vaXNlIHsKLSAgICAgICAgaW50
IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0gICAgICAgIGZsb2F0IG5vaXNlUG9zaXRpb25G
cmFjdGlvblZhbHVlOwotCi0gICAgICAgIE5vaXNlKGZsb2F0IGNvbXBvbmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNl
OwotICAgICAgICAgICAgbm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb24pOwotICAgICAgICAgICAgbm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSBw
b3NpdGlvbiAtIG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgTm9pc2Ugbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2Ugbm9pc2VZKG5v
aXNlVmVjdG9yLnkoKSk7Ci0gICAgZmxvYXQqIHE7Ci0gICAgZmxvYXQgc3gsIHN5LCBhLCBiLCB1
LCB2OwotCi0gICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3Jk
aW5nbHkuCi0gICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgY2hlY2tOb2lzZShub2lz
ZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSwgcGFpbnRpbmdEYXRhLndyYXBYLCBwYWludGlu
Z0RhdGEud2lkdGgpOwotICAgICAgICBjaGVja05vaXNlKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50
ZWdlclZhbHVlLCBwYWludGluZ0RhdGEud3JhcFksIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotICAg
IH0KLQotICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNr
OwotICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOwot
ICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107Ci0KLSAgICBzeCA9IHNtb290aEN1cnZlKG5vaXNl
WC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7Ci0gICAgc3kgPSBzbW9vdGhDdXJ2ZShub2lz
ZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOwotCi0gICAgLy8gVGhpcyBpcyB0YWtlbiAx
OjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1s
I2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi0gICAgaW50IHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
XTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0
ZW1wXTsKLSAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07Ci0gICAgdGVtcCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3Bh
aW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKLSAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAqIHFbMV07Ci0gICAgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotICAg
IHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5n
cmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Ci0gICAgdSA9IG5vaXNlWC5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFj
dGlvblZhbHVlIC0gMSkgKiBxWzFdOwotICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZSArIDFdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5u
ZWxdW3RlbXBdOwotICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsx
XTsKLSAgICBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0gICAgcmV0dXJuIGxp
bmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwotfQotCi11bnNpZ25lZCBjaGFyIEZFVHVyYnVs
ZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGZsb2F0IHRpbGVXaWR0
aCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLndpZHRoKCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDApOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5o
ZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZUhlaWdodCA+IDApOwotICAgIC8vIEFkanVzdCB0aGUg
YmFzZSBmcmVxdWVuY2llcyBpZiBuZWNlc3NhcnkgZm9yIHN0aXRjaGluZy4KLSAgICBpZiAobV9z
dGl0Y2hUaWxlcykgewotICAgICAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgICAgICAvLyBzbyB0aGF0IHRo
ZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgotICAgICAgICBpZiAobV9iYXNlRnJl
cXVlbmN5WCkgewotICAgICAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVX
aWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQg
aGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOwotICAgICAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0
aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgICAgICBpZiAobV9iYXNlRnJl
cXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lY
KQotICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVx
dWVuY3k7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAg
ICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJl
cXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9
IGNlaWxmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAg
ICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVu
Y3kgLyBtX2Jhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkg
PSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9iYXNl
RnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2V0IHVw
IFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2YWx1ZXMuCi0gICAgICAgIHBhaW50aW5nRGF0YS53
aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBtX2Jhc2VGcmVxdWVuY3lYKTsKLSAgICAgICAgcGFp
bnRpbmdEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJl
cXVlbmN5WSk7Ci0gICAgICAgIHBhaW50aW5nRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBw
YWludGluZ0RhdGEuaGVpZ2h0OwotICAgIH0KLSAgICBmbG9hdCB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgPSAwOwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNl
RnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0
aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsg
KytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFD
VEFMTk9JU0UpCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2Uy
RChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gZmFic2Yobm9pc2UyRChwYWludGlu
Z0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsKLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChu
b2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rv
ci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLSAgICAgICAgaWYgKG1fc3RpdGNoVGls
ZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBz
X3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotICAgICAgICAg
ICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9u
Y2UuCi0gICAgICAgICAgICBwYWludGluZ0RhdGEud2lkdGggKj0gMjsKLSAgICAgICAgICAgIHBh
aW50aW5nRGF0YS53cmFwWCA9IDIgKiBwYWludGluZ0RhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNl
OwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAgcGFp
bnRpbmdEYXRhLndyYXBZID0gMiAqIHBhaW50aW5nRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsg
MjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVO
Q0VfVFlQRV9GUkFDVEFMTk9JU0UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotICAgIC8vIENsYW1wIHJl
c3VsdAotICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHN0ZDo6bWF4KHN0ZDo6bWluKHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMS5mKSwgMC5mKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KTsKLX0KLQot
dm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIGlmICghZWZm
ZWN0Q29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIGlmICghaW1hZ2VSZWN0LnNp
emUoKS53aWR0aCgpIHx8ICFpbWFnZVJlY3Quc2l6ZSgpLmhlaWdodCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0
ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBQYWludGluZ0Rh
dGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgaW1hZ2VSZWN0LnNpemUoKSk7Ci0gICAgaW5pdFBhaW50
KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5m
aWx0ZXJSZWdpb24oKTsKLSAgICBGbG9hdFBvaW50IHBvaW50OwotICAgIHBvaW50LnNldFkoZmls
dGVyUmVnaW9uLnkoKSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSAwOwotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgcG9p
bnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24u
eCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4
KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAg
Zm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsg
KytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVsKQotICAgICAgICAg
ICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBwb2ludCkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgRkVUdXJi
dWxlbmNlOjpkdW1wKCkKLXsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFR1cmJ1bGFuY2VUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgdHMg
PDwgIlVOS05PV04iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBF
X1RVUkJVTEVOQ0U6Ci0gICAgICAgIHRzIDw8ICJUVVJCVUxBTkNFIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0U6Ci0gICAgICAgIHRzIDw8
ICJOT0lTRSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRl
eHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsK
LSAgICB0cyA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIg
IgotICAgICAgIDw8ICJiYXNlRnJlcXVlbmN5PVwiIiA8PCBiYXNlRnJlcXVlbmN5WCgpIDw8ICIs
ICIgPDwgYmFzZUZyZXF1ZW5jeVkoKSA8PCAiXCIgIgotICAgICAgIDw8ICJzZWVkPVwiIiA8PCBz
ZWVkKCkgPDwgIlwiICIKLSAgICAgICA8PCAibnVtT2N0YXZlcz1cIiIgPDwgbnVtT2N0YXZlcygp
IDw8ICJcIiAiCi0gICAgICAgPDwgInN0aXRjaFRpbGVzPVwiIiA8PCBzdGl0Y2hUaWxlcygpIDw8
ICJcIl1cbiI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gNjc5
MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgU1ZHRkVUdXJidWxlbmNlX2gKLSNkZWZpbmUgU1ZHRkVUdXJidWxlbmNlX2gKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gVHVyYnVs
YW5jZVR5cGUgewotICAgIEZFVFVSQlVMRU5DRV9UWVBFX1VOS05PV04gPSAwLAotICAgIEZFVFVS
QlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSA9IDEsCi0gICAgRkVUVVJCVUxFTkNFX1RZUEVfVFVS
QlVMRU5DRSA9IDIKLX07Ci0KLWNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFVHVyYnVsZW5jZT4gY3JlYXRl
KFR1cmJ1bGFuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwotCi0gICAg
VHVyYnVsYW5jZVR5cGUgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShUdXJidWxhbmNl
VHlwZSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
QmFzZUZyZXF1ZW5jeVkoZmxvYXQpOwotCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgoKSBjb25z
dDsKLSAgICB2b2lkIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsKLQotICAgIGZsb2F0IHNlZWQo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNlZWQoZmxvYXQpOwotCi0gICAgaW50IG51bU9jdGF2ZXMo
KSBjb25zdDsKLSAgICB2b2lkIHNldE51bU9jdGF2ZXMoYm9vbCk7Ci0KLSAgICBib29sIHN0aXRj
aFRpbGVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0g
ICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
LCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgaW50
IHNfYmxvY2tTaXplID0gMjU2OwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBz
X2Jsb2NrU2l6ZSAtIDE7Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgbG9u
ZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJd
OwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAg
ICAgICAgaW50IHdpZHRoOyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0
Y2hpbmcuCi0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCB3cmFwWDsgLy8gTWluaW11
bSB2YWx1ZSB0byB3cmFwLgotICAgICAgICBpbnQgd3JhcFk7Ci0gICAgICAgIGludCBjaGFubmVs
OwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0KLSAgICAgICAgUGFpbnRpbmdEYXRhKGxv
bmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOwotICAgICAgICBp
bmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgRkVUdXJidWxlbmNlKFR1cmJ1bGFu
Y2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwotCi0gICAgaW5saW5lIHZv
aWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIGZsb2F0IG5vaXNlMkQoUGFpbnRpbmdE
YXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOwot
Ci0gICAgVHVyYnVsYW5jZVR5cGUgbV90eXBlOwotICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7
Ci0gICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WTsKLSAgICBpbnQgbV9udW1PY3RhdmVzOwotICAg
IGZsb2F0IG1fc2VlZDsKLSAgICBib29sIG1fc3RpdGNoVGlsZXM7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
LQotI2VuZGlmIC8vIFNWR0ZFVHVyYnVsZW5jZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IlNWR0xpZ2h0U291cmNlLmgiCi0KLSNpbmNsdWRlICJTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCIK
LSNpbmNsdWRlICJTVkdQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBQb2ludExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpCi17Ci19Ci0KLXZvaWQgUG9p
bnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopCi17Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
ci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
Lm5vcm1hbGl6ZSgpOwotfQotCi0vLyBzcG90LWxpZ2h0IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMg
b24gYW4gYWJzb2x1dGUgdHJlc2hvbGQKLS8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBs
aWdodCByZWdyZXNzaW9uIHRlc3RzCi1zdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hv
bGQgPSAwLjAxNmY7Ci0KLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIHBhaW50aW5nRGF0YS5wcml2YXRlQ29s
b3JWZWN0b3IgPSBwYWludGluZ0RhdGEuY29sb3JWZWN0b3I7Ci0gICAgcGFpbnRpbmdEYXRhLmRp
cmVjdGlvblZlY3Rvci5zZXRYKG1fZGlyZWN0aW9uLngoKSAtIG1fcG9zaXRpb24ueCgpKTsKLSAg
ICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFkobV9kaXJlY3Rpb24ueSgpIC0gbV9w
b3NpdGlvbi55KCkpOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WihtX2Rp
cmVjdGlvbi56KCkgLSBtX3Bvc2l0aW9uLnooKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgewot
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKLSAgICAgICAgcGFp
bnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xl
OwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQotICAgICAgICAgICAgbGlt
aXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAgIGlmIChsaW1pdGlu
Z0NvbmVBbmdsZSA+IDkwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4w
ZjsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgx
ODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKLSAgICB9Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9u
ZW50IHZhbHVlcwotICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQotICAgICAgICBwYWludGlu
Z0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7Ci0gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9u
ZW50ID09IDEuMGYpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsK
LSAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgotICAgICAgICBwYWludGlu
Z0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7Ci19Ci0KLXZvaWQgU3BvdExpZ2h0U291cmNlOjp1
cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQg
eSwgZmxvYXQgeikKLXsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0
aW9uLngoKSAtIHgpOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRp
b24ueSgpIC0geSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlv
bi56KCkgLSB6KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7Ci0K
LSAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yICogcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcjsKLSAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVj
ZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9y
VmVjdG9yLnNldFgoMC4wZik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZ
KDAuMGYpOwotICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WigwLjBmKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgY29sb3Igb2YgdGhlIHBpeGVs
Ci0gICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50KSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4w
ZjsgLy8gLWNvc2luZU9mQW5nbGUgXiAwID09IDEKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAx
OgotICAgICAgICBsaWdodFN0cmVuZ3RoID0gLWNvc2luZU9mQW5nbGU7IC8vIC1jb3NpbmVPZkFu
Z2xlIF4gMSA9PSAtY29zaW5lT2ZBbmdsZQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gcG93ZigtY29zaW5lT2ZBbmdsZSwgbV9zcGVjdWxhckV4
cG9uZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGNvc2luZU9mQW5nbGUg
PiBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCAqPSAo
cGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGNvc2luZU9mQW5nbGUpIC8gKHBhaW50aW5n
RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCk7Ci0KLSAg
ICBpZiAobGlnaHRTdHJlbmd0aCA+IDEuMGYpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBm
OwotCi0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgocGFpbnRpbmdEYXRhLnByaXZh
dGVDb2xvclZlY3Rvci54KCkgKiBsaWdodFN0cmVuZ3RoKTsKLSAgICBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3Iuc2V0WShwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnkoKSAqIGxpZ2h0
U3RyZW5ndGgpOwotICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRaKHBhaW50aW5nRGF0
YS5wcml2YXRlQ29sb3JWZWN0b3IueigpICogbGlnaHRTdHJlbmd0aCk7Ci19Ci0KLXZvaWQgRGlz
dGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKQotewotICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7Ci0gICAgZmxv
YXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7Ci0gICAgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnNldFgoY29zZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7Ci0gICAgcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9u
KSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFooc2luZihlbGV2YXRpb24pKTsK
LX0KLQotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGlu
Z0RhdGEmLCBpbnQsIGludCwgZmxvYXQpCi17Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgdHMg
PDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIFBvaW50TGlnaHRTb3VyY2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIlt0eXBl
PVBPSU5ULUxJR0hUXSAiOwotICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0aW9uKCkg
PDwgIlwiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBTcG90TGlnaHRTb3Vy
Y2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAg
dHMgPDwgIlt0eXBlPVNQT1QtTElHSFRdICI7Ci0gICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwg
cG9zaXRpb24oKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAiW2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0
aW9uKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBzcGVj
dWxhckV4cG9uZW50KCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltsaW1pdGluZ0NvbmVBbmdsZT1c
IiIgPDwgbGltaXRpbmdDb25lQW5nbGUoKSA8PCAiXCJdIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LVRleHRTdHJlYW0mIERpc3RhbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9RElTVEFOVC1MSUdIVF0g
IjsKLSAgICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IGF6aW11dGgoKSA8PCAiXCJdIjsKLSAgICB0
cyA8PCAiW2VsZXZhdGlvbj1cIiIgPDwgZWxldmF0aW9uKCkgPDwgIlwiXSI7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0xpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRw
ZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHTGlnaHRT
b3VyY2VfaAotI2RlZmluZSBTVkdMaWdodFNvdXJjZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotZW51bSBMaWdodFR5cGUgewotICAgIExTX0RJU1RBTlQsCi0gICAgTFNfUE9J
TlQsCi0gICAgTFNfU1BPVAotfTsKLQotY2xhc3MgVGV4dFN0cmVhbTsKLQotY2xhc3MgTGlnaHRT
b3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNvdXJjZT4gewotcHVibGljOgotCi0gICAg
Ly8gTGlnaHQgdmVjdG9ycyBtdXN0IGJlIGNhbGN1bGF0ZWQgZm9yIGV2ZXJ5IHBpeGVsIGR1cmlu
ZwotICAgIC8vIHBhaW50aW5nLiBJdCBpcyBleHBlbnNpdmUgdG8gcGFzcyBhbGwgdGhlc2UgYXJn
dW1lbnRzIHRvCi0gICAgLy8gYSBmcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbiwgZXNwZWNpYWxs
eSBiZWNhdXNlIG5vdCBhbGwKLSAgICAvLyBsaWdodCBzb3VyY2VzIHJlcXVpcmUgYWxsIG9mIHRo
ZW0uIEluc3RlYWQsIHdlIGp1c3QgcGFzcwotICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBmb2xs
b3dpbmcgc3RydWN0dXJlCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIC8vIFNW
R0ZFTGlnaHRpbmcgYWxzbyB1c2UgdGhlbQotICAgICAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0
b3I7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKLSAgICAgICAgLy8gUHJpdmF0
ZSBtZW1iZXJzCi0gICAgICAgIEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7Ci0gICAgICAgIGZsb2F0IGNvbmVDdXRP
ZmZMaW1pdDsKLSAgICAgICAgZmxvYXQgY29uZUZ1bGxMaWdodDsKLSAgICAgICAgaW50IHNwZWN1
bGFyRXhwb25lbnQ7Ci0gICAgfTsKLQotICAgIExpZ2h0U291cmNlKExpZ2h0VHlwZSB0eXBlKQot
ICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsgfQotCi0gICAgdmlydHVhbCB+TGlnaHRTb3Vy
Y2UoKSB7IH0KLQotICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWlu
dGluZ0RhdGEmKSA9IDA7Ci0gICAgLy8geiBpcyBhIGZsb2F0IG51bWJlciwgc2luY2UgaXQgaXMg
dGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKLSAgICAvLyBzcGVjaWZpZWQgInN1cmZh
Y2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51bWJlcj4gaW4gdGhlIFNWRyBzdGFu
ZGFyZAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwg
aW50IHgsIGludCB5LCBmbG9hdCB6KSA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgTGlnaHRUeXBlIG1f
dHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHTGlnaHRTb3VyY2VfaApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291
cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdQb2ludExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdQb2ludExpZ2h0U291cmNlX2gK
LSNkZWZpbmUgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFBvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50TGlnaHRTb3VyY2U+IGNyZWF0ZShj
b25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQb2ludExpZ2h0U291cmNlKHBvc2l0aW9uKSk7Ci0gICAgfQotCi0gICAgY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5
LCBmbG9hdCB6KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUG9pbnRMaWdodFNvdXJj
ZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQotICAgICAgICA6IExpZ2h0U291cmNlKExT
X1BPSU5UKQotICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCi0gICAgewotICAgIH0KLQot
ICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAv
LyBTVkdQb2ludExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHU3BvdExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgU1ZHU3BvdExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHU3BvdExpZ2h0U291cmNlX2gKLQot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291
cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU3BvdExpZ2h0U291cmNlIDog
cHVibGljIExpZ2h0U291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcG90
TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLAotICAgICAg
ICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNwb3RMaWdodFNvdXJjZShwb3NpdGlvbiwgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50
LCBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQ
b2ludDNEJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotCi0gICAg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVu
dDsgfQotICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9saW1p
dGluZ0NvbmVBbmdsZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFp
bnRpbmdEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3Qg
RmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sCi0gICAgICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAgICA6IExpZ2h0U291cmNlKExTX1NQT1Qp
Ci0gICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCi0gICAgICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQp
Ci0gICAgICAgICwgbV9saW1pdGluZ0NvbmVBbmdsZShsaW1pdGluZ0NvbmVBbmdsZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNE
IG1fZGlyZWN0aW9uOwotCi0gICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0
IG1fbGltaXRpbmdDb25lQW5nbGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR1Nw
b3RMaWdodFNvdXJjZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68222</attachid>
            <date>2010-09-21 05:22:59 -0700</date>
            <delta_ts>2010-09-21 05:42:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46177-20100921142254.patch</filename>
            <type>text/plain</type>
            <size>308931</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMTAtMDktMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IEZpbHRlckVmZmVjdHMgaW5kZXBlbmRlbnQgb2YgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE3NworCisgICAgICAgIE1vdmluZyBhbGwgRmls
dGVyRWZmZWN0cyBmcm9tIHN2Zy9ncmFwaGljcy9maWx0ZXJzIHRvIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMsIG5vdyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIFNWRy4g
UmVtb3ZlZCB0aGUgU1ZHIHByZWZpeCBvZiB0aGUgZmlsZXMgYW5kIHVwZGF0ZWQgdGhlIGhlYWRl
cnMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRM
aWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlzcGxhY2VtZW50TWFwLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDogQ29waWVkIGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJp
eC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVy
YnVsZW5jZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0xpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorCiAyMDEwLTA5LTIx
ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9BbmRy
b2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNyArNTAzLDE4IEBAIExPQ0FMX1NSQ19GSUxF
UyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAg
XAogCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgXAot
CXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisJcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBc
CisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBcCisJcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgXAor
CXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBcCisJcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxF
UyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXApAQCAtOTU2LDIwICs5NjcsOSBAQCBMT0NBTF9TUkNf
RklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlcCiAJc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcCBcCiAJXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3Bw
IFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAgXAotCXN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCi0Jc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAgXAogCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcCBcCi0Jc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVPZmZzZXQuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmcuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwK
LQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwIFwKIAlzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3Bw
CisJc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIGVuZGlmCiAKIExP
Q0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXApJbmRleDogV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biA2NzkzNSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEy
NTcsOSArMTI1NywyMSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJG
aWx0ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKIApAQCAtMTgxMiwyMSArMTgy
NCw5IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29u
dGFpbmVyLmNwcAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAogICAg
ICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpc3BsYWNlbWVudE1hcC5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVGbG9vZC5jcHAKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAK
LSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAKLSAgICAgICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU9mZnNldC5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUu
Y3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAKICAg
ICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAogICAgICAgICBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAKICAgICApCiBFTkRJRigpCiAKSW5kZXg6IFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDg1LDYgKzIwODUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmggXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgXApAQCAtMjA5MywxNyArMjA5NCw0
MyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpZmZ1c2VMaWdodGluZy5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggXAorCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9JbWFnZUJ1ZmZlckZpbHRlci5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9JbWFnZUJ1ZmZlckZpbHRlci5oIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQzRC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXApAQCAt
Mjg1NiwzOSArMjg4MywxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3ZnL0Nv
bG9yRGlzdGFuY2UuaCBcCiAJV2ViQ29yZS9zdmcvRWxlbWVudFRpbWVDb250cm9sLmggXAogCVdl
YkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUZsb29kLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmggXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAg
XAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIFwKLQlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwIFwKLQlXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1lcmdlLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1lcmdlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9s
b2d5LmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3ku
aCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAgXAotCVdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaCBcCi0JV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIFwKLQlXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oIFwKLQlXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUaWxlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1
cmJ1bGVuY2UuaCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmggXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCiAJV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBcCi0JV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdQb2ludExpZ2h0U291cmNlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHU3BvdExpZ2h0U291cmNlLmggXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCBcCiAJV2ViQ29yZS9zdmcvTGlu
ZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY3OTM1KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIzNTMsNiArMjM1Myw3IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcCcsCkBAIC0yMzYxLDggKzIzNjIsMzQgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdo
dFNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U3BvdExpZ2h0U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCcsCkBAIC0zNzcyLDM5ICszNzk5LDEyIEBACiAgICAgICAgICAgICAnc3Zn
L2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oJywKICAgICAgICAgICAgICdzdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0
YW50TGlnaHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVDb252b2x2ZU1hdHJpeC5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFQ29udm9sdmVNYXRyaXguaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgnLAotICAgICAgICAgICAgJ3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TGlnaHRpbmcuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxp
Z2h0aW5nLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2Uu
Y3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmgnLAot
ICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAnLAot
ICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oJywKLSAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAnLAotICAgICAg
ICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgnLAotICAgICAgICAgICAg
J3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAnLAotICAgICAg
ICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oJywKLSAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwJywKLSAgICAgICAg
ICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaCcsCi0gICAgICAgICAgICAnc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcCcsCi0gICAgICAgICAgICAnc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgnLAogICAgICAgICAgICAgJ3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdMaWdodFNvdXJjZS5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0xpZ2h0U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R1BvaW50TGlnaHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHU3BvdExpZ2h0U291cmNlLmgnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oJywKICAgICAgICAg
ICAgICdzdmcvQ29sb3JEaXN0YW5jZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2NzkzNSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE5ODEsOCArMTk4MSwyMCBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBc
CkBAIC0yMjc0LDIxICsyMjg2LDkgQEAgSEVBREVSUyArPSBcCiAgICAgc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmggXAogICAgIHN2
Zy9Db2xvckRpc3RhbmNlLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9s
dmVNYXRyaXguaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCBc
Ci0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oIFwKICAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TGlnaHRpbmcuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oIFwKLSAg
ICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaCBcCi0gICAgc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGls
ZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaCBcCiAgICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIFwKICAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGln
aHRTb3VyY2UuaCBcCiAgICAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmggXAogICAgIHN2Zy9TVkdB
RWxlbWVudC5oIFwKICAgICBzdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmggXApAQCAtMzEwNiw4ICsz
MTA2LDIwIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxURVJTPTEpIHsKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBcCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIFwKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiB9CkBA
IC0zMzc2LDIxICszMzg4LDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAg
ICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVN
YXRyaXguY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGln
aHRpbmcuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1l
bnRNYXAuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAg
XAogICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBcCi0gICAgICAg
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwIFwKLSAgICAgICAgc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGls
ZS5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3Bw
IFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIFwKLSAgICAgICAgc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY5MDcsNiAr
MjY5MDcsMTAgQEAKIAkJCQkJTmFtZT0iZmlsdGVycyINCiAJCQkJCT4NCiAJCQkJCTxGaWxlDQor
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXERpc3RhbnRM
aWdodFNvdXJjZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFQmxlbmQuY3Bw
Ig0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0yNjkzOSw2ICsyNjk0MywzOCBAQAogCQkJ
CQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVDb252b2x2ZU1hdHJpeC5jcHAiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVDb252b2x2ZU1hdHJpeC5oIg0KKwkJCQkJCT4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xmaWx0ZXJzXEZFRGlmZnVzZUxpZ2h0aW5nLmNwcCINCisJCQkJCQk+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZmlsdGVyc1xGRURpZmZ1c2VMaWdodGluZy5oIg0KKwkJCQkJCT4NCisJCQkJCTwv
RmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xmaWx0ZXJzXEZFRGlzcGxhY2VtZW50TWFwLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0Zp
bGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZmlsdGVyc1xGRURpc3BsYWNlbWVudE1hcC5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4N
CisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXEZFRmxvb2QuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxl
DQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFRmxv
b2QuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUdhdXNzaWFuQmx1ci5jcHAi
DQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KQEAgLTI2OTQ3LDYgKzI2OTgzLDYyIEBACiAJCQkJ
CQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUxpZ2h0aW5nLmNwcCINCisJCQkJCQk+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZmlsdGVyc1xGRUxpZ2h0aW5nLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcRkVNZXJnZS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUN
CisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVNZXJn
ZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTW9ycGhvbG9neS5jcHAiDQor
CQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVNb3JwaG9sb2d5LmgiDQorCQkJCQkJPg0K
KwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVPZmZzZXQuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmls
ZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xmaWx0ZXJzXEZFT2Zmc2V0LmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZp
bGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVT
cGVjdWxhckxpZ2h0aW5nLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8Rmls
ZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVNw
ZWN1bGFyTGlnaHRpbmcuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0K
KwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVRpbGUu
Y3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFVGlsZS5oIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFVHVyYnVsZW5jZS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJ
PC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGZpbHRlcnNcRkVUdXJidWxlbmNlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcRmlsdGVyLmgiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KQEAgLTI2OTY3LDYgKzI3
MDU5LDE4IEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xMaWdodFNvdXJjZS5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcTGlnaHRTb3VyY2UuaCINCisJCQkJCQk+
DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xQb2ludExpZ2h0U291cmNlLmgiDQorCQkJCQkJPg0KKwkJ
CQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGZpbHRlcnNcU291cmNlQWxwaGEuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmls
ZT4NCkBAIC0yNjk4Miw2ICsyNzA4NiwxMCBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFNvdXJjZUdyYXBoaWMuaCINCiAJCQkJCQk+DQogCQkJCQk8
L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZmlsdGVyc1xTcG90TGlnaHRTb3VyY2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+
DQogCQkJCTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJCTxGaWx0ZXINCkBAIC0yNzQ0OSw2
ICsyNzU1Nyw3IEBACiAJCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KIAkJCQkJCQkv
Pg0KIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorDQogCQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQogCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQogCQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KQEAgLTQzMzE0LDYgKzQzNDIzLDcgQEAKIAkJCQkJCU5hbWU9IkRl
YnVnX0ludGVybmFsfFdpbjMyIg0KIAkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KIAkJ
CQkJCT4NCisNCiAJCQkJCQk8VG9vbA0KIAkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0K
IAkJCQkJCS8+DQpAQCAtNTExNDMsNDIgKzUxMjUzLDYgQEAKIAkJCQkJTmFtZT0iZmlsdGVycyIN
CiAJCQkJCT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhp
Y3NcZmlsdGVyc1xTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0Zp
bGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZp
bHRlcnNcU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0K
LQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJz
XFNWR0ZFQ29udm9sdmVNYXRyaXguaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8
RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVE
aWZmdXNlTGlnaHRpbmcuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRURpZmZ1
c2VMaWdodGluZy5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFRGlzcGxhY2VtZW50TWFw
LmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFRmxvb2QuY3BwIg0KLQkJCQkJCT4N
Ci0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdc
Z3JhcGhpY3NcZmlsdGVyc1xTVkdGRUZsb29kLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0K
LQkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJz
XFNWR0ZFSW1hZ2UuY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC01MTE4Nyw2MiAr
NTEyNjEsNiBAQAogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFTGlnaHRpbmcuY3BwIg0K
LQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUxpZ2h0aW5nLmgiDQotCQkJCQkJPg0KLQkJ
CQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFw
aGljc1xmaWx0ZXJzXFNWR0ZFTWVyZ2UuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0J
CQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xT
VkdGRU1lcmdlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFTW9ycGhvbG9neS5j
cHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFTW9ycGhvbG9neS5oIg0KLQkJCQkJ
CT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU9mZnNldC5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9G
aWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xm
aWx0ZXJzXFNWR0ZFT2Zmc2V0LmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZp
bGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUN
Ci0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFU3BlY3Vs
YXJMaWdodGluZy5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVRpbGUuY3BwIg0K
LQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVRpbGUuaCINCi0JCQkJCQk+DQotCQkJCQk8
L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNz
XGZpbHRlcnNcU1ZHRkVUdXJidWxlbmNlLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHRkVUdXJidWxlbmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUN
CiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZpbHRlci5j
cHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KQEAgLTUxMjU4LDIyICs1MTI3Niw2IEBACiAJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZpbHRlckJ1aWxk
ZXIuaCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHTGlnaHRTb3VyY2UuY3BwIg0KLQkJ
CQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdMaWdodFNvdXJjZS5oIg0KLQkJCQkJCT4NCi0JCQkJ
CTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhp
Y3NcZmlsdGVyc1xTVkdQb2ludExpZ2h0U291cmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxl
Pg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0
ZXJzXFNWR1Nwb3RMaWdodFNvdXJjZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCiAJCQkJ
PC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5o
CShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdE
aXN0YW50TGlnaHRTb3VyY2UuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVu
Z3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0Rpc3RhbnRMaWdo
dFNvdXJjZV9oCisjZGVmaW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpc3RhbnRMaWdodFNvdXJjZSA6IHB1YmxpYyBM
aWdodFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzdGFudExpZ2h0
U291cmNlPiBjcmVhdGUoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0aW9uKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aCwgZWxl
dmF0aW9uKSk7CisgICAgfQorCisgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXppbXV0aDsgfQorICAgIGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxldmF0
aW9uOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeik7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIERpc3Rh
bnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCisgICAgICAgIDog
TGlnaHRTb3VyY2UoTFNfRElTVEFOVCkKKyAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkKKyAg
ICAgICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCisgICAgeworICAgIH0KKworICAgIGZsb2F0
IG1fYXppbXV0aDsKKyAgICBmbG9hdCBtX2VsZXZhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisj
ZW5kaWYgLy8gU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgJKHJldmlz
aW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTEgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRGlzdGFudExpZ2h0U291
cmNlX2gKLSNkZWZpbmUgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKKyNpZm5kZWYgRGlzdGFudExp
Z2h0U291cmNlX2gKKyNkZWZpbmUgRGlzdGFudExpZ2h0U291cmNlX2gKIAotI2lmIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaWYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01Nyw2ICs1Nyw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRGlzdGFudExpZ2h0U291cmNlX2gK
KyNlbmRpZiAvLyBEaXN0YW50TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNp
b24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2
ZU1hdHJpeC5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisKKyNp
bmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVDb252b2x2ZU1hdHJp
eDo6RkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAorICAgIGZsb2F0
IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSwKKyAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
KyAgICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKKyAg
ICAsIG1fZGl2aXNvcihkaXZpc29yKQorICAgICwgbV9iaWFzKGJpYXMpCisgICAgLCBtX3Rhcmdl
dE9mZnNldCh0YXJnZXRPZmZzZXQpCisgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQorICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoKGtlcm5lbFVuaXRMZW5ndGgpCisgICAgLCBtX3ByZXNlcnZlQWxw
aGEocHJlc2VydmVBbHBoYSkKKyAgICAsIG1fa2VybmVsTWF0cml4KGtlcm5lbE1hdHJpeCkKK3sK
K30KKworUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVh
dGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKKyAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBi
aWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUs
CisgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFs
cGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRh
cmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgICAgIHByZXNlcnZl
QWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQorCisKK0ludFNpemUgRkVDb252b2x2ZU1hdHJpeDo6
a2VybmVsU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsU2l6ZTsKK30KKwordm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKEludFNpemUga2VybmVsU2l6ZSkKK3sK
KyAgICBtX2tlcm5lbFNpemUgPSBrZXJuZWxTaXplOyAKK30KKworY29uc3QgVmVjdG9yPGZsb2F0
PiYgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJu
ZWxNYXRyaXg7IAorfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbChjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiBrZXJuZWwpCit7CisgICAgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IAor
fQorCitmbG9hdCBGRUNvbnZvbHZlTWF0cml4OjpkaXZpc29yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9kaXZpc29yOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZs
b2F0IGRpdmlzb3IpCit7CisgICAgbV9kaXZpc29yID0gZGl2aXNvcjsgCit9CisKK2Zsb2F0IEZF
Q29udm9sdmVNYXRyaXg6OmJpYXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpYXM7IAorfQor
Cit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMoZmxvYXQgYmlhcykKK3sKKyAgICBtX2Jp
YXMgPSBiaWFzOyAKK30KKworSW50UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6dGFyZ2V0T2Zmc2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQ7IAorfQorCit2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldChJbnRQb2ludCB0YXJnZXRPZmZzZXQpCit7Cisg
ICAgbV90YXJnZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7IAorfQorCitFZGdlTW9kZVR5cGUgRkVD
b252b2x2ZU1hdHJpeDo6ZWRnZU1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2VkZ2VNb2Rl
OyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCit7CisgICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyAKK30KKworRmxvYXRQb2lu
dCBGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9rZXJuZWxVbml0TGVuZ3RoOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRL
ZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQga2VybmVsVW5pdExlbmd0aCkKK3sKKyAgICBtX2tl
cm5lbFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyAKK30KKworYm9vbCBGRUNvbnZvbHZl
TWF0cml4OjpwcmVzZXJ2ZUFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVzZXJ2ZUFs
cGhhOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wg
cHJlc2VydmVBbHBoYSkKK3sKKyAgICBtX3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyAK
K30KKworLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBD
b252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9s
bG93aW5nIHdheToKKworICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAg
ICAgICAgQSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAg
fCAgIHwgICAgICAgICAgICAgfCAgIHwKKyAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Cisg
ICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworCisgICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3Nl
IHZhbHVlcworICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBv
ZiB0aGUgcmVjdGFuZ2xlLgorCisgICBFeGFtcGxlOgorICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6
IDEwLCBoZWlnaHQ6IDEwCisKKyAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0
aDogMywgaGVpZ2h0IDQKKyAgICAgIFRhcmdldDogeDoxLCB5OjMKKworICAgICAgVGhlIGZvbGxv
d2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6CisK
KyAgICAgICAgLi4uCisgICAgICAgIC4uLgorICAgICAgICAuLi4KKyAgICAgICAgLlguCisKKyAg
IFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKKyAgICAgIE5vdGU6
ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5l
cgorICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJl
Z2lvbgorICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4
IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgorCisgICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4
MjogMTAsIHkyOiAzCisgICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEw
CisgICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCisgICAgICBSZWdp
b24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAorICAgICAgUmVnaW9uIEU6IHgxOiAw
LCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCisKKyAgIFNpbmNlIHJlZ2lv
biBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAor
ICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0
U2V0SW50ZXJpb3JQaXhlbHMuCisgICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4
ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCisgICB0byBoYW5kbGUgcGl4
ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgorICAg
a2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNh
bGN1bGF0ZWQgYnkgdGhpcworICAgZnVuY3Rpb24uCisKKyAgIEFsdGhvdWdoIHRoZXNlIHR3byBm
dW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKKyAgIGNv
bW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2Vz
IGFzIHdlbGwsCisgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5k
LgorKi8KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1
ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK3sKKyAgICBpZiAoY2hh
bm5lbCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCisg
ICAgICAgIHJldHVybiBtYXg7CisgICAgcmV0dXJuIGNoYW5uZWw7Cit9CisKK3RlbXBsYXRlPGJv
b2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KK0FMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlv
blBpeGVscyhDYW52YXNQaXhlbEFycmF5KiBpbWFnZSwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFs
cywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgQ2FudmFzUGl4ZWxBcnJheSogc3JjKQorewor
ICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDog
Y2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpbWFnZS0+c2V0KHBpeGVsKyssIGNsYW1wUkdC
QVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworCisgICAgaWYg
KHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKKyAgICAgICAgaW1hZ2UtPnNldChwaXhlbCwgc3JjLT5n
ZXQocGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVsc2UKKyAgICAgICAgaW1hZ2Ut
PnNldChwaXhlbCsrLCBtYXhBbHBoYSk7Cit9CisKKy8vIE9ubHkgZm9yIHJlZ2lvbiBDCit0ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CitBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSkKK3sKKyAgICAvLyBlZGdlIG1vZGUg
ZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscworICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9m
ZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsK
KyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbCA9IDA7CisgICAgaW50IGtlcm5lbEluY3JlYXNlID0g
Y2xpcFJpZ2h0ICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgp
IC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMK
KyAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKwor
ICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQg
ZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKG1fZGl2aXNvcik7CisKKyAgICBmb3IgKGludCB5ID0g
Y2xpcEJvdHRvbSArIDE7IHkgPiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBS
aWdodCArIDE7IHggPiAwOyAtLXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1f
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBz
dGFydEtlcm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndp
ZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIGlmICghcHJl
c2VydmVBbHBoYVZhbHVlcykKKyAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIHRvdGFs
c1swXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7CisgICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVs
KyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5n
ZXQoa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IG1fa2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS0+Z2V0KGtlcm5lbFBpeGVsKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKKyAg
ICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13aWR0
aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsK
KyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9u
UGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSk7CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAg
ICAgIH0KKyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBp
eGVsICs9IHhJbmNyZWFzZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFQ29udm9s
dmVNYXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
LCBpbnQgeSkKK3sKKyAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYg
eCA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICByZXR1cm4gKHkgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworCisgICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7
CisgICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAg
Y2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAg
IHggPSAwOworICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAg
ICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisg
ICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVp
Z2h0KQorICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICBy
ZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1P
REVfV1JBUDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGlu
Z0RhdGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3
aGlsZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAg
ICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25z
IHRoYW4gQwordGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgordm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEg
KiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkx
OworICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0g
eDEgLSBtX3RhcmdldE9mZnNldC54KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVn
aW5LZXJuZWxQaXhlbFg7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3Rhcmdl
dE9mZnNldC55KCk7CisgICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3
aWR0aCkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMK
KyAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKwor
ICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQg
ZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKG1fZGl2aXNvcik7CisKKyAgICBmb3IgKGludCB5ID0g
aGVpZ2h0OyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7
IC0teCkgeworICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gbV9rZXJuZWxNYXRyaXguc2l6
ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVs
WDsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsKKyAg
ICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAgICAg
ICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAgICAg
IHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisg
ICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5l
bFZhbHVlID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVs
VmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7CisgICAgICAg
ICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICB0b3Rh
bHNbMF0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCkpOworICAgICAgICAg
ICAgICAgICAgICB0b3RhbHNbMV0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRl
eCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS0+Z2V0KHBpeGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhl
bEluZGV4ICsgMykpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOworICAgICAgICAg
ICAgICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAg
ICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKKyAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1
ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7CisgICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
KyAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pCit7CisgICAgLy8gTXVz
dCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5M
SU5FCisgICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZp
bGUgYXMgd2VsbAorICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIGZhc3RTZXRJbnRl
cmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Cisg
ICAgZWxzZQorICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisgICAgLy8gQWx0aG91Z2ggdGhpcyBm
dW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8gdGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVy
ZQorICAgIC8vIGJlY2F1c2Ugc2V0SW50ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBo
ZXJlCisgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKKyAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxz
PHRydWU+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGVsc2UKKyAgICAgICAg
ZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsK
K30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRl
cik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgaW1h
Z2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5
PiBzcmNQaXhlbEFycmF5OworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIHNyY1Bp
eGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgc3JjUGl4ZWxBcnJh
eSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERy
YXdpbmdSZWN0KS0+ZGF0YSgpOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
CisKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGlt
YWdlUmVjdC53aWR0aCgpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBpbWFnZVJlY3QuaGVp
Z2h0KCk7CisgICAgcGFpbnRpbmdEYXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7CisKKyAgICAvLyBE
cmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCisgICAgaW50IGNsaXBSaWdodCA9IGltYWdlUmVj
dC53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgaW50IGNsaXBCb3R0b20gPSBp
bWFnZVJlY3QuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7CisKKyAgICBpZiAoY2xp
cFJpZ2h0ID49IDAgJiYgY2xpcEJvdHRvbSA+PSAwKSB7CisgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tKTsKKworICAgICAgICBjbGlw
UmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsKKyAgICAgICAgY2xpcEJvdHRvbSArPSBt
X3RhcmdldE9mZnNldC55KCkgKyAxOworICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4g
MCkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VS
ZWN0LndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CisgICAgICAgIGlmIChjbGlwQm90dG9t
IDwgaW1hZ2VSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCBjbGlwQm90dG9tLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCisgICAgICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJn
ZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKKyAgICAgICAgaWYgKGNsaXBSaWdodCA8IGltYWdl
UmVjdC53aWR0aCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBj
bGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGNsaXBCb3R0
b20pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1p
emllZCBmb3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBp
ZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAg
IGVsc2UKKyAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBFREdFTU9ERV9VTktOT1dOOgorICAgICAgICB0cyA8PCAiVU5L
Tk9XTiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgorICAg
ICAgICB0cyA8PCAiRFVQTElDQVRFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFREdFTU9E
RV9XUkFQOgorICAgICAgICB0cyA8PCAiV1JBUCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RURHRU1PREVfTk9ORToKKyAgICAgICAgdHMgPDwgIk5PTkUiOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAor
eworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVDb252b2x2ZU1h
dHJpeCI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAg
ICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwgIlwiICIKKyAgICAgICA8PCAi
a2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwgIlwiICIKKyAgICAgICA8PCAi
ZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCisgICAgICAgPDwgImJpYXM9XCIiIDw8
IG1fYmlhcyA8PCAiXCIgIgorICAgICAgIDw8ICJ0YXJnZXQ9XCIiIDw8IG1fdGFyZ2V0T2Zmc2V0
IDw8ICJcIiAiCisgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2RlIDw8ICJcIiAi
CisgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aCA8
PCAiXCIgIgorICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNlcnZlQWxwaGEg
PDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMs
OCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisjaWYgRU5BQkxFKEZJ
TFRFUlMpCisjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiQ2FudmFz
UGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtNDY4LDQgKzQ2OCw0IEBAIFRl
eHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmUKIAogfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2Vu
ZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCShyZXZpc2lvbiA2NzkzNSkJKGZy
b20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4Lmg6Njc5
MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTVkdGRUNvbnZvbHZlTWF0cml4X2gKKyNkZWZpbmUgU1ZHRkVDb252b2x2ZU1h
dHJpeF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IEVkZ2VNb2RlVHlwZSB7CisgICAgRURHRU1PREVfVU5LTk9XTiAgID0gMCwKKyAgICBFREdFTU9E
RV9EVVBMSUNBVEUgPSAxLAorICAgIEVER0VNT0RFX1dSQVAgICAgICA9IDIsCisgICAgRURHRU1P
REVfTk9ORSAgICAgID0gMworfTsKKworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKKworY2xhc3Mg
RkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwK
KyAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUs
IGNvbnN0IEZsb2F0UG9pbnQmLAorICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0
PiYpOworCisgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJu
ZWxTaXplKEludFNpemUpOworCisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgZmxv
YXQgZGl2aXNvcigpIGNvbnN0OworICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCk7CisKKyAgICBm
bG9hdCBiaWFzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCaWFzKGZsb2F0KTsKKworICAgIEludFBv
aW50IHRhcmdldE9mZnNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGFyZ2V0T2Zmc2V0KEludFBv
aW50KTsKKworICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKworICAgIEZsb2F0UG9pbnQga2VybmVsVW5pdExlbmd0
aCgpIGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KTsKKwor
ICAgIGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0OworICAgIHZvaWQgc2V0UHJlc2VydmVBbHBo
YShib29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCisgICAgICAg
ICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewor
ICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5OworICAgICAgICBDYW52YXNQ
aXhlbEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGlu
dCBoZWlnaHQ7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgfTsKKworICAgIHRlbXBsYXRlPGJv
b2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldElu
dGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9t
KTsKKworICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwg
aW50IHgsIGludCB5KTsKKworICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
KyAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5
MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50
IHkxLCBpbnQgeDIsIGludCB5Mik7CisKKyAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKKyAgICBm
bG9hdCBtX2Rpdmlzb3I7CisgICAgZmxvYXQgbV9iaWFzOworICAgIEludFBvaW50IG1fdGFyZ2V0
T2Zmc2V0OworICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOworICAgIEZsb2F0UG9pbnQgbV9r
ZXJuZWxVbml0TGVuZ3RoOworICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOworICAgIFZlY3Rvcjxm
bG9hdD4gbV9rZXJuZWxNYXRyaXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZF
Q29udm9sdmVNYXRyaXhfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDEwICsyMCwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTVkdGRUNvbnZvbHZlTWF0cml4X2gKLSNkZWZpbmUgU1ZHRkVDb252
b2x2ZU1hdHJpeF9oCisjaWZuZGVmIEZFQ29udm9sdmVNYXRyaXhfaAorI2RlZmluZSBGRUNvbnZv
bHZlTWF0cml4X2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lmIEVO
QUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKQEAgLTExMyw2ICsxMTMsNiBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8v
IFNWR0ZFQ29udm9sdmVNYXRyaXhfaAorI2VuZGlmIC8vIEZFQ29udm9sdmVNYXRyaXhfaApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZH
RkVEaWZmdXNlTGlnaHRpbmcuaCIKKworI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5n
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCisgICAgZmxv
YXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQorICAgIDog
RkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwg
ZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFksIGxpZ2h0U291cmNlKQoreworfQorCitQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBG
RURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAorICAg
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdo
dFNvdXJjZT4gbGlnaHRTb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1
c2VMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwg
a2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOworfQor
CitGRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkKK3sKK30KKworQ29sb3Ig
RkVEaWZmdXNlTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xpZ2h0aW5nQ29sb3I7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldExpZ2h0aW5n
Q29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCit7CisgICAgbV9saWdodGluZ0NvbG9y
ID0gbGlnaHRpbmdDb2xvcjsKK30KKworZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6OnN1cmZhY2VT
Y2FsZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3N1cmZhY2VTY2FsZTsKK30KKwordm9pZCBG
RURpZmZ1c2VMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sK
KyAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKK30KKworZmxvYXQgRkVEaWZmdXNl
TGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlmZnVz
ZUNvbnN0YW50OworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3Rh
bnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQoreworICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlm
ZnVzZUNvbnN0YW50OworfQorCitmbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExl
bmd0aFgoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOworfQorCit2
b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCkKK3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0
aFg7Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Cit9CisKK3ZvaWQgRkVEaWZm
dXNlTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
KQoreworICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKK30KKwor
Y29uc3QgTGlnaHRTb3VyY2UqIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodFNvdXJjZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Cit9CisKK3ZvaWQgRkVEaWZmdXNl
TGlnaHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291
cmNlKQoreyAgICAKKyAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7Cit9CisKK3ZvaWQg
RkVEaWZmdXNlTGlnaHRpbmc6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRURpZmZ1c2VM
aWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2Zl
RGlmZnVzZUxpZ2h0aW5nIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8
PCAiXCIgIgorICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0
YW50IDw8ICJcIiAiCisgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVs
VW5pdExlbmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Cisg
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEp
OworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAJKHJl
dmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEwIEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
I2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisj
aW5jbHVkZSAiRkVEaWZmdXNlTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNl
LmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xMjMsNCArMTIzLDQgQEAgVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpZmZ1c2VMaWdodGluZy5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAorI2Rl
ZmluZSBTVkdGRURpZmZ1c2VMaWdodGluZ19oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTGlnaHRTb3VyY2U7CisKK2NsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVi
bGljIEZFTGlnaHRpbmcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVz
ZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgICAgIGZs
b2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7CisKKyAgICBDb2xvciBsaWdodGluZ0NvbG9yKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisKKyAgICBmbG9hdCBzdXJmYWNl
U2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisKKyAgICBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldERpZmZ1c2VDb25zdGFu
dChmbG9hdCk7CisKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OworICAgIHZv
aWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOworCisgICAgZmxvYXQga2VybmVsVW5pdExl
bmd0aFkoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKKwor
ICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworCisgICAgdmlydHVhbCB2b2lk
IGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVE
aWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
UGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBT
VkdGRURpZmZ1c2VMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKLSNkZWZpbmUg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAorI2lmbmRlZiBGRURpZmZ1c2VMaWdodGluZ19oCisjZGVm
aW5lIEZFRGlmZnVzZUxpZ2h0aW5nX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsNiAr
NjMsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykK
IAotI2VuZGlmIC8vIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRURpZmZ1c2VM
aWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDo2NzkzNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcC5oIgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxB
cnJheS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFRGlz
cGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFu
bmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQg
c2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhD
aGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3Rv
cikKKyAgICAsIG1fc2NhbGUoc2NhbGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVEaXNwbGFjZW1l
bnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLAorICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpc3BsYWNlbWVudE1h
cCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOworfQorCitDaGFu
bmVsU2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOworfQorCit2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvcikKK3sKKyAgICBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNl
bGVjdG9yOworfQorCitDaGFubmVsU2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp5Q2hh
bm5lbFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yOwor
fQorCit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENo
YW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikKK3sKKyAgICBtX3lDaGFubmVsU2Vs
ZWN0b3IgPSB5Q2hhbm5lbFNlbGVjdG9yOworfQorCitmbG9hdCBGRURpc3BsYWNlbWVudE1hcDo6
c2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlOworfQorCit2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3NjYWxlID0gc2NhbGU7
Cit9CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZpbHRlciogZmlsdGVyKQorewor
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGluMi0+
YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3Vs
dEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3Ig
PT0gQ0hBTk5FTF9VTktOT1dOIHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05P
V04pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
OworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5k
YXRhKCkpOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7
CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKGluMi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRh
dGEoKSk7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgp
LT5zaXplKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6
Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworCisgICAgQVNT
RVJUKHNyY1BpeGVsQXJyYXlBLT5sZW5ndGgoKSA9PSBzcmNQaXhlbEFycmF5Qi0+bGVuZ3RoKCkp
OworCisgICAgZmxvYXQgc2NhbGVYID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkud2lkdGgoKTsKKyAgICBmbG9hdCBzY2FsZVkgPSBtX3NjYWxlIC8gMjU1LmYg
KiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKTsKKyAgICBmbG9hdCBzY2FsZUFk
anVzdG1lbnRYID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRlclJlc29s
dXRpb24oKS53aWR0aCgpOworICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFkgPSAoMC41ZiAtIDAu
NWYgKiBtX3NjYWxlKSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOworICAg
IGludCBzdHJpZGUgPSBpbWFnZVJlY3Qud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBpbWFnZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkgKiBz
dHJpZGU7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsr
eCkgeworICAgICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZSArIHggKiA0OworICAgICAgICAg
ICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVggKiBzcmNQaXhlbEFycmF5
Qi0+Z2V0KGRzdEluZGV4ICsgbV94Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1l
bnRYKTsKKyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVZ
ICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feUNoYW5uZWxTZWxlY3RvciAtIDEp
ICsgc2NhbGVBZGp1c3RtZW50WSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwg
PSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAgICAgICAgICAgaWYgKHNyY1gg
PCAwIHx8IHNyY1ggPj0gaW1hZ2VSZWN0LndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBp
bWFnZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgp
LT5zZXQoZHN0SW5kZXggKyBjaGFubmVsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKSk7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcGl4ZWxWYWx1ZSA9IHNyY1BpeGVsQXJyYXlBLT5nZXQoc3JjWSAqIHN0cmlkZSArIHNyY1gg
KiA0ICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5z
ZXQoZHN0SW5kZXggKyBjaGFubmVsLCBwaXhlbFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHRJbWFnZSgpLT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2lu
dCgpKTsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCit7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2Vs
ZWN0b3JUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ0hBTk5F
TF9VTktOT1dOOgorICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ0hBTk5FTF9SOgorICAgICAgICB0cyA8PCAiUkVEIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDSEFOTkVMX0c6CisgICAgICAgIHRzIDw8ICJHUkVFTiI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0hBTk5FTF9COgorICAgICAgICB0cyA8PCAiQkxVRSI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ0hBTk5FTF9BOgorICAgICAgICB0cyA8PCAiQUxQSEEiOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRURpc3Bs
YWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAi
W2ZlRGlzcGxhY2VtZW50TWFwIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMpOworICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUgPDwgIlwiICIKKyAg
ICAgICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJc
IiAiCisgICAgICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNoYW5uZWxTZWxlY3Rv
ciA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwLmgiCisjaWYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAogI2luY2x1
ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTE2OCw0ICsx
NjgsNCBAQCBUZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHJldmlzaW9u
IDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBTVkdGRURpc3BsYWNlbWVudE1hcF9oCisjZGVmaW5lIFNWR0ZF
RGlzcGxhY2VtZW50TWFwX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisj
aW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBDaGFubmVs
U2VsZWN0b3JUeXBlIHsKKyAgICBDSEFOTkVMX1VOS05PV04gPSAwLAorICAgIENIQU5ORUxfUiA9
IDEsCisgICAgQ0hBTk5FTF9HID0gMiwKKyAgICBDSEFOTkVMX0IgPSAzLAorICAgIENIQU5ORUxf
QSA9IDQKK307CisKK2NsYXNzIEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNy
ZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9y
KGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNv
bnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOworCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShG
aWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JU
eXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
ciwgZmxvYXQpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7
CisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CisgICAgZmxvYXQg
bV9zY2FsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVEaXNwbGFjZW1lbnRN
YXBfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTVkdGRURpc3BsYWNlbWVudE1hcF9oCi0jZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50
TWFwX2gKKyNpZm5kZWYgRkVEaXNwbGFjZW1lbnRNYXBfaAorI2RlZmluZSBGRURpc3BsYWNlbWVu
dE1hcF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUo
RklMVEVSUykKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZF
RGlzcGxhY2VtZW50TWFwX2gKKyNlbmRpZiAvLyBGRURpc3BsYWNlbWVudE1hcF9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lv
biA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNw
cDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5j
bHVkZSAiU1ZHRkVGbG9vZC5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVGbG9vZDo6RkVGbG9v
ZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9v
ZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQoreworfQorCitQYXNzUmVmUHRyPEZFRmxvb2Q+IEZFRmxv
b2Q6OmNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNp
dHkpKTsKK30KKworQ29sb3IgRkVGbG9vZDo6Zmxvb2RDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmxvb2RDb2xvcjsKK30KKwordm9pZCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKK30KKworZmxvYXQg
RkVGbG9vZDo6Zmxvb2RPcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mbG9vZE9wYWNp
dHk7Cit9CisKK3ZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0
eSkKK3sKKyAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsKK30KKwordm9pZCBGRUZs
b29kOjphcHBseShGaWx0ZXIqKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENv
bG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVj
dChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
LnNpemUoKSksIGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKK30KKwordm9pZCBGRUZsb29kOjpk
dW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlRmxvb2QiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwg
Zmxvb2RDb2xvcigpLm5hbWUoKSA8PCAiXCIgIgorICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwi
IiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4iOworICAgIHJldHVybiB0czsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdGRUZsb29kLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVG
bG9vZC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCkBAIC04OCw0ICs4OCw0IEBAIFRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXQKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHJldmlzaW9uIDY3OTM1
KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaDo2NzkzNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVG
bG9vZF9oCisjZGVmaW5lIFNWR0ZFRmxvb2RfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUZs
b29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQpOworCisgICAgQ29sb3IgZmxv
b2RDb2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsK
KworICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0Rmxvb2RPcGFj
aXR5KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBGRUZsb29kKGNvbnN0IENvbG9yJiwgZmxvYXQpOworCisgICAgQ29sb3IgbV9mbG9vZENv
bG9yOworICAgIGZsb2F0IG1fZmxvb2RPcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRp
ZiAvLyBTVkdGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVGbG9v
ZF9oCi0jZGVmaW5lIFNWR0ZFRmxvb2RfaAorI2lmbmRlZiBGRUZsb29kX2gKKyNkZWZpbmUgRkVG
bG9vZF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUo
RklMVEVSUykKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgpAQCAtNTMsNiArNTMsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFRmxvb2RfaAor
I2VuZGlmIC8vIEZFRmxvb2RfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6Njc5MzUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5n
VHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRT
b3VyY2UpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRp
bmdUeXBlKQorICAgICwgbV9saWdodFNvdXJjZShsaWdodFNvdXJjZSkKKyAgICAsIG1fbGlnaHRp
bmdDb2xvcihsaWdodGluZ0NvbG9yKQorICAgICwgbV9zdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxl
KQorICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQorICAgICwgbV9zcGVj
dWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQpCisgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQo
c3BlY3VsYXJFeHBvbmVudCkKKyAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2VybmVsVW5pdExl
bmd0aFgpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5ndGhZKQorewor
fQorCitjb25zdCBzdGF0aWMgaW50IGNQaXhlbFNpemUgPSA0OworY29uc3Qgc3RhdGljIGludCBj
QWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNPcGFx
dWVBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ZmYpOworCitBTFdBWVNfSU5M
SU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwTGVmdFBpeGVsVmFsdWUoKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
K30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFBpeGVs
VmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNl
dCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
fQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwUmlnaHRQ
aXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChv
ZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6bGVmdFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Y2VudGVy
UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQo
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpkb3duTGVmdFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBp
bnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duUGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUg
aW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1ZSgpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoTGlnaHRpbmdEYXRh
JiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsCisgICAgaW50
IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5vcm1hbFgsIGZsb2F0IGZh
Y3RvclksIGludCBub3JtYWxZKQoreworICAgIG1fbGlnaHRTb3VyY2UtPnVwZGF0ZVBhaW50aW5n
RGF0YShwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0
YS5waXhlbHMtPmdldChkYXRhLm9mZnNldCArIDMpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKwor
ICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0PGZsb2F0Pihu
b3JtYWxYKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKyAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRZ
KGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWSkgKiBkYXRhLnN1cmZhY2VTY2Fs
ZSk7CisgICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WigxLjBmKTsKKyAgICBkYXRhLm5vcm1hbFZl
Y3Rvci5ub3JtYWxpemUoKTsKKworICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5n
OjpEaWZmdXNlTGlnaHRpbmcpCisgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVz
ZUNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5
VmVjdG9yLnooKSArIDEuMGYpOworICAgICAgICBoYWxmd2F5VmVjdG9yLm5vcm1hbGl6ZSgpOwor
ICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisgICAgICAgICAgICBkYXRh
LmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAoZGF0YS5ub3JtYWxWZWN0b3Ig
KiBoYWxmd2F5VmVjdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5saWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihkYXRhLm5vcm1hbFZlY3RvciAqIGhh
bGZ3YXlWZWN0b3IsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKGRhdGEu
bGlnaHRTdHJlbmd0aCA+IDEuMGYpCisgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IDEuMGY7
CisgICAgaWYgKGRhdGEubGlnaHRTdHJlbmd0aCA8IDAuMGYpCisgICAgICAgIGRhdGEubGlnaHRT
dHJlbmd0aCA9IDAuMGY7CisKKyAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEu
Y29sb3JWZWN0b3IueCgpKSk7CisgICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDEs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5n
RGF0YS5jb2xvclZlY3Rvci55KCkpKTsKKyAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0
ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFp
bnRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOworfQorCitib29sIEZFTGlnaHRpbmc6OmRyYXdM
aWdodGluZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
K3sKKyAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBMaWdo
dGluZ0RhdGEgZGF0YTsKKworICAgIGlmICghbV9saWdodFNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQg
KG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5l
IHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlmICh3aWR0aCA8
PSAyIHx8IGhlaWdodCA8PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhLnBp
eGVscyA9IHBpeGVsczsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8g
MjU1LjBmOworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQ
aXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOworICAg
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOworICAgIHBhaW50aW5nRGF0
YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChtX2xpZ2h0aW5nQ29sb3IucmVkKCksIG1fbGln
aHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3IuYmx1ZSgpKTsKKyAgICBtX2xpZ2h0
U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7CisKKyAgICAvLyBUb3AvTGVm
dCBjb3JuZXIKKyAgICBkYXRhLm9mZnNldCA9IDA7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRp
bmdEYXRhLCAwLCAwLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQaXhl
bFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAtMi4wZiAvIDMuMGYs
IC0yICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpICsg
MiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsK
KworICAgIC8vIFRvcC9SaWdodCBwaXhlbAorICAgIGRhdGEub2Zmc2V0ID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFp
bnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsCisgICAgICAgIC0yLjBmIC8g
My4wZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZh
bHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxWYWx1ZSgp
LAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLmxlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0
YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRh
dGEuZG93blBpeGVsVmFsdWUoKSk7CisKKyAgICAvLyBCb3R0b20vTGVmdCBwaXhlbAorICAgIGRh
dGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRh
LmhlaWdodERlY3JlYXNlZEJ5T25lLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLnVwUGl4
ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4
ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgIC0yLjBmIC8g
My4wZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7
CisKKyAgICAvLyBCb3R0b20vUmlnaHQgcGl4ZWwKKyAgICBkYXRhLm9mZnNldCA9IGhlaWdodCAq
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBp
eGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBp
eGVsVmFsdWUoKSArIGRhdGEudXBQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpLAorICAgICAgICAtMi4wZiAvIDMuMGYs
IC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0
YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpKTsKKworICAg
IGlmICh3aWR0aCA+PSAzKSB7CisgICAgICAgIC8vIFRvcCBsaW5lCisgICAgICAgIGRhdGEub2Zm
c2V0ID0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAg
ICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLAorICAgICAgICAgICAgICAg
IC0xLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdo
dFBpeGVsVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLmxlZnRQ
aXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhl
bFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQm90dG9tIGxpbmUKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7
CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyAr
K3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNldFBpeGVsKGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKKyAgICAgICAg
ICAgICAgICAtMS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBS
aWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5y
aWdodFBpeGVsVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVw
TGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0
UGl4ZWxWYWx1ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4
ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoaGVpZ2h0ID49IDMpIHsKKyAgICAgICAgLy8gTGVmdCBsaW5lCisgICAgICAgIGRh
dGEub2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgZm9y
IChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRhdGEub2Zm
c2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwKKyAgICAgICAgICAgICAgICAtMS4wZiAv
IDIuMGYsIC1kYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkg
LSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRh
dGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRh
LmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmlnaHQgbGlu
ZQorICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
KyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAg
Zm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRhdGEu
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKKyAgICAgICAgICAg
IHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5
LAorICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgp
ICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRh
LmRvd25QaXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51
cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxl
ZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7CisgICAgICAgIC8v
IEludGVyaW9yIHBpeGVscworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmU7ICsreSkgeworICAgICAgICAgICAgZGF0YS5vZmZzZXQgPSB5ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgICAgICBm
b3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9m
ZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFp
bnRpbmdEYXRhLCB4LCB5LAorICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQuMGYsIC1kYXRh
LnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRh
LmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93
bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICog
ZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIGRhdGEuZG93
bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3du
UmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaW50IHRvdGFsU2l6ZSA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWln
aHQ7CisgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykgeworICAgICAg
ICBmb3IgKGludCBpID0gMzsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KQorICAgICAgICAgICAgZGF0
YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG90YWxTaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYTEgPSBkYXRhLnBpeGVscy0+Z2V0KGkpOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBhMiA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDEpOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBhMyA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDIpOworICAgICAgICAgICAgLy8gYWxwaGEg
c2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKKyAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5z
ZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBh
MiA6IGEzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFp
bi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZmZlY3RDb250
ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisK
KyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRy
PEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKKyAgICBDYW52YXNQaXhlbEFycmF5KiBz
cmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgIC8vIEZJWE1FOiBzdXBw
b3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlz
IHRoYXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwg
YW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8gb3V0
cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5
IGFyZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFs
c28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgaWYgKGRyYXdMaWdodGluZyhzcmNQaXhl
bEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpLCBlZmZlY3REcmF3aW5nUmVjdC5oZWln
aHQoKSkpCisgICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShz
cmNJbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6
ZSgpKSwgSW50UG9pbnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0
aW5nLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCiAj
aW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNjcsNCArMjY3LDQgQEAgdm9pZCBGRUxpZ2h0aW5nOjph
cHBseShGaWx0ZXIqIGZpbHRlcikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFTGlnaHRpbmcuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU1ZHRkVMaWdodGluZ19oCisj
ZGVmaW5lIFNWR0ZFTGlnaHRpbmdfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0
Zi9BbHdheXNJbmxpbmUuaD4KKworLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxp
Z2h0aW5nIGFuZCBGRVNwZWN1bGFyTGlnaHRpbmcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDYW52YXNQaXhlbEFycmF5OworCitjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworCitw
cm90ZWN0ZWQ6CisgICAgZW51bSBMaWdodGluZ1R5cGUgeworICAgICAgICBEaWZmdXNlTGlnaHRp
bmcsCisgICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKKyAgICB9OworCisgICAgc3RydWN0IExpZ2h0
aW5nRGF0YSB7CisgICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgICAgICAgIENh
bnZhc1BpeGVsQXJyYXkqIHBpeGVsczsKKyAgICAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAg
ICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICBp
bnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCB3aWR0aERlY3JlYXNl
ZEJ5T25lOworICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7CisKKyAgICAgICAgQUxX
QVlTX0lOTElORSBpbnQgdXBMZWZ0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IGludCB1cFBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBSaWdodFBp
eGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgbGVmdFBpeGVsVmFsdWUoKTsK
KyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgY2VudGVyUGl4ZWxWYWx1ZSgpOworICAgICAgICBB
TFdBWVNfSU5MSU5FIGludCByaWdodFBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElO
RSBpbnQgZG93bkxlZnRQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRv
d25QaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25SaWdodFBpeGVs
VmFsdWUoKTsKKyAgICB9OworCisgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENv
bG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0
cjxMaWdodFNvdXJjZT4pOworCisgICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJh
eSosIGludCwgaW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdE
YXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCisgICAgICAgIGludCBsaWdodFgsIGlu
dCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQg
bm9ybWFsWSk7CisKKyAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7CisgICAgUmVmUHRy
PExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOworCisgICAgQ29sb3IgbV9saWdodGluZ0NvbG9y
OworICAgIGZsb2F0IG1fc3VyZmFjZVNjYWxlOworICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50
OworICAgIGZsb2F0IG1fc3BlY3VsYXJDb25zdGFudDsKKyAgICBmbG9hdCBtX3NwZWN1bGFyRXhw
b25lbnQ7CisgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBmbG9hdCBtX2tlcm5l
bFVuaXRMZW5ndGhZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRUxpZ2h0aW5n
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU1ZHRkVMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZF
TGlnaHRpbmdfaAorI2lmbmRlZiBGRUxpZ2h0aW5nX2gKKyNkZWZpbmUgRkVMaWdodGluZ19oCiAK
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRT
b3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKIC8vIENvbW1vbiBiYXNl
IGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCkBAIC05
MSw2ICs5MSw2IEBAIHByb3RlY3RlZDoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRUxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRUxpZ2h0aW5n
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5j
cHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTWVyZ2UuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
RU1lcmdlOjpGRU1lcmdlKCkgCisgICAgOiBGaWx0ZXJFZmZlY3QoKQoreworfQorCitQYXNzUmVm
UHRyPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGRU1lcmdlKTsKK30KKwordm9pZCBGRU1lcmdlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sK
KyAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOworICAgICAgICBpbi0+YXBw
bHkoZmlsdGVyKTsKKyAgICAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBl
ZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KSk7CisgICAgfQorfQorCit2b2lkIEZFTWVyZ2U6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFt
JiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJb
ZmVNZXJnZSI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsK
KyAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworICAgIHRzIDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4i
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGlucHV0
RWZmZWN0KGkpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDggKzIxLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorI2lmIEVOQUJMRShGSUxU
RVJTKQorI2luY2x1ZGUgIkZFTWVyZ2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNzksNCArNzksNCBAQCBUZXh0U3RyZWFtJiBGRU1l
cmdlOjpleHRlcm5hbFJlcHJlc2VudGF0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShG
SUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1lcmdlLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFNWR0ZFTWVyZ2VfaAorI2RlZmluZSBTVkdGRU1lcmdlX2gKKworI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgor
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwg
aW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVNZXJnZSgpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRU1lcmdlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LSNpZm5kZWYgU1ZHRkVNZXJnZV9oCi0jZGVmaW5lIFNWR0ZFTWVyZ2VfaAorI2lmbmRlZiBGRU1l
cmdlX2gKKyNkZWZpbmUgRU1lcmdlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ0LDYgKzQ0LDYg
QEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNl
bmRpZiAvLyBTVkdGRU1lcmdlX2gKKyNlbmRpZiAvLyBGRU1lcmdlX2gKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZp
c2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBo
b2xvZ3kuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRU1vcnBob2xvZ3kuaCIKKworI2luY2x1ZGUgIkNhbnZh
c1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgc3RkOjptaW47Cit1c2luZyBz
dGQ6Om1heDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhv
bG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBt
X3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQoreworfQorCitQYXNz
UmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5KHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKK30K
KworTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBGRU1vcnBob2xvZ3k6Om1vcnBob2xvZ3lPcGVyYXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCit7Cisg
ICAgbV90eXBlID0gdHlwZTsKK30KKworZmxvYXQgRkVNb3JwaG9sb2d5OjpyYWRpdXNYKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9yYWRpdXNYOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6c2V0
UmFkaXVzWChmbG9hdCByYWRpdXNYKQoreworICAgIG1fcmFkaXVzWCA9IHJhZGl1c1g7Cit9CisK
K2Zsb2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmFk
aXVzWTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkK
K3sKKyAgICBtX3JhZGl1c1kgPSByYWRpdXNZOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6YXBw
bHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAg
IGludCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50PihtX3JhZGl1c1ggKiBmaWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS53aWR0aCgpKTsKKyAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGlu
dD4obV9yYWRpdXNZICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworICAg
IGlmIChyYWRpdXNYIDw9IDAgfHwgcmFkaXVzWSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwor
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1h
Z2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8
Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgUmVm
UHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0Lndp
ZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBpbnQgZWZmZWN0V2lkdGggPSBlZmZl
Y3REcmF3aW5nUmVjdC53aWR0aCgpICogNDsKKyAgICAKKyAgICAvLyBMaW1pdCB0aGUgcmFkaXVz
IHNpemUgdG8gZWZmZWN0IGRpbWVuc2lvbnMKKyAgICByYWRpdXNYID0gbWluKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXNYKTsKKyAgICByYWRpdXNZID0gbWluKGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzWSk7CisgICAgCisgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IGV4dHJlbWE7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3REcmF3aW5n
UmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGludCBzdGFydFkgPSBtYXgoMCwgeSAtIHJh
ZGl1c1kpOworICAgICAgICBpbnQgZW5kWSA9IG1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQo
KSAtIDEsIHkgKyByYWRpdXNZKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsg
Y2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVs
CisgICAgICAgICAgICBleHRyZW1hLmNsZWFyKCk7CisgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8PSByYWRpdXNYOyArK2opIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNv
bHVtbkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3RhcnRZICogZWZmZWN0V2lkdGggKyA0
ICogaiArIGNoYW5uZWwpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydFk7IGkg
PD0gZW5kWTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWwg
PSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdpZHRoICsgNCAqIGogKyBjaGFubmVsKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgJiYgcGl4ZWwgPj0g
Y29sdW1uRXh0cmVtYSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5FeHRyZW1hID0g
cGl4ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5k
KGNvbHVtbkV4dHJlbWEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbiAKKyAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsgKyt4
KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kWCA9IG1pbih4ICsgcmFkaXVzWCwgZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgY29sdW1uRXh0cmVtYSA9IHNyY1BpeGVsQXJyYXktPmdldChzdGFydFkgKiBlZmZlY3RXaWR0
aCArIGVuZFggKiA0ICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0
YXJ0WTsgaSA8PSBlbmRZOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBwaXhlbCA9IHNyY1BpeGVsQXJyYXktPmdldChpICogZWZmZWN0V2lkdGggKyBlbmRYICogNCAr
IGNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUgJiYgcGl4ZWwgPD0gY29sdW1uRXh0cmVtYSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAm
JiBwaXhlbCA+PSBjb2x1bW5FeHRyZW1hKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bkV4dHJlbWEgPSBwaXhlbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHggLSByYWRpdXNYID49IDApCisgICAgICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDAp
OworICAgICAgICAgICAgICAgIGlmICh4ICsgcmFkaXVzWCA8PSBlZmZlY3REcmF3aW5nUmVjdC53
aWR0aCgpKQorICAgICAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW1h
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVudGlyZUV4dHJlbWEgPSBleHRyZW1h
WzBdOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQga2VybmVsSW5kZXggPSAwOyBrZXJu
ZWxJbmRleCA8IGV4dHJlbWEuc2l6ZSgpOyArK2tlcm5lbEluZGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAmJiBleHRy
ZW1hW2tlcm5lbEluZGV4XSA8PSBlbnRpcmVFeHRyZW1hKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIGV4dHJlbWFb
a2VybmVsSW5kZXhdID49IGVudGlyZUV4dHJlbWEpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFba2VybmVsSW5kZXhdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KHkgKiBlZmZlY3RXaWR0aCAr
IDQgKiB4ICsgY2hhbm5lbCwgZW50aXJlRXh0cmVtYSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVNb3Jw
aG9sb2d5OjpkdW1wKCkKK3sKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoK
KyAgICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERToKKyAgICAgICAgdHMgPDwgIkVST0RFIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOgorICAgICAgICB0
cyA8PCAiRElMQVRFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30K
KworVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQpOworICAgIHRzIDw8ICJbZmVNb3JwaG9sb2d5IjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBo
b2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCisgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVz
WCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7ICAgIAorICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisj
aWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKICNpbmNsdWRl
ICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC0xODUsNCArMTg1
LDQgQEAgVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlcwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDY3OTM1KQkoZnJv
bSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oOjY3OTM1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNW
R0ZFTW9ycGhvbG9neV9oCisjZGVmaW5lIFNWR0ZFTW9ycGhvbG9neV9oCisKKyNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNs
dWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgeworICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKKyAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgPSAxLAorICAgIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9ESUxBVEUgPSAyCit9OworCitjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IGNy
ZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZ
KTsgIAorICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSk7CisKKyAgICBmbG9hdCByYWRpdXNYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSYWRpdXNYKGZs
b2F0KTsKKworICAgIGZsb2F0IHJhZGl1c1koKSBjb25zdDsKKyAgICB2b2lkIHNldFJhZGl1c1ko
ZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwg
dm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAg
IEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9h
dCByYWRpdXNZKTsKKyAgICAKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKKyAg
ICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxvYXQgbV9yYWRpdXNZOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisKKyNlbmRpZiAvLyBTVkdGRU1vcnBob2xvZ3lfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRU1vcnBob2xvZ3lfaAotI2RlZmluZSBTVkdGRU1vcnBo
b2xvZ3lfaAorI2lmbmRlZiBGRU1vcnBob2xvZ3lfaAorI2RlZmluZSBGRU1vcnBob2xvZ3lfaAog
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMp
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTYx
LDYgKzYxLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCiAKLSNlbmRpZiAvLyBTVkdGRU1vcnBob2xvZ3lfaAorI2VuZGlmIC8vIEZFTW9ycGhvbG9n
eV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFT2Zmc2V0LmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmlsdGVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVm
ZmVjdCgpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShkeSkKK3sKK30KKworUGFzc1JlZlB0
cjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGRU9mZnNldChkeCwgZHkpKTsKK30KKworZmxvYXQgRkVPZmZz
ZXQ6OmR4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keDsKK30KKwordm9pZCBGRU9mZnNldDo6
c2V0RHgoZmxvYXQgZHgpCit7CisgICAgbV9keCA9IGR4OworfQorCitmbG9hdCBGRU9mZnNldDo6
ZHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2R5OworfQorCit2b2lkIEZFT2Zmc2V0OjpzZXRE
eShmbG9hdCBkeSkKK3sKKyAgICBtX2R5ID0gZHk7Cit9CisKK3ZvaWQgRkVPZmZzZXQ6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBl
ZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOworICAgIHNv
dXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBm
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CisKKyAgICBpZiAoZmlsdGVyLT5l
ZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBtX2R4ICo9IHNvdXJjZUltYWdlUmVj
dC53aWR0aCgpOworICAgICAgICBtX2R5ICo9IHNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKTsKKyAg
ICB9CisgICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOworICAg
IG1fZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CisKKyAgICBGbG9h
dFJlY3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkueCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9keSArIGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCku
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0KCkpOworCisg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKK30KKwordm9pZCBGRU9mZnNldDo6ZHVtcCgpCit7Cit9
CisKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQp
OworICAgIHRzIDw8ICJbZmVPZmZzZXQiOyAKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwiIGR5PVwi
IiA8PCBkeSgpIDw8ICJcIl1cbiI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5j
cHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRU9mZnNldC5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFT2Zm
c2V0LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKQEAgLTEwOSw0ICsxMDksNCBAQCBUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHJldmlzaW9uIDY3
OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6Njc5
MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBT
VkdGRU9mZnNldF9oCisjZGVmaW5lIFNWR0ZFT2Zmc2V0X2gKKworI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFT2Zmc2V0IDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVPZmZzZXQ+
IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOworCisgICAgZmxvYXQgZHgoKSBjb25zdDsKKyAg
ICB2b2lkIHNldER4KGZsb2F0KTsKKworICAgIGZsb2F0IGR5KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXREeShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKKworICAgIGZsb2F0IG1fZHg7Cisg
ICAgZmxvYXQgbV9keTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVPZmZzZXRf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRU9mZnNldF9oCi0jZGVmaW5l
IFNWR0ZFT2Zmc2V0X2gKKyNpZm5kZWYgRkVPZmZzZXRfaAorI2RlZmluZSBGRU9mZnNldF9oCiAK
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKIApAQCAtNTIs
NiArNTIsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVS
UykKIAotI2VuZGlmIC8vIFNWR0ZFT2Zmc2V0X2gKKyNlbmRpZiAvLyBGRU9mZnNldF9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDo2NzkzNSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxp
Z2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCisg
ICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQ
dHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxp
Z2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQs
IHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
bGlnaHRTb3VyY2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKKyAgICBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsCisgICAgICAgIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKK30KKworRkVT
cGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkKK3sKK30KKworQ29sb3IgRkVT
cGVjdWxhckxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
aWdodGluZ0NvbG9yOworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0TGlnaHRpbmdD
b2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKK3sKKyAgICBtX2xpZ2h0aW5nQ29sb3Ig
PSBsaWdodGluZ0NvbG9yOworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6OnN1cmZhY2VT
Y2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOworfQorCit2b2lkIEZF
U3BlY3VsYXJMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sK
KyAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKK30KKworZmxvYXQgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcGVj
dWxhckNvbnN0YW50OworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQoreworICAgIG1fc3BlY3VsYXJDb25zdGFu
dCA9IHNwZWN1bGFyQ29uc3RhbnQ7Cit9CisKK2Zsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3Bl
Y3VsYXJFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsK
K30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCkKK3sKKyAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4
cG9uZW50OworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhY
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKK30KKwordm9pZCBG
RVNwZWN1bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYKQoreworICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsK
K30KKworZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Cit9CisKK3ZvaWQgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkK
K3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5pdExlbmd0aFk7Cit9CisKK2Nv
bnN0IExpZ2h0U291cmNlKiBGRVNwZWN1bGFyTGlnaHRpbmc6OmxpZ2h0U291cmNlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsKK30KKwordm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291
cmNlKQoreworICAgIG1fbGlnaHRTb3VyY2UgPSBsaWdodFNvdXJjZTsKK30KKwordm9pZCBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQp
IGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZVNw
ZWN1bGFyTGlnaHRpbmciOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7CisgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8
ICJcIiAiCisgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0
YW50IDw8ICJcIiAiCisgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3Vs
YXJFeHBvbmVudCA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRp
bmcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcu
aCIKIAotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2Uu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzUsNCArMTM1LDQgQEAgVGV4dFN0cmVh
bSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oOjY3OTM1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCisjZGVmaW5lIFNWR0ZFU3BlY3VsYXJMaWdo
dGluZ19oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJT
VkdGRUxpZ2h0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVTcGVjdWxh
ckxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LAorICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNl
Pik7CisgICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisKKyAgICBDb2xvciBsaWdo
dGluZ0NvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9y
Jik7CisKKyAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1cmZh
Y2VTY2FsZShmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKKworICAgIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOwor
CisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5l
bFVuaXRMZW5ndGhYKGZsb2F0KTsKKworICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CisKKyAgICBjb25zdCBM
aWdodFNvdXJjZSogbGlnaHRTb3VyY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldExpZ2h0U291cmNl
KFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisK
KyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdo
dGluZyhjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFz
c1JlZlB0cjxMaWdodFNvdXJjZT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAotI2RlZmlu
ZSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAorI2lmbmRlZiBGRVNwZWN1bGFyTGlnaHRpbmdfaAor
I2RlZmluZSBGRVNwZWN1bGFyTGlnaHRpbmdfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorI2lmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
NCw2ICs2NCw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRVNw
ZWN1bGFyTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5i
b2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRVRp
bGU6OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQoreworfQorCitQYXNzUmVmUHRyPEZF
VGlsZT4gRkVUaWxlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUaWxl
KTsKK30KKworRmxvYXRSZWN0IEZFVGlsZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKEZpbHRlciogZmlsdGVyKQoreworICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKworICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkpOworICAg
IHJldHVybiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKK30KKwordm9pZCBGRVRpbGU6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSBlZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIElu
dFJlY3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKTsKKworICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlv
bi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorICAg
IC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2Yg
dGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KKyAgICBpZiAoaW4tPmlzU291cmNl
SW5wdXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0
ZXJSZWdpb24oKTsKKyAgICAgICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
KyAgICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlZ2lvbik7CisgICAg
fQorCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHRpbGVSZWN0LnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250
ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgp
KTsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1h
Z2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXg7CisgICAgbWF0cml4LnRyYW5zbGF0ZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSwKKyAgICAgICAg
ICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsKKyAgICBwYXR0ZXJuLmdldCgpLT5z
ZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIGZpbHRlckNvbnRleHQtPnNl
dEZpbGxQYXR0ZXJuKHBhdHRlcm4pOworICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgp
KSk7Cit9CisKK3ZvaWQgRkVUaWxlOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVUaWxl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVUaWxlIjsK
KyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8
ICJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBp
bmRlbnQgKyAxKTsKKworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiA2
NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVGlsZS5o
IgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFVGlsZS5oIgogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC0xMDIsNSArMTAyLDUg
QEAgVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVUaWxlX2gKKyNkZWZpbmUgU1ZHRkVU
aWxlX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFs
IFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRl
bnRpb24pIGNvbnN0OworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKEZpbHRlciopOworICAgIAorcHJpdmF0ZToKKyAgICBGRVRpbGUoKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgJKHJldmlzaW9uIDY3OTM1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICov
CiAKLSNpZm5kZWYgU1ZHRkVUaWxlX2gKLSNkZWZpbmUgU1ZHRkVUaWxlX2gKKyNpZm5kZWYgRkVU
aWxlX2gKKyNkZWZpbmUgRkVUaWxlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCkBAIC00NSw2ICs0NSw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVUaWxlX2gKKyNl
bmRpZiAvLyBGRVRpbGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHA6Njc5MzUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJT
VkdGRVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNs
dWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgICBQcm9kdWNlcyBy
ZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIg
PSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAg
bSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAg
U2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5
ODgKKyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQg
MTA0MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBv
cmlnaW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0g
NDA5NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAy
KiozMSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcq
KjU7IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3
MzsgLy8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisK
K0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV90
eXBlKHR5cGUpCisgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQorICAgICwg
bV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKKyAgICAsIG1fbnVtT2N0YXZlcyhudW1P
Y3RhdmVzKQorICAgICwgbV9zZWVkKHNlZWQpCisgICAgLCBtX3N0aXRjaFRpbGVzKHN0aXRjaFRp
bGVzKQoreworfQorCitQYXNzUmVmUHRyPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVh
dGUoVHVyYnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VG
cmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cit9
CisKK1R1cmJ1bGFuY2VUeXBlIEZFVHVyYnVsZW5jZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHlwZTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsYW5jZVR5
cGUgdHlwZSkKK3sKKyAgICBtX3R5cGUgPSB0eXBlOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6
OmJhc2VGcmVxdWVuY3lZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WTsK
K30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVx
dWVuY3lZKQoreworICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKK30KKwor
ZmxvYXQgRkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYmFzZUZyZXF1ZW5jeVg7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVl
bmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKK3sKKyAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0g
YmFzZUZyZXF1ZW5jeVg7Cit9CisKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6c2VlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2VlZDsgCit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZs
b2F0IHNlZWQpCit7CisgICAgbV9zZWVkID0gc2VlZDsKK30KKworaW50IEZFVHVyYnVsZW5jZTo6
bnVtT2N0YXZlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVtT2N0YXZlczsKK30KKwordm9p
ZCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMoYm9vbCBudW1PY3RhdmVzKQoreworICAgIG1f
bnVtT2N0YXZlcyA9IG51bU9jdGF2ZXM7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpzdGl0Y2hU
aWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RpdGNoVGlsZXM7Cit9CisKK3ZvaWQgRkVU
dXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKK3sKKyAgICBtX3N0aXRjaFRp
bGVzID0gc3RpdGNoOworfQorCisvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlz
IGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lm
aWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2UKKworRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YShsb25n
IHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKQorICAgIDogc2VlZChw
YWludGluZ1NlZWQpCisgICAgLCB3aWR0aCgwKQorICAgICwgaGVpZ2h0KDApCisgICAgLCB3cmFw
WCgwKQorICAgICwgd3JhcFkoMCkKKyAgICAsIGNoYW5uZWwoMCkKKyAgICAsIGZpbHRlclNpemUo
cGFpbnRpbmdTaXplKQoreworfQorCisvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgor
aW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCit7CisgICAg
bG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5k
UiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgaWYgKHJlc3VsdCA8PSAwKQorICAgICAgICByZXN1
bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICBzZWVkID0gcmVzdWx0OworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQoreworICAgIHJldHVy
biB0ICogdCAqICgzIC0gMiAqIHQpOworfQorCitpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xh
dGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhICsgdCAqIChi
IC0gYSk7Cit9CisKK2lubGluZSB2b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKQoreworICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7CisK
KyAgICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGlt
dW0gLSAxXS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKKyAgICAgICAgcGFpbnRp
bmdEYXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkg
KyAxOworICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQorICAg
ICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOworCisgICAgZmxvYXQq
IGdyYWRpZW50OworICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFu
bmVsKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewor
ICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7CisgICAgICAg
ICAgICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKKyAgICAg
ICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFu
ZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsK
KyAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0Rh
dGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2Nr
U2l6ZTsKKyAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzcXJ0ZihncmFkaWVudFsw
XSAqIGdyYWRpZW50WzBdICsgZ3JhZGllbnRbMV0gKiBncmFkaWVudFsxXSk7CisgICAgICAgICAg
ICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAgICAgICAgZ3JhZGll
bnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGludCBpID0gc19ibG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGludCBrID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgaW50IGogPSBwYWludGlu
Z0RhdGEucmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgQVNTRVJUKGogPj0gMCk7Cisg
ICAgICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7CisgICAgICAgIHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pd
OworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKKyAgICB9Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hh
bm5lbF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsx
XTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIHZvaWQgY2hlY2tOb2lzZShpbnQmIG5v
aXNlVmFsdWUsIGludCBsaW1pdFZhbHVlLCBpbnQgbmV3VmFsdWUpCit7CisgICAgaWYgKG5vaXNl
VmFsdWUgPj0gbGltaXRWYWx1ZSkKKyAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZTsKKyAg
ICBpZiAobm9pc2VWYWx1ZSA+PSBsaW1pdFZhbHVlIC0gMSkKKyAgICAgICAgbm9pc2VWYWx1ZSAt
PSBuZXdWYWx1ZSAtIDE7Cit9CisKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCit7Cisg
ICAgc3RydWN0IE5vaXNlIHsKKyAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7
CisgICAgICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlOworCisgICAgICAgIE5v
aXNlKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgcG9zaXRp
b24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgbm9pc2VQb3NpdGlv
bkludGVnZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOworICAgICAgICAgICAg
bm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSBwb3NpdGlvbiAtIG5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgTm9pc2Ugbm9pc2VYKG5vaXNlVmVj
dG9yLngoKSk7CisgICAgTm9pc2Ugbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisgICAgZmxvYXQq
IHE7CisgICAgZmxvYXQgc3gsIHN5LCBhLCBiLCB1LCB2OworCisgICAgLy8gSWYgc3RpdGNoaW5n
LCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCisgICAgaWYgKG1fc3RpdGNoVGls
ZXMpIHsKKyAgICAgICAgY2hlY2tOb2lzZShub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZSwgcGFpbnRpbmdEYXRhLndyYXBYLCBwYWludGluZ0RhdGEud2lkdGgpOworICAgICAgICBjaGVj
a05vaXNlKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlLCBwYWludGluZ0RhdGEud3Jh
cFksIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIH0KKworICAgIG5vaXNlWC5ub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
XTsKKyAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107
CisKKyAgICBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSk7CisgICAgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWUpOworCisgICAgLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCisgICAg
aW50IHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdy
YWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rp
b25WYWx1ZSAqIHFbMV07CisgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
bmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAg
ICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsK
KyAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CisgICAgYSA9IGxpbmVh
ckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
ICsgMV07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5l
bF1bdGVtcF07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFb
MF0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOworICAg
IHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBu
b2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOworICAgIHEgPSBwYWludGluZ0Rh
dGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHYgPSAobm9pc2VY
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKKyAgICBiID0gbGluZWFySW50ZXJwb2xh
dGlvbihzeCwgdSwgdik7CisgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIp
OworfQorCit1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQoreworICAgIGZsb2F0IHRpbGVXaWR0aCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXpl
LndpZHRoKCk7CisgICAgQVNTRVJUKHRpbGVXaWR0aCA+IDApOworICAgIGZsb2F0IHRpbGVIZWln
aHQgPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKTsKKyAgICBBU1NFUlQodGlsZUhl
aWdodCA+IDApOworICAgIC8vIEFkanVzdCB0aGUgYmFzZSBmcmVxdWVuY2llcyBpZiBuZWNlc3Nh
cnkgZm9yIHN0aXRjaGluZy4KKyAgICBpZiAobV9zdGl0Y2hUaWxlcykgeworICAgICAgICAvLyBX
aGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBh
ZGp1c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250
aW51b3VzLgorICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCkgeworICAgICAgICAgICAgZmxv
YXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8g
dGlsZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVX
aWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgLy8gQmFz
ZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRh
cmQuCisgICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhp
Z2hGcmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgICAgIG1fYmFzZUZy
ZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9iYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fYmFzZUZyZXF1ZW5jeVkpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9
IGZsb29yZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAg
ICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBtX2Jhc2VG
cmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5
WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lZKQorICAg
ICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7
CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0IHVwIFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2
YWx1ZXMuCisgICAgICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBt
X2Jhc2VGcmVxdWVuY3lYKTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBYID0gc19wZXJsaW5O
b2lzZSArIHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9
IHJvdW5kZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSk7CisgICAgICAgIHBhaW50aW5n
RGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgIH0K
KyAgICBmbG9hdCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAwOworICAgIEZsb2F0UG9pbnQg
bm9pc2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9i
YXNlRnJlcXVlbmN5WSk7CisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2
ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKKyAgICAgICAgaWYgKG1f
dHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCisgICAgICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9y
KSAvIHJhdGlvOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgKz0gZmFic2Yobm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRp
bzsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAg
ICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8g
Kj0gMjsKKyAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0
ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhl
IG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBz
aW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBwYWludGluZ0Rh
dGEud2lkdGggKj0gMjsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWCA9IDIgKiBwYWlu
dGluZ0RhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgcGFpbnRpbmdEYXRh
LmhlaWdodCAqPSAyOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBZID0gMiAqIHBhaW50
aW5nRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisg
ICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2Uu
CisgICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCisgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAq
IDAuNWYgKyAwLjVmOworICAgIC8vIENsYW1wIHJlc3VsdAorICAgIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCA9IHN0ZDo6bWF4KHN0ZDo6bWluKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMS5m
KSwgMC5mKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ICogMjU1KTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZp
bHRlciogZmlsdGVyKQoreworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5z
aXplKCkpOworICAgIGlmICghaW1hZ2VSZWN0LnNpemUoKS53aWR0aCgpIHx8ICFpbWFnZVJlY3Qu
c2l6ZSgpLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VS
ZWN0LmhlaWdodCgpKTsKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgaW1h
Z2VSZWN0LnNpemUoKSk7CisgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CisKKyAgICBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKKyAgICBGbG9hdFBv
aW50IHBvaW50OworICAgIHBvaW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7CisgICAgaW50IGlu
ZGV4T2ZQaXhlbENoYW5uZWwgPSAwOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0
LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKKyAg
ICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICBwb2ludC5zZXRY
KHBvaW50LngoKSArIDEpOworICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9
IDA7IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytp
bmRleE9mUGl4ZWxDaGFubmVsKQorICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5z
ZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
cGFpbnRpbmdEYXRhLCBwb2ludCkpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdEltYWdl
KCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKK3sKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFR1cmJ1bGFu
Y2VUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRkVUVVJCVUxF
TkNFX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0U6CisgICAgICAgIHRzIDw8
ICJUVVJCVUxBTkNFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQ
RV9GUkFDVEFMTk9JU0U6CisgICAgICAgIHRzIDw8ICJOT0lTRSI7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sK
KyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlVHVyYnVsZW5jZSI7
CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8
PCAiIHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgorICAgICAgIDw8ICJiYXNlRnJlcXVlbmN5
PVwiIiA8PCBiYXNlRnJlcXVlbmN5WCgpIDw8ICIsICIgPDwgYmFzZUZyZXF1ZW5jeVkoKSA8PCAi
XCIgIgorICAgICAgIDw8ICJzZWVkPVwiIiA8PCBzZWVkKCkgPDwgIlwiICIKKyAgICAgICA8PCAi
bnVtT2N0YXZlcz1cIiIgPDwgbnVtT2N0YXZlcygpIDw8ICJcIiAiCisgICAgICAgPDwgInN0aXRj
aFRpbGVzPVwiIiA8PCBzdGl0Y2hUaWxlcygpIDw8ICJcIl1cbiI7CisgICAgcmV0dXJuIHRzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVHVyYnVsZW5jZS5oIgorI2lmIEVO
QUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiQ2Fu
dmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtMzgzLDQgKzM4Myw0IEBA
IFRleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXMKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisj
ZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaDo2NzkzNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZF
VHVyYnVsZW5jZV9oCisjZGVmaW5lIFNWR0ZFVHVyYnVsZW5jZV9oCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFR1cmJ1bGFuY2VUeXBl
IHsKKyAgICBGRVRVUkJVTEVOQ0VfVFlQRV9VTktOT1dOID0gMCwKKyAgICBGRVRVUkJVTEVOQ0Vf
VFlQRV9GUkFDVEFMTk9JU0UgPSAxLAorICAgIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0Ug
PSAyCit9OworCitjbGFzcyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxh
bmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKworICAgIFR1cmJ1bGFu
Y2VUeXBlIHR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGUoVHVyYnVsYW5jZVR5cGUpOwor
CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkoKSBjb25zdDsKKyAgICB2b2lkIHNldEJhc2VGcmVx
dWVuY3lZKGZsb2F0KTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7CisKKyAgICBmbG9hdCBzZWVkKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRTZWVkKGZsb2F0KTsKKworICAgIGludCBudW1PY3RhdmVzKCkgY29uc3Q7
CisgICAgdm9pZCBzZXROdW1PY3RhdmVzKGJvb2wpOworCisgICAgYm9vbCBzdGl0Y2hUaWxlcygp
IGNvbnN0OworICAgIHZvaWQgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1
YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
U2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1Np
emUgLSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIGxvbmcgc2VlZDsK
KyAgICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKKyAgICAg
ICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07CisgICAgICAgIGlu
dCB3aWR0aDsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgor
ICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICBpbnQgd3JhcFg7IC8vIE1pbmltdW0gdmFsdWUg
dG8gd3JhcC4KKyAgICAgICAgaW50IHdyYXBZOworICAgICAgICBpbnQgY2hhbm5lbDsKKyAgICAg
ICAgSW50U2l6ZSBmaWx0ZXJTaXplOworCisgICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50
aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKKyAgICAgICAgaW5saW5lIGxv
bmcgcmFuZG9tKCk7CisgICAgfTsKKworICAgIEZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlwZSwg
ZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKworICAgIGlubGluZSB2b2lkIGluaXRQ
YWludChQYWludGluZ0RhdGEmKTsKKyAgICBmbG9hdCBub2lzZTJEKFBhaW50aW5nRGF0YSYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VW
YWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIFR1
cmJ1bGFuY2VUeXBlIG1fdHlwZTsKKyAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOworICAgIGZs
b2F0IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgaW50IG1fbnVtT2N0YXZlczsKKyAgICBmbG9hdCBt
X3NlZWQ7CisgICAgYm9vbCBtX3N0aXRjaFRpbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRp
ZiAvLyBTVkdGRVR1cmJ1bGVuY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEwICsyMSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBTVkdGRVR1cmJ1bGVuY2VfaAotI2RlZmluZSBTVkdGRVR1cmJ1bGVuY2VfaAor
I2lmbmRlZiBGRVR1cmJ1bGVuY2VfaAorI2RlZmluZSBGRVR1cmJ1bGVuY2VfaAogCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTk4LDYgKzk4LDYg
QEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNl
bmRpZiAvLyBTVkdGRVR1cmJ1bGVuY2VfaAorI2VuZGlmIC8vIEZFVHVyYnVsZW5jZV9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5j
cHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0xpZ2h0U291cmNlLmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9MaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6
aGVyY3plZ0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCisjaW5j
bHVkZSAiU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaWdodFNv
dXJjZS5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJTVkdT
cG90TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQ
YWludGluZ0RhdGEmKQoreworfQorCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6
KQoreworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0g
eCk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5
KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHop
OworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5ub3JtYWxpemUoKTsKK30KKworLy8gc3Bv
dC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xkCisv
LyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cworc3Rh
dGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOworCit2b2lkIFNwb3RM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
K3sKKyAgICBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yID0gcGFpbnRpbmdEYXRhLmNv
bG9yVmVjdG9yOworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WChtX2RpcmVj
dGlvbi54KCkgLSBtX3Bvc2l0aW9uLngoKSk7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZl
Y3Rvci5zZXRZKG1fZGlyZWN0aW9uLnkoKSAtIG1fcG9zaXRpb24ueSgpKTsKKyAgICBwYWludGlu
Z0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFoobV9kaXJlY3Rpb24ueigpIC0gbV9wb3NpdGlvbi56
KCkpOworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7CisKKyAg
ICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVD
dXRPZmZMaW1pdCA9IDAuMGY7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0g
LWFudGlBbGlhc1RyZXNob2xkOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGxpbWl0aW5n
Q29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKKyAgICAgICAgaWYgKGxpbWl0aW5nQ29u
ZUFuZ2xlIDwgMC4wZikKKyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5n
Q29uZUFuZ2xlOworICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKKyAgICAg
ICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7CisgICAgICAgIHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUp
KTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29u
ZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7CisgICAgfQorCisgICAgLy8gT3B0aW1p
emF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKKyAgICBpZiAoIW1fc3Bl
Y3VsYXJFeHBvbmVudCkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAw
OworICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQorICAgICAgICBwYWlu
dGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7CisgICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVy
IDAuMGYgbm9yIDEuMGYKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAy
OworfQorCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopCit7CisgICAgcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKKyAgICBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOworICAgIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7CisgICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOworCisgICAgZmxvYXQgY29zaW5lT2ZBbmdsZSA9
IHBhaW50aW5nRGF0YS5saWdodFZlY3RvciAqIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3I7
CisgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0KSB7
CisgICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1Y2VkLCBzY2FubGluZXMgYXJlIG5vdCB1cGRh
dGVkCisgICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRYKDAuMGYpOworICAgICAg
ICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WSgwLjBmKTsKKyAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbG9yVmVjdG9yLnNldFooMC4wZik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAorICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7
CisgICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkgeworICAgIGNhc2Ug
MDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9
PSAxCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBv
d2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQpCisgICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGlt
aXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFp
bnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOworCisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBm
KQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKKworICAgIHBhaW50aW5nRGF0YS5jb2xv
clZlY3Rvci5zZXRYKHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueCgpICogbGlnaHRT
dHJlbmd0aCk7CisgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFkocGFpbnRpbmdEYXRh
LnByaXZhdGVDb2xvclZlY3Rvci55KCkgKiBsaWdodFN0cmVuZ3RoKTsKKyAgICBwYWludGluZ0Rh
dGEuY29sb3JWZWN0b3Iuc2V0WihwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnooKSAq
IGxpZ2h0U3RyZW5ndGgpOworfQorCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBhemltdXRo
ID0gZGVnMnJhZChtX2F6aW11dGgpOworICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9l
bGV2YXRpb24pOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKGNvc2YoYXppbXV0
aCkgKiBjb3NmKGVsZXZhdGlvbikpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZ
KHNpbmYoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikpOworICAgIHBhaW50aW5nRGF0YS5saWdo
dFZlY3Rvci5zZXRaKHNpbmYoZWxldmF0aW9uKSk7Cit9CisKK3ZvaWQgRGlzdGFudExpZ2h0U291
cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQsIGZsb2F0KQor
eworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmxvYXRQb2ludDNEJiBwKQoreworICAgIHRzIDw8ICJ4PSIgPDwgcC54KCkgPDwgIiB5PSIg
PDwgcC55KCkgPDwgIiB6PSIgPDwgcC56KCk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzKSBjb25zdAoreworICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKKyAgICB0cyA8
PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsK
K30KKworVGV4dFN0cmVhbSYgU3BvdExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICJbdHlwZT1TUE9ULUxJR0hUXSAi
OworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0aW9uKCkgPDwgIlwiXSI7CisgICAg
dHMgPDwgIltkaXJlY3Rpb249XCIiIDw8IGRpcmVjdGlvbigpIDw8ICJcIl0iOworICAgIHRzIDw8
ICJbc3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgc3BlY3VsYXJFeHBvbmVudCgpIDw8ICJcIl0iOwor
ICAgIHRzIDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8IGxpbWl0aW5nQ29uZUFuZ2xlKCkg
PDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBEaXN0YW50TGlnaHRT
b3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7Cisg
ICAgdHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7CisgICAgdHMgPDwgIlthemltdXRoPVwi
IiA8PCBhemltdXRoKCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8IGVs
ZXZhdGlvbigpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5j
cHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTMgKzIyLDEzIEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
I2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVk
ZSAiTGlnaHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgot
I2luY2x1ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVl
QXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiRGlz
dGFudExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgorI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNjYs
NCArMTY2LDQgQEAgVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlOjpleHRlcm5hbAogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkJ
KGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oOjY3OTM1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
bGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBTVkdMaWdodFNvdXJjZV9oCisjZGVmaW5lIFNWR0xpZ2h0U291cmNlX2gK
KworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIExpZ2h0VHlwZSB7CisgICAg
TFNfRElTVEFOVCwKKyAgICBMU19QT0lOVCwKKyAgICBMU19TUE9UCit9OworCitjbGFzcyBUZXh0
U3RyZWFtOworCitjbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291
cmNlPiB7CitwdWJsaWM6CisKKyAgICAvLyBMaWdodCB2ZWN0b3JzIG11c3QgYmUgY2FsY3VsYXRl
ZCBmb3IgZXZlcnkgcGl4ZWwgZHVyaW5nCisgICAgLy8gcGFpbnRpbmcuIEl0IGlzIGV4cGVuc2l2
ZSB0byBwYXNzIGFsbCB0aGVzZSBhcmd1bWVudHMgdG8KKyAgICAvLyBhIGZyZXF1ZW50bHkgY2Fs
bGVkIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGJlY2F1c2Ugbm90IGFsbAorICAgIC8vIGxpZ2h0IHNv
dXJjZXMgcmVxdWlyZSBhbGwgb2YgdGhlbS4gSW5zdGVhZCwgd2UganVzdCBwYXNzCisgICAgLy8g
YSByZWZlcmVuY2UgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3QgUGFpbnRp
bmdEYXRhIHsKKyAgICAgICAgLy8gU1ZHRkVMaWdodGluZyBhbHNvIHVzZSB0aGVtCisgICAgICAg
IEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAgICAgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVj
dG9yOworICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMKKyAgICAgICAgRmxvYXRQb2ludDNEIGRp
cmVjdGlvblZlY3RvcjsKKyAgICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsK
KyAgICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OworICAgICAgICBmbG9hdCBjb25lRnVsbExp
Z2h0OworICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKKyAgICB9OworCisgICAgTGlnaHRT
b3VyY2UoTGlnaHRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeyB9CisK
KyAgICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpIHsgfQorCisgICAgTGlnaHRUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpID0gMDsKKyAgICAvLyB6IGlzIGEgZmxv
YXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgor
ICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8
bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopID0gMDsKKworcHJp
dmF0ZToKKyAgICBMaWdodFR5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAv
LyBTVkdMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTAgKzIxLDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFNWR0xpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHTGlnaHRTb3VyY2VfaAorI2lmbmRlZiBM
aWdodFNvdXJjZV9oCisjZGVmaW5lIExpZ2h0U291cmNlX2gKIAotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTc5LDYgKzc5LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYg
Ly8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdMaWdodFNvdXJjZV9oCisjZW5kaWYg
Ly8gTGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmg6Njc5MzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCisjZGVmaW5lIFNWR1BvaW50TGlnaHRT
b3VyY2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
U1ZHTGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQb2ludExp
Z2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQb2ludExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3Np
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRMaWdodFNvdXJj
ZShwb3NpdGlvbikpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRp
bmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeik7CisKKyAgICB2aXJ0
dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIFBvaW50TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBw
b3NpdGlvbikKKyAgICAgICAgOiBMaWdodFNvdXJjZShMU19QT0lOVCkKKyAgICAgICAgLCBtX3Bv
c2l0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50M0QgbV9wb3Np
dGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHUG9pbnRMaWdodFNvdXJjZV9o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEg
KzIwLDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFNWR1BvaW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdQb2ludExpZ2h0U291cmNlX2gKKyNp
Zm5kZWYgUG9pbnRMaWdodFNvdXJjZV9oCisjZGVmaW5lIFBvaW50TGlnaHRTb3VyY2VfaAogCi0j
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3Vy
Y2UuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU0LDYgKzU0LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdQb2ludExpZ2h0
U291cmNlX2gKKyNlbmRpZiAvLyBQb2ludExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHJldmlz
aW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdo
dFNvdXJjZS5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nw
b3RMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHU3BvdExpZ2h0U291cmNlX2gKKyNkZWZp
bmUgU1ZHU3BvdExpZ2h0U291cmNlX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQorI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU3BvdExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9h
dFBvaW50M0QmIHBvc2l0aW9uLAorICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlv
biwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwb3RMaWdodFNvdXJjZShwb3NpdGlvbiwg
ZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50LCBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgIH0K
KworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2RpcmVjdGlvbjsgfQorCisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQorICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFu
Z2xlKCkgY29uc3QgeyByZXR1cm4gbV9saW1pdGluZ0NvbmVBbmdsZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
OworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTcG90TGlnaHRTb3VyY2UoY29uc3QgRmxv
YXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sCisgICAg
ICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAg
ICAgICA6IExpZ2h0U291cmNlKExTX1NQT1QpCisgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlv
bikKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9zcGVjdWxh
ckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgICwgbV9saW1pdGluZ0NvbmVBbmds
ZShsaW1pdGluZ0NvbmVBbmdsZSkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludDNEIG1f
cG9zaXRpb247CisgICAgRmxvYXRQb2ludDNEIG1fZGlyZWN0aW9uOworCisgICAgZmxvYXQgbV9z
cGVjdWxhckV4cG9uZW50OworICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKworI2VuZGlmIC8vIFNWR1Nwb3RMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCShy
ZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDExIEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR1Nwb3RMaWdodFNvdXJj
ZV9oCi0jZGVmaW5lIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisjaWZuZGVmIFNwb3RMaWdodFNvdXJj
ZV9oCisjZGVmaW5lIFNwb3RMaWdodFNvdXJjZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShGSUxU
RVJTKQorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNjcsNiArNjcsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUo
RklMVEVSUykKIAotI2VuZGlmIC8vIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisjZW5kaWYgLy8gU3Bv
dExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotI2luY2x1ZGUgIlNWR0ZFQ29udm9sdmVNYXRyaXguaCIKKyNpbmNsdWRlICJGRUNvbnZv
bHZlTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5o
IgogCiAjaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIkZFRGlmZnVzZUxpZ2h0aW5nLmgiCiAj
aW5jbHVkZSAiU1ZHQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgog
I2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudF9oCiAKICNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcC5o
IgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc5MzUp
CisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw3ICsyMSw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKICNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdE
aXN0YW50TGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgIkRpc3RhbnRMaWdodFNvdXJjZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkocmV2
aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFRmxvb2RFbGVtZW50X2gKIAog
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRmxvb2Qu
aCIKKyNpbmNsdWRlICJGRUZsb29kLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIFNWR0ZF
TGlnaHRFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lu
Y2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR0xpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKICNkZWZpbmUgU1ZHRkVNZXJnZUVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorI2luY2x1ZGUgIkZF
TWVyZ2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
LSNpbmNsdWRlICJTVkdGRU1vcnBob2xvZ3kuaCIKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHJldmlzaW9u
IDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNkZWZpbmUgU1ZHRkVPZmZzZXRFbGVtZW50X2gKIAogI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVk
ZSAiU1ZHRkVPZmZzZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyAr
MjEsOCBAQAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAi
U1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2Uu
aCIKKworI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShy
ZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgorI2luY2x1ZGUgIkZFU3BlY3Vs
YXJMaWdodGluZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNw
b3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFU3BvdExp
Z2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogCiAjaWYg
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJT
cG90TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2RlZmluZSBTVkdGRVRp
bGVFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1
ZGUgIkZFVGlsZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIgotI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQor
KysgV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnRfaAogCiAjaWYg
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVUdXJidWxlbmNl
LmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50TGlnaHRTb3Vy
Y2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0Rpc3RhbnRMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRGlzdGFudExpZ2h0U291cmNl
X2gKLSNkZWZpbmUgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291
cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXN0YW50TGlnaHRTb3VyY2U+
IGNyZWF0ZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2YXRpb24p
KTsKLSAgICB9Ci0KLSAgICBmbG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRo
OyB9Ci0gICAgZmxvYXQgZWxldmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRGlzdGFudExpZ2h0
U291cmNlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICAgICAgOiBMaWdodFNv
dXJjZShMU19ESVNUQU5UKQotICAgICAgICAsIG1fYXppbXV0aChhemltdXRoKQotICAgICAgICAs
IG1fZWxldmF0aW9uKGVsZXZhdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbV9hemlt
dXRoOwotICAgIGZsb2F0IG1fZWxldmF0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAv
LyBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA2NzkzNSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCi0KLSNpbmNsdWRlICJDYW52YXNQaXhlbEFy
cmF5LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMs
IGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAg
ICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEs
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdCgp
Ci0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKLSAgICAsIG1fZGl2aXNvcihkaXZpc29y
KQotICAgICwgbV9iaWFzKGJpYXMpCi0gICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRPZmZzZXQp
Ci0gICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQotICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoKGtl
cm5lbFVuaXRMZW5ndGgpCi0gICAgLCBtX3ByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSkKLSAg
ICAsIG1fa2VybmVsTWF0cml4KGtlcm5lbE1hdHJpeCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRUNv
bnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2lu
dCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZl
TWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUs
IGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkp
OwotfQotCi0KLUludFNpemUgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2VybmVsU2l6ZTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRLZXJuZWxTaXplKEludFNpemUga2VybmVsU2l6ZSkKLXsKLSAgICBtX2tlcm5lbFNpemUgPSBr
ZXJuZWxTaXplOyAKLX0KLQotY29uc3QgVmVjdG9yPGZsb2F0PiYgRkVDb252b2x2ZU1hdHJpeDo6
a2VybmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxNYXRyaXg7IAotfQotCi12b2lk
IEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWwp
Ci17Ci0gICAgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IAotfQotCi1mbG9hdCBGRUNvbnZvbHZl
TWF0cml4OjpkaXZpc29yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kaXZpc29yOyAKLX0KLQot
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17Ci0gICAg
bV9kaXZpc29yID0gZGl2aXNvcjsgCi19Ci0KLWZsb2F0IEZFQ29udm9sdmVNYXRyaXg6OmJpYXMo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JpYXM7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRy
aXg6OnNldEJpYXMoZmxvYXQgYmlhcykKLXsKLSAgICBtX2JpYXMgPSBiaWFzOyAKLX0KLQotSW50
UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6dGFyZ2V0T2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90YXJnZXRPZmZzZXQ7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdl
dE9mZnNldChJbnRQb2ludCB0YXJnZXRPZmZzZXQpCi17Ci0gICAgbV90YXJnZXRPZmZzZXQgPSB0
YXJnZXRPZmZzZXQ7IAotfQotCi1FZGdlTW9kZVR5cGUgRkVDb252b2x2ZU1hdHJpeDo6ZWRnZU1v
ZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2VkZ2VNb2RlOyAKLX0KLQotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9l
ZGdlTW9kZSA9IGVkZ2VNb2RlOyAKLX0KLQotRmxvYXRQb2ludCBGRUNvbnZvbHZlTWF0cml4Ojpr
ZXJuZWxVbml0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3Ro
OyAKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0
UG9pbnQga2VybmVsVW5pdExlbmd0aCkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJu
ZWxVbml0TGVuZ3RoOyAKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwcmVzZXJ2ZUFscGhh
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyAKLX0KLQotdm9pZCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKLXsKLSAg
ICBtX3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyAKLX0KLQotLyoKLSAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1l
bnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgVGhl
IGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQotICAgICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8Ci0g
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAg
IHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAgICAgICAgICAg
ICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAg
RSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBXaGVyZSBy
ZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAgY2FuIGJlIGNh
bGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgotCi0g
ICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCi0KLSAg
ICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKLSAgICAg
IFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhl
IHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4uCi0gICAgICAg
IC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25zIGluIHRoaXMg
Y2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFu
ZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90ZTogcm93IHgy
IGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAgICAgICAgb25s
eSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5
MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCi0gICAgICBS
ZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdpb24gQzogeDE6
IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4
MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6
IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMg
bW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFsZ29yaXRtIHRv
IGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCi0g
ICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNh
bGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGlt
YWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJpeCBpcyBiaWdn
ZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcwotICAg
ZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4g
Y29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0
aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0gICBhbmQgd291
bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotc3RhdGljIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNp
Z25lZCBjaGFyIG1heCA9IDI1NSkKLXsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0g
ICAgcmV0dXJuIGNoYW5uZWw7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhDYW52YXNQaXhlbEFy
cmF5KiBpbWFnZSwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcywgQ2FudmFzUGl4ZWxBcnJheSogc3JjKQotewotICAgIHVuc2lnbmVkIGNoYXIgbWF4
QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxz
WzNdIC8gZGl2aXNvciArIGJpYXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQot
ICAgICAgICBpbWFnZS0+c2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRp
dmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMp
IHsKLSAgICAgICAgaW1hZ2UtPnNldChwaXhlbCwgc3JjLT5nZXQocGl4ZWwpKTsKLSAgICAgICAg
KytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPnNldChwaXhlbCsrLCBtYXhBbHBo
YSk7Ci19Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxw
aGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldElu
dGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBp
bnQgY2xpcEJvdHRvbSkKLXsKLSAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNl
IHBpeGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0Rh
dGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbCA9IDA7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBp
bnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENv
bnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyAr
IChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNT
RVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gY2xpcEJvdHRvbSArIDE7IHkgPiAw
OyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgp
IHsKLSAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1fa2VybmVsTWF0cml4LnNpemUoKSAt
IDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAg
ICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAgICAgICAg
IHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVs
VmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBtX2tlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9
IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbMl0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwrKykpOwot
ICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzNdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKSk7
Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAgICAgICAgICAtLWtlcm5l
bFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAg
d2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFW
YWx1ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlz
b3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7Ci0gICAg
ICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwg
Kz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAg
ICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFs
dWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAo
eCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeCA+PSAwICYmIHkgPCBwYWludGlu
Z0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAgZGVmYXVsdDogLy8gRURH
RU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNB
VEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICBlbHNl
IGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAgIHggPSBwYWludGluZ0Rh
dGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICB5ID0gMDsKLSAg
ICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICAgICAgeSA9
IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0Rh
dGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgd2hp
bGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAg
IHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAoeSA8IDApCi0gICAgICAg
ICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkgJT0gcGFpbnRpbmdEYXRh
LmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwg
MjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwotdGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0
ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQg
eDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGgg
KyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgy
IC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBtX3RhcmdldE9mZnNldC54
KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAg
aW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNldC55KCk7Ci0gICAgaW50
IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENv
bnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyAr
IChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNT
RVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7
Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAg
aW50IGtlcm5lbFZhbHVlID0gbV9rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAgICAgICAg
IGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgIGludCBr
ZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAg
ICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAg
ICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxz
WzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAg
ICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBr
ZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5k
ZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gbV9rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LT5nZXQocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0g
Kz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAg
ICAgICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXgg
KyAyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVB
bHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4ICsgMykpOwotICAgICAg
ICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tl
cm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lk
dGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNl
dERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5kc3RQ
aXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4
ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3Rh
cnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5l
bFBpeGVsWTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBS
aWdodCwgaW50IGNsaXBCb3R0b20pCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJl
LCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24s
IHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmICht
X3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Ci0gICAgZWxzZQotICAgICAgICBmYXN0
U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90
dG9tKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVy
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgy
LCBpbnQgeTIpCi17Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQg
dG8gdGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0
SW50ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2Vy
dmVBbHBoYSkKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwg
eDEsIHkxLCB4MiwgeTIpOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZh
bHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLX0KLQotdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKLQotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwotICAg
IGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0
YSgpOwotICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOwot
Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc3JjUGl4ZWxB
cnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGltYWdlUmVjdC53aWR0aCgpOwotICAg
IHBhaW50aW5nRGF0YS5oZWlnaHQgPSBpbWFnZVJlY3QuaGVpZ2h0KCk7Ci0gICAgcGFpbnRpbmdE
YXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7Ci0KLSAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQg
cGl4ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IGltYWdlUmVjdC53aWR0aCgpIC0gbV9rZXJuZWxT
aXplLndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBpbWFnZVJlY3QuaGVpZ2h0KCkgLSBt
X2tlcm5lbFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0ID49IDAgJiYgY2xpcEJv
dHRvbSA+PSAwKSB7Ci0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tKTsKLQotICAgICAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZz
ZXQueCgpICsgMTsKLSAgICAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAx
OwotICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIG1fdGFyZ2V0
T2Zmc2V0LnkoKSk7Ci0gICAgICAgIGlmIChjbGlwQm90dG9tIDwgaW1hZ2VSZWN0LmhlaWdodCgp
KQotICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9t
LCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1f
dGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90
dG9tKTsKLSAgICAgICAgaWYgKGNsaXBSaWdodCA8IGltYWdlUmVjdC53aWR0aCgpKQotICAgICAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zm
c2V0LnkoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGNsaXBCb3R0b20pOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAg
ICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwg
aW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQot
ICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRh
LmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0
SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdl
UmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZHVtcCgpCi17
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBFZGdlTW9kZVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBF
REdFTU9ERV9VTktOT1dOOgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICB0cyA8PCAiRFVQTElDQVRF
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB0cyA8
PCAiV1JBUCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURHRU1PREVfTk9ORToKLSAgICAg
ICAgdHMgPDwgIk5PTkUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwot
fQotCi1UZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIG9yZGVyPVwiIiA8
PCBtX2tlcm5lbFNpemUgPDwgIlwiICIKLSAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBt
X2tlcm5lbE1hdHJpeCAgPDwgIlwiICIKLSAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZp
c29yIDw8ICJcIiAiCi0gICAgICAgPDwgImJpYXM9XCIiIDw8IG1fYmlhcyA8PCAiXCIgIgotICAg
ICAgIDw8ICJ0YXJnZXQ9XCIiIDw8IG1fdGFyZ2V0T2Zmc2V0IDw8ICJcIiAiCi0gICAgICAgPDwg
ImVkZ2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2RlIDw8ICJcIiAiCi0gICAgICAgPDwgImtlcm5lbFVu
aXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aCA8PCAiXCIgIgotICAgICAgIDw8ICJw
cmVzZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNlcnZlQWxwaGEgPDwgIlwiXVxuIjsKLSAgICBpbnB1
dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi19OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgU1ZHRkVDb252b2x2ZU1hdHJpeF9oCi0jZGVmaW5lIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAot
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFZGdlTW9k
ZVR5cGUgewotICAgIEVER0VNT0RFX1VOS05PV04gICA9IDAsCi0gICAgRURHRU1PREVfRFVQTElD
QVRFID0gMSwKLSAgICBFREdFTU9ERV9XUkFQICAgICAgPSAyLAotICAgIEVER0VNT0RFX05PTkUg
ICAgICA9IDMKLX07Ci0KLWNsYXNzIENhbnZhc1BpeGVsQXJyYXk7Ci0KLWNsYXNzIEZFQ29udm9s
dmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsCi0gICAgICAg
ICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQot
ICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsU2l6ZShJ
bnRTaXplKTsKLQotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAgIGZsb2F0IGRpdmlz
b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldERpdmlzb3IoZmxvYXQpOwotCi0gICAgZmxvYXQgYmlh
cygpIGNvbnN0OwotICAgIHZvaWQgc2V0QmlhcyhmbG9hdCk7Ci0KLSAgICBJbnRQb2ludCB0YXJn
ZXRPZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldE9mZnNldChJbnRQb2ludCk7Ci0K
LSAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25z
dDsKLSAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludCk7Ci0KLSAgICBib29s
IHByZXNlcnZlQWxwaGEoKSBjb25zdDsKLSAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVDb252
b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgQ2FudmFzUGl4ZWxBcnJh
eSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICBmbG9hdCBiaWFzOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7Ci0KLSAg
ICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSk7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgdm9p
ZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4
MiwgaW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE91
dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpOwotCi0gICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7Ci0gICAgZmxvYXQgbV9k
aXZpc29yOwotICAgIGZsb2F0IG1fYmlhczsKLSAgICBJbnRQb2ludCBtX3RhcmdldE9mZnNldDsK
LSAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKLSAgICBGbG9hdFBvaW50IG1fa2VybmVsVW5p
dExlbmd0aDsKLSAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKLSAgICBWZWN0b3I8ZmxvYXQ+IG1f
a2VybmVsTWF0cml4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRUNvbnZvbHZl
TWF0cml4X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVE
aWZmdXNlTGlnaHRpbmcuaCIKLQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCi0gICAgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDogRkVM
aWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IGxpZ2h0U291cmNlKQotewotfQotCi1QYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURp
ZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAotICAgIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1c2VM
aWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwotfQotCi1G
RURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkKLXsKLX0KLQotQ29sb3IgRkVE
aWZmdXNlTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2xp
Z2h0aW5nQ29sb3I7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29s
b3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCi17Ci0gICAgbV9saWdodGluZ0NvbG9yID0g
bGlnaHRpbmdDb2xvcjsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6OnN1cmZhY2VTY2Fs
ZSgpIGNvbnN0IAotewotICAgIHJldHVybiBtX3N1cmZhY2VTY2FsZTsKLX0KLQotdm9pZCBGRURp
ZmZ1c2VMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKLXsKLSAg
ICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGln
aHRpbmc6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGlmZnVzZUNv
bnN0YW50OwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQgZGlmZnVzZUNvbnN0YW50KQotewotICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVz
ZUNvbnN0YW50OwotfQotCi1mbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExlbmd0
aFgoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotfQotCi12b2lk
IEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7
Ci19Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLXZvaWQgRkVEaWZmdXNl
TGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQot
ewotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQotY29u
c3QgTGlnaHRTb3VyY2UqIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodFNvdXJjZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGln
aHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KQoteyAgICAKLSAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7Ci19Ci0KLXZvaWQgRkVE
aWZmdXNlTGlnaHRpbmc6OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdo
dGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlRGlm
ZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOwotICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAi
XCIgIgotICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50
IDw8ICJcIiAiCi0gICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5p
dExlbmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwot
ICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCShyZXZpc2lvbiA2Nzkz
NSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBTVkdGRURpZmZ1c2VMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFRGlmZnVzZUxpZ2h0aW5n
X2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZF
TGlnaHRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMaWdodFNvdXJjZTsK
LQotY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBD
b2xvciYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExp
Z2h0U291cmNlPik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIENv
bG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29u
c3QgQ29sb3ImKTsKLQotICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKLQotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChm
bG9hdCk7Ci0KLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQpOwotCi0gICAgY29uc3QgTGlnaHRTb3VyY2UqIGxp
Z2h0U291cmNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExp
Z2h0U291cmNlPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xv
ciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXAu
aCIKLQotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JU
eXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KCkK
LSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV95Q2hh
bm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxlKHNjYWxlKQotewot
fQotCi1QYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3Jl
YXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxT
ZWxlY3Rvciwgc2NhbGUpKTsKLX0KLQotQ2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3BsYWNlbWVu
dE1hcDo6eENoYW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1feENoYW5uZWxT
ZWxlY3RvcjsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rv
cihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCi17Ci0gICAgbV94
Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLX0KLQotQ2hhbm5lbFNlbGVjdG9y
VHlwZSBGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6
c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IpCi17Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsKLX0K
LQotZmxvYXQgRkVEaXNwbGFjZW1lbnRNYXA6OnNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zY2FsZTsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCi17Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFw
OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBp
bi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpbjItPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+
cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFu
bmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBlZmZl
Y3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJh
eT4gc3JjUGl4ZWxBcnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKLQotICAgIEludFJlY3QgZWZmZWN0
QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5
PiBzcmNQaXhlbEFycmF5QihpbjItPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwotCi0gICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1h
Z2VSZWN0LmhlaWdodCgpKTsKLQotICAgIEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCkg
PT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKLQotICAgIGZsb2F0IHNjYWxlWCA9IG1fc2Nh
bGUgLyAyNTUuZiAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7Ci0gICAgZmxv
YXQgc2NhbGVZID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCk7Ci0gICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WCA9ICgwLjVmIC0gMC41ZiAqIG1f
c2NhbGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKLSAgICBmbG9hdCBz
Y2FsZUFkanVzdG1lbnRZID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS5oZWlnaHQoKTsKLSAgICBpbnQgc3RyaWRlID0gaW1hZ2VSZWN0LndpZHRo
KCkgKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kp
IHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkc3RJbmRl
eCA9IGxpbmUgKyB4ICogNDsKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVYICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feENoYW5uZWxT
ZWxlY3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9
IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWSAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5k
ZXggKyBtX3lDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFkpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkg
ewotICAgICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IGltYWdlUmVjdC53aWR0
aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaW1hZ2VSZWN0LmhlaWdodCgpKQotICAgICAgICAg
ICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5
QS0+Z2V0KHNyY1kgKiBzdHJpZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOwotICAgICAgICAgICAg
ICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgcGl4ZWxW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURh
dGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OmR1bXAoKQotewotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENIQU5ORUxfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwgIlVO
S05PV04iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfUjoKLSAgICAgICAgdHMg
PDwgIlJFRCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0hBTk5FTF9HOgotICAgICAgICB0
cyA8PCAiR1JFRU4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfQjoKLSAgICAg
ICAgdHMgPDwgIkJMVUUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfQToKLSAg
ICAgICAgdHMgPDwgIkFMUEhBIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0
czsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRl
bnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIHNjYWxl
PVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCi0gICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIi
IDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgotICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVj
dG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgaW5wdXRF
ZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJl
dHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBT
VkdGRURpc3BsYWNlbWVudE1hcF9oCi0jZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKLQot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKLSAgICBD
SEFOTkVMX1VOS05PV04gPSAwLAotICAgIENIQU5ORUxfUiA9IDEsCi0gICAgQ0hBTk5FTF9HID0g
MiwKLSAgICBDSEFOTkVMX0IgPSAzLAotICAgIENIQU5ORUxfQSA9IDQKLX07Ci0KLWNsYXNzIEZF
RGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JU
eXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
ciwgZmxvYXQpOwotCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUpOwotCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5
cGUpOwotCi0gICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjYWxlKGZsb2F0
IHNjYWxlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOwotCi0gICAgQ2hh
bm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7Ci0gICAgQ2hhbm5lbFNlbGVjdG9y
VHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaApJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRmxv
b2QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0g
ICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29k
T3BhY2l0eSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29u
c3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZFRmxvb2QoZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7Ci19Ci0KLUNv
bG9yIEZFRmxvb2Q6OmZsb29kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2Zsb29kQ29s
b3I7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgbV9mbG9vZENvbG9yID0gY29sb3I7Ci19Ci0KLWZsb2F0IEZFRmxvb2Q6OmZsb29k
T3BhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OwotfQotCi12b2lk
IEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCi17Ci0gICAgbV9m
bG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6YXBwbHkoRmls
dGVyKikKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250
ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
b2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoZmxvb2RDb2xvcigpLnJnYigpLCBm
bG9vZE9wYWNpdHkoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpLCBjb2xv
ciwgRGV2aWNlQ29sb3JTcGFjZSk7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6ZHVtcCgpCi17Ci19Ci0K
LVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0g
ICAgdHMgPDwgIltmZUZsb29kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMpOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IGZsb29kQ29sb3IoKS5u
YW1lKCkgPDwgIlwiICIKLSAgICAgICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFj
aXR5KCkgPDwgIlwiXVxuIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgJKHJldmlzaW9uIDY3OTM1
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVG
bG9vZF9oCi0jZGVmaW5lIFNWR0ZFRmxvb2RfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRUZs
b29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi0gICAgQ29sb3IgZmxv
b2RDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsK
LQotICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Rmxvb2RPcGFj
aXR5KGZsb2F0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBGRUZsb29kKGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi0gICAgQ29sb3IgbV9mbG9vZENv
bG9yOwotICAgIGZsb2F0IG1fZmxvb2RPcGFjaXR5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRp
ZiAvLyBTVkdGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAi
U1ZHRkVMaWdodGluZy5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRp
bmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAot
ICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAg
IDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKLSAg
ICAsIG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2UpCi0gICAgLCBtX2xpZ2h0aW5nQ29sb3IobGln
aHRpbmdDb2xvcikKLSAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKLSAgICAsIG1f
ZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKLSAgICAsIG1fc3BlY3VsYXJDb25zdGFu
dChzcGVjdWxhckNvbnN0YW50KQotICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhw
b25lbnQpCi0gICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQotICAg
ICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLX0KLQotY29uc3Qg
c3RhdGljIGludCBjUGl4ZWxTaXplID0gNDsKLWNvbnN0IHN0YXRpYyBpbnQgY0FscGhhQ2hhbm5l
bE9mZnNldCA9IDM7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBjT3BhcXVlQWxwaGEgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGZmKTsKLQotQUxXQVlTX0lOTElORSBpbnQgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cExlZnRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBQaXhlbFZhbHVlKCkKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlT
X0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgp
Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdl
dChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdB
WVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmNlbnRlclBpeGVsVmFsdWUo
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
ZG93bkxlZnRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmRvd25SaWdodFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKExpZ2h0aW5nRGF0YSYgZGF0YSwgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLAotICAgIGludCBsaWdodFgsIGlu
dCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQg
bm9ybWFsWSkKLXsKLSAgICBtX2xpZ2h0U291cmNlLT51cGRhdGVQYWludGluZ0RhdGEocGFpbnRp
bmdEYXRhLCBsaWdodFgsIGxpZ2h0WSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEucGl4ZWxzLT5n
ZXQoZGF0YS5vZmZzZXQgKyAzKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7Ci0KLSAgICBkYXRhLm5v
cm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWCkgKiBk
YXRhLnN1cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotICAgIGRh
dGEubm9ybWFsVmVjdG9yLnNldFooMS4wZik7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iubm9ybWFs
aXplKCk7Ci0KLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxp
Z2h0aW5nKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAq
IChkYXRhLm5vcm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvcik7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yOwotICAgICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkg
KyAxLjBmKTsKLSAgICAgICAgaGFsZndheVZlY3Rvci5ub3JtYWxpemUoKTsKLSAgICAgICAgaWYg
KG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICAgICAgZGF0YS5saWdodFN0cmVu
Z3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndheVZl
Y3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1f
c3BlY3VsYXJDb25zdGFudCAqIHBvd2YoZGF0YS5ub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9y
LCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgIH0KLQotICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5n
dGggPiAxLjBmKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAxLjBmOwotICAgIGlmIChk
YXRhLmxpZ2h0U3RyZW5ndGggPCAwLjBmKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAw
LjBmOwotCi0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9y
LngoKSkpOwotICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JW
ZWN0b3IueSgpKSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5j
b2xvclZlY3Rvci56KCkpKTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoQ2Fu
dmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRh
dGE7Ci0KLSAgICBpZiAoIW1fbGlnaHRTb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBp
cyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2Uu
IE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWln
aHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSBwaXhl
bHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAg
ICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwot
ICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJlZCgpLCBtX2xpZ2h0aW5nQ29sb3Iu
Z3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7Ci0gICAgbV9saWdodFNvdXJjZS0+aW5p
dFBhaW50aW5nRGF0YShwYWludGluZ0RhdGEpOwotCi0gICAgLy8gVG9wL0xlZnQgY29ybmVyCi0g
ICAgZGF0YS5vZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwg
MCwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsg
MiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRh
LmRvd25SaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEu
Y2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRv
d25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7Ci0KLSAgICAvLyBU
b3AvUmlnaHQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICog
ZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0
YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKLSAgICAgICAg
LTIuMGYgLyAzLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhl
bFZhbHVlKCkpOwotCi0gICAgLy8gQm90dG9tL0xlZnQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSAr
IGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAr
IDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICog
ZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOwotCi0gICAgLy8g
Qm90dG9tL1JpZ2h0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBw
YWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkg
KyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExl
ZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVs
VmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSk7Ci0KLSAgICBpZiAod2lkdGgg
Pj0gMykgewotICAgICAgICAvLyBUb3AgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBp
eGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMu
MGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVl
KCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVl
KCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgp
IC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsg
ZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIEJvdHRv
bSBsaW5lCi0gICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAq
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBm
b3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9m
ZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGlu
Z0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0gICAgICAgICAgICAgICAgLTEu
MGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZh
bHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZh
bHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cExlZnRQaXhlbFZh
bHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUo
KSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAr
IGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhl
aWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRh
LCBwYWludGluZ0RhdGEsIDAsIHksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0
YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNl
bnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3du
UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQ
aXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFJpZ2h0IGxpbmUKLSAgICAgICAg
ZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkg
PSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChk
YXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwKLSAgICAgICAg
ICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBQ
aXhlbFZhbHVlKCkgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQ
aXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxW
YWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxW
YWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBJbnRlcmlvciBw
aXhlbHMKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3kpIHsKLSAgICAgICAgICAgIGRhdGEub2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1Bp
eGVsU2l6ZSkgewotICAgICAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgeSwKLSAgICAgICAgICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhl
bFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAg
IC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhl
bFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxW
YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCB0b3Rh
bFNpemUgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlm
IChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDM7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5z
ZXQoaSwgY09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEx
ID0gZGF0YS5waXhlbHMtPmdldChpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTIgPSBk
YXRhLnBpeGVscy0+Z2V0KGkgKyAxKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTMgPSBk
YXRhLnBpeGVscy0+Z2V0KGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQg
dG8gbWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBh
MSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVMaWdodGlu
Zzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdElt
YWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwotCi0gICAgSW50UmVj
dCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IHNyY0ltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGVmZmVjdERyYXdpbmdSZWN0KSk7Ci0gICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJh
eShzcmNJbWFnZURhdGEtPmRhdGEoKSk7Ci0KLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxV
bml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBX
MwotICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBi
cm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFy
aW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFi
bGUuCi0gICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUg
aW1wbGVtZW50YXRpb24KLQotICAgIGlmIChkcmF3TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwgZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSwgZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpKQotICAg
ICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VEYXRh
LmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSksIEludFBv
aW50KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVMaWdodGluZy5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNWR0ZF
TGlnaHRpbmdfaAotI2RlZmluZSBTVkdGRUxpZ2h0aW5nX2gKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIK
LSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZv
ciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKLQotY2xhc3MgRkVMaWdodGluZyA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseShG
aWx0ZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAg
RGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLQotICAg
IHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9y
OwotICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IGxpZ2h0
U3RyZW5ndGg7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAgICAgICAgaW50IG9mZnNl
dDsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwTGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAg
QUxXQVlTX0lOTElORSBpbnQgdXBQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
aW50IHVwUmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGxlZnRQ
aXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGNlbnRlclBpeGVsVmFsdWUo
KTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgcmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAg
IEFMV0FZU19JTkxJTkUgaW50IGRvd25MZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNf
SU5MSU5FIGludCBkb3duUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBk
b3duUmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgfTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdU
eXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKENh
bnZhc1BpeGVsQXJyYXkqLCBpbnQsIGludCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFBp
eGVsKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAotICAgICAgICBp
bnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQg
ZmFjdG9yWSwgaW50IG5vcm1hbFkpOwotCi0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBl
OwotICAgIFJlZlB0cjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1f
bGlnaHRpbmdDb2xvcjsKLSAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKLSAgICBmbG9hdCBtX2Rp
ZmZ1c2VDb25zdGFudDsKLSAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgZmxvYXQg
bV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7Ci0gICAg
ZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8g
U1ZHRkVMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNZXJnZS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgotCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRkVNZXJnZTo6RkVNZXJnZSgpIAotICAgIDogRmlsdGVyRWZmZWN0KCkKLXsKLX0KLQot
UGFzc1JlZlB0cjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRkVNZXJnZSk7Ci19Ci0KLXZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0
ZXIpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAg
QVNTRVJUKHNpemUgPiAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAg
aW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250
ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSkpOwotICAgIH0KLX0KLQotdm9pZCBGRU1lcmdlOjpkdW1wKCkKLXsKLX0KLQotVGV4
dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
aW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0
cyA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAg
QVNTRVJUKHNpemUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwg
IlwiXVxuIjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFTWVyZ2VfaAotI2RlZmluZSBT
VkdGRU1lcmdlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRU1lcmdlIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4g
Y3JlYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVh
bCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgRkVNZXJnZSgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRU1lcmdlX2gK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9n
eS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCi0KLSNpbmNsdWRlICJD
YW52YXNQaXhlbEFycmF5LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIHN0ZDo6bWluOwotdXNp
bmcgc3RkOjptYXg7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVNb3JwaG9sb2d5OjpGRU1v
cnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9h
dCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKLXsKLX0KLQot
UGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7
Ci19Ci0KLU1vcnBob2xvZ3lPcGVyYXRvclR5cGUgRkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3Bl
cmF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9s
b2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQot
ewotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLWZsb2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmFkaXVzWDsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKLXsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwot
fQotCi1mbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAotewotICAgIHJldHVybiBt
X3JhZGl1c1k7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1
c1kpCi17Ci0gICAgbV9yYWRpdXNZID0gcmFkaXVzWTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6
OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0K
LSAgICBpbnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNYICogZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fcmFkaXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
LSAgICBpZiAocmFkaXVzWCA8PSAwIHx8IHJhZGl1c1kgPD0gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgp
KTsKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgUmVm
UHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkoaW4tPnJlc3VsdEltYWdlKCktPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCkpOwotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVj
dC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaW50IGVmZmVjdFdpZHRoID0g
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgCi0gICAgLy8gTGltaXQgdGhlIHJh
ZGl1cyBzaXplIHRvIGVmZmVjdCBkaW1lbnNpb25zCi0gICAgcmFkaXVzWCA9IG1pbihlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzWCk7Ci0gICAgcmFkaXVzWSA9IG1pbihlZmZl
Y3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1c1kpOwotICAgIAotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBleHRyZW1hOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0RHJh
d2luZ1JlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgc3RhcnRZID0gbWF4KDAsIHkg
LSByYWRpdXNZKTsKLSAgICAgICAgaW50IGVuZFkgPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCkgLSAxLCB5ICsgcmFkaXVzWSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9
IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtl
cm5lbAotICAgICAgICAgICAgZXh0cmVtYS5jbGVhcigpOwotICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPD0gcmFkaXVzWDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBjb2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHN0YXJ0WSAqIGVmZmVjdFdpZHRo
ICsgNCAqIGogKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnRZ
OyBpIDw9IGVuZFk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBp
eGVsID0gc3JjUGl4ZWxBcnJheS0+Z2V0KGkgKiBlZmZlY3RXaWR0aCArIDQgKiBqICsgY2hhbm5l
bCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERSAmJiBwaXhlbCA8PSBjb2x1bW5FeHRyZW1hKSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIHBpeGVs
ID49IGNvbHVtbkV4dHJlbWEpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRXh0cmVt
YSA9IHBpeGVsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHRyZW1hLmFw
cGVuZChjb2x1bW5FeHRyZW1hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4gCi0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFggPSBtaW4oeCArIHJhZGl1c1gs
IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGNvbHVtbkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3RhcnRZICogZWZmZWN0
V2lkdGggKyBlbmRYICogNCArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSBzdGFydFk7IGkgPD0gZW5kWTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgcGl4ZWwgPSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdpZHRoICsgZW5kWCAq
IDQgKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEUgJiYgcGl4ZWwgPj0gY29sdW1uRXh0cmVtYSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW5FeHRyZW1hID0gcGl4ZWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICh4IC0gcmFkaXVzWCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92
ZSgwKTsKLSAgICAgICAgICAgICAgICBpZiAoeCArIHJhZGl1c1ggPD0gZWZmZWN0RHJhd2luZ1Jl
Y3Qud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0
cmVtYSk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbnRpcmVFeHRyZW1hID0gZXh0
cmVtYVswXTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGtlcm5lbEluZGV4ID0gMDsg
a2VybmVsSW5kZXggPCBleHRyZW1hLnNpemUoKTsgKytrZXJuZWxJbmRleCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYg
ZXh0cmVtYVtrZXJuZWxJbmRleF0gPD0gZW50aXJlRXh0cmVtYSkgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBleHRy
ZW1hW2tlcm5lbEluZGV4XSA+PSBlbnRpcmVFeHRyZW1hKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVudGlyZUV4dHJlbWEgPSBleHRyZW1hW2tlcm5lbEluZGV4XTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldCh5ICogZWZmZWN0V2lk
dGggKyA0ICogeCArIGNoYW5uZWwsIGVudGlyZUV4dHJlbWEpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEZF
TW9ycGhvbG9neTo6ZHVtcCgpCi17Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05P
V046Ci0gICAgICAgIHRzIDw8ICJVTktOT1dOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6Ci0gICAgICAgIHRzIDw8ICJFUk9ERSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURToKLSAgICAg
ICAgdHMgPDwgIkRJTEFURSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7
Ci19Ci0KLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIG9wZXJhdG9yPVwiIiA8PCBt
b3JwaG9sb2d5T3BlcmF0b3IoKSA8PCAiXCIgIgotICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IHJh
ZGl1c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVNb3JwaG9sb2d5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFTW9ycGhvbG9neV9o
Ci0jZGVmaW5lIFNWR0ZFTW9ycGhvbG9neV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewot
ICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKLSAgICBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUgPSAxLAotICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgPSAy
Ci19OwotCi1jbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsgIAotICAgIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7Ci0KLSAgICBmbG9h
dCByYWRpdXNYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSYWRpdXNYKGZsb2F0KTsKLQotICAgIGZs
b2F0IHJhZGl1c1koKSBjb25zdDsKLSAgICB2b2lkIHNldFJhZGl1c1koZmxvYXQpOwotCi0gICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0K
LSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKLSAg
ICAKLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3JhZGl1
c1g7Ci0gICAgZmxvYXQgbV9yYWRpdXNZOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBT
VkdGRU1vcnBob2xvZ3lfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgotCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICA6IEZp
bHRlckVmZmVjdCgpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU9mZnNldChkeCwgZHkpKTsKLX0KLQotZmxvYXQg
RkVPZmZzZXQ6OmR4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9keDsKLX0KLQotdm9pZCBGRU9m
ZnNldDo6c2V0RHgoZmxvYXQgZHgpCi17Ci0gICAgbV9keCA9IGR4OwotfQotCi1mbG9hdCBGRU9m
ZnNldDo6ZHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2R5OwotfQotCi12b2lkIEZFT2Zmc2V0
OjpzZXREeShmbG9hdCBkeSkKLXsKLSAgICBtX2R5ID0gZHk7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6
OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRl
eHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAg
IEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwot
ICAgIHNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0
aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoZmls
dGVyLT5lZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBtX2R4ICo9IHNvdXJjZUlt
YWdlUmVjdC53aWR0aCgpOwotICAgICAgICBtX2R5ICo9IHNvdXJjZUltYWdlUmVjdC5oZWlnaHQo
KTsKLSAgICB9Ci0gICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
OwotICAgIG1fZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7Ci0KLSAg
ICBGbG9hdFJlY3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgaW4tPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkueCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9keSArIGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0KCkp
OwotCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKLX0KLQotdm9pZCBGRU9mZnNldDo6ZHVtcCgp
Ci17Ci19Ci0KLVRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQpOwotICAgIHRzIDw8ICJbZmVPZmZzZXQiOyAKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwi
IGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVP
ZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBTVkdGRU9mZnNldF9oCi0jZGVmaW5lIFNWR0ZFT2Zmc2V0X2gKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZFT2Zm
c2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwotCi0gICAgZmxvYXQgZHgo
KSBjb25zdDsKLSAgICB2b2lkIHNldER4KGZsb2F0KTsKLQotICAgIGZsb2F0IGR5KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKLQotICAgIGZs
b2F0IG1fZHg7Ci0gICAgZmxvYXQgbV9keTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8g
U1ZHRkVPZmZzZXRfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRl
ICJTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCIKLQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFy
TGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwK
LSAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1Jl
ZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFy
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBsaWdodFNvdXJjZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAotICAg
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZh
Y2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKLSAgICAgICAga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwotfQotCi1G
RVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKQotewotfQotCi1Db2xvciBG
RVNwZWN1bGFyTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBt
X2xpZ2h0aW5nQ29sb3I7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRMaWdodGlu
Z0NvbG9yKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQotewotICAgIG1fbGlnaHRpbmdDb2xv
ciA9IGxpZ2h0aW5nQ29sb3I7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3VyZmFj
ZVNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdXJmYWNlU2NhbGU7Ci19Ci0KLXZvaWQg
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQot
ewotICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotfQotCi1mbG9hdCBGRVNwZWN1
bGFyTGlnaHRpbmc6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3Nw
ZWN1bGFyQ29uc3RhbnQ7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17Ci0gICAgbV9zcGVjdWxhckNvbnN0
YW50ID0gc3BlY3VsYXJDb25zdGFudDsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjpz
cGVjdWxhckV4cG9uZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50
OwotfQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9h
dCBzcGVjdWxhckV4cG9uZW50KQotewotICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFy
RXhwb25lbnQ7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6a2VybmVsVW5pdExlbmd0
aFgoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotfQotCi12b2lk
IEZFU3BlY3VsYXJMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5p
dExlbmd0aFgpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhY
OwotfQotCi1mbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQotdm9pZCBGRVNwZWN1
bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
KQotewotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQot
Y29uc3QgTGlnaHRTb3VyY2UqIEZFU3BlY3VsYXJMaWdodGluZzo6bGlnaHRTb3VyY2UoKSBjb25z
dAotewotICAgIHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOwotfQotCi12b2lkIEZFU3BlY3Vs
YXJMaWdodGluZzo6c2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRT
b3VyY2UpCi17Ci0gICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOwotfQotCi12b2lkIEZF
U3BlY3VsYXJMaWdodGluZzo6ZHVtcCgpCi17Ci19Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3VsYXJM
aWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2Zl
U3BlY3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzKTsKLSAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUg
PDwgIlwiICIKLSAgICAgICA8PCAic3BlY3VhbENvbnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29u
c3RhbnQgPDwgIlwiICIKLSAgICAgICA8PCAic3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVj
dWxhckV4cG9uZW50IDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRVNwZWN1bGFyTGlnaHRp
bmdfaAotI2RlZmluZSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAotCi0jaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0
aW5nIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotICAgIHZpcnR1YWwgfkZFU3BlY3Vs
YXJMaWdodGluZygpOwotCi0gICAgQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0OwotICAgIHZv
aWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgZmxvYXQgc3VyZmFjZVNj
YWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOwotCi0gICAgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFu
dChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7Ci0KLSAg
ICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsVW5p
dExlbmd0aFkoZmxvYXQpOwotCi0gICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZF
VGlsZS5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFVGlsZTo6RkVUaWxlKCkKLSAgICA6IEZpbHRlckVm
ZmVjdCgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVRpbGUpOwotfQotCi1GbG9hdFJlY3QgRkVUaWxlOjpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIp
OwotCi0gICAgZmlsdGVyLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24odGhpcywg
ZmlsdGVyLT5maWx0ZXJSZWdpb24oKSk7Ci0gICAgcmV0dXJuIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotfQotCi12b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIp
OwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAo
IWZpbHRlckNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgLy8gU291
cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZp
bHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJj
ZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1p
emF0aW9uLgotICAgIGlmIChpbi0+aXNTb3VyY2VJbnB1dCgpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwotICAgICAgICBmaWx0ZXJS
ZWdpb24uc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgICAgICB0aWxlUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZmlsdGVyUmVnaW9uKTsKLSAgICB9Ci0KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpKTsKLSAgICBH
cmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsK
LSAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwotICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRydWUp
OwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBtYXRyaXgudHJhbnNsYXRlKGlu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgaW4tPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KS55KCkpOwotICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShtYXRy
aXgpOwotCi0gICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7Ci0gICAg
ZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpKTsKLX0KLQotdm9pZCBGRVRpbGU6OmR1bXAo
KQotewotfQotCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCk7Ci0gICAgdHMgPDwgIltmZVRpbGUiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotCi0gICAgcmV0dXJuIHRz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVGlsZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgU1ZHRkVUaWxlX2gKLSNkZWZpbmUgU1ZHRkVUaWxlX2gKLQotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFz
cyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0
OwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKEZpbHRlciopOwotICAgIAotcHJpdmF0ZToKLSAgICBGRVRpbGUoKTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IlNWR0ZFVHVyYnVsZW5jZS5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vKgotICAgIFByb2R1Y2Vz
IHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAg
ciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKLSAg
ICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAg
ICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4g
MTk4OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3Vs
dCAxMDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhl
IG9yaWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2Ug
PSA0MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8v
IDIqKjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8g
NyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3
NzczOyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEK
LQotRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBt
X3R5cGUodHlwZSkKLSAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAg
LCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICwgbV9udW1PY3RhdmVzKG51
bU9jdGF2ZXMpCi0gICAgLCBtX3NlZWQoc2VlZCkKLSAgICAsIG1fc3RpdGNoVGlsZXMoc3RpdGNo
VGlsZXMpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNy
ZWF0ZShUdXJidWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsK
LX0KLQotVHVyYnVsYW5jZVR5cGUgRkVUdXJidWxlbmNlOjp0eXBlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90eXBlOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxhbmNl
VHlwZSB0eXBlKQotewotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLWZsb2F0IEZFVHVyYnVsZW5j
ZTo6YmFzZUZyZXF1ZW5jeVkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Jhc2VGcmVxdWVuY3lZ
OwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZy
ZXF1ZW5jeVkpCi17Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwotfQot
Ci1mbG9hdCBGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lYKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9iYXNlRnJlcXVlbmN5WDsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVx
dWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQotewotICAgICAgIG1fYmFzZUZyZXF1ZW5jeVgg
PSBiYXNlRnJlcXVlbmN5WDsKLX0KLQotZmxvYXQgRkVUdXJidWxlbmNlOjpzZWVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zZWVkOyAKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQo
ZmxvYXQgc2VlZCkKLXsKLSAgICBtX3NlZWQgPSBzZWVkOwotfQotCi1pbnQgRkVUdXJidWxlbmNl
OjpudW1PY3RhdmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9udW1PY3RhdmVzOwotfQotCi12
b2lkIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhib29sIG51bU9jdGF2ZXMpCi17Ci0gICAg
bV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnN0aXRj
aFRpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGl0Y2hUaWxlczsKLX0KLQotdm9pZCBG
RVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAgIG1fc3RpdGNo
VGlsZXMgPSBzdGl0Y2g7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUg
aXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVj
aWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2Zl
VHVyYnVsZW5jZQotCi1GRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKGxv
bmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCi0gICAgOiBzZWVk
KHBhaW50aW5nU2VlZCkKLSAgICAsIHdpZHRoKDApCi0gICAgLCBoZWlnaHQoMCkKLSAgICAsIHdy
YXBYKDApCi0gICAgLCB3cmFwWSgwKQotICAgICwgY2hhbm5lbCgwKQotICAgICwgZmlsdGVyU2l6
ZShwYWludGluZ1NpemUpCi17Ci19Ci0KLS8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIu
Ci1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAg
ICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3Jh
bmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJl
c3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0
dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0KLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBv
bGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICog
KGIgLSBhKTsKLX0KLQotaW5saW5lIHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsK
LQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4
aW11bSAtIDFdLgotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWlu
dGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEp
KSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0g
ICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9h
dCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2No
YW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAg
ICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAg
ICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5y
YW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXpl
OwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxv
Y2tTaXplOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHNxcnRmKGdyYWRpZW50
WzBdICogZ3JhZGllbnRbMF0gKyBncmFkaWVudFsxXSAqIGdyYWRpZW50WzFdKTsKLSAgICAgICAg
ICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFk
aWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotICAgIGZv
ciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsg
PSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50
aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsK
LSAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
al07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAg
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBj
aGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtpXVswXTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBjaGVja05vaXNlKGludCYg
bm9pc2VWYWx1ZSwgaW50IGxpbWl0VmFsdWUsIGludCBuZXdWYWx1ZSkKLXsKLSAgICBpZiAobm9p
c2VWYWx1ZSA+PSBsaW1pdFZhbHVlKQotICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlOwot
ICAgIGlmIChub2lzZVZhbHVlID49IGxpbWl0VmFsdWUgLSAxKQotICAgICAgICBub2lzZVZhbHVl
IC09IG5ld1ZhbHVlIC0gMTsKLX0KLQotZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKLXsK
LSAgICBzdHJ1Y3QgTm9pc2UgewotICAgICAgICBpbnQgbm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZTsKLSAgICAgICAgZmxvYXQgbm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWU7Ci0KLSAgICAgICAg
Tm9pc2UoZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCBwb3Np
dGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAg
ICBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSA9IHBvc2l0aW9uIC0gbm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZSBub2lzZVgobm9pc2VW
ZWN0b3IueCgpKTsKLSAgICBOb2lzZSBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLSAgICBmbG9h
dCogcTsKLSAgICBmbG9hdCBzeCwgc3ksIGEsIGIsIHUsIHY7Ci0KLSAgICAvLyBJZiBzdGl0Y2hp
bmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0Y2hU
aWxlcykgewotICAgICAgICBjaGVja05vaXNlKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlLCBwYWludGluZ0RhdGEud3JhcFgsIHBhaW50aW5nRGF0YS53aWR0aCk7Ci0gICAgICAgIGNo
ZWNrTm9pc2Uobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUsIHBhaW50aW5nRGF0YS53
cmFwWSwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci0gICAgfQotCi0gICAgbm9pc2VYLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWVdOwotICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3Rvclsobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxKSAmIHNfYmxvY2tNYXNr
XTsKLQotICAgIHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlKTsKLSAgICBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSk7Ci0KLSAgICAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLSAg
ICBpbnQgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAgIHEgPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwotICAgIHUgPSBub2lzZVgubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFj
dGlvblZhbHVlICogcVsxXTsKLSAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwot
ICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBd
OwotICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBd
ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKLSAgICBhID0gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0gICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFu
bmVsXVt0ZW1wXTsKLSAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICog
cVswXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07Ci0g
ICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07Ci0gICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Ci0gICAgdiA9IChub2lz
ZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyAobm9pc2VZLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOwotICAgIGIgPSBsaW5lYXJJbnRlcnBv
bGF0aW9uKHN4LCB1LCB2KTsKLSAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwg
Yik7Ci19Ci0KLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNl
VmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNp
emUud2lkdGgoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7Ci0gICAgZmxvYXQgdGlsZUhl
aWdodCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLmhlaWdodCgpOwotICAgIEFTU0VSVCh0aWxl
SGVpZ2h0ID4gMCk7Ci0gICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZyZXF1ZW5jaWVzIGlmIG5lY2Vz
c2FyeSBmb3Igc3RpdGNoaW5nLgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIC8v
IFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJl
IGFkanVzdGVkCi0gICAgICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNv
bnRpbnVvdXMuCi0gICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgICAgICBm
bG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCkg
LyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGls
ZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICAvLyBC
YXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFu
ZGFyZC4KLSAgICAgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwg
aGlnaEZyZXF1ZW5jeSAvIG1fYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAgICAgbV9iYXNl
RnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9iYXNlRnJlcXVlbmN5WSkgewotICAgICAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5
ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0g
ICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIG1fYmFz
ZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVu
Y3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIG1fYmFzZUZyZXF1ZW5jeVkpCi0g
ICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZID0gaGlnaEZyZXF1ZW5j
eTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZXQgdXAgVHVyYnVsZW5jZUluaXRpYWwgc3RpdGNo
IHZhbHVlcy4KLSAgICAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAq
IG1fYmFzZUZyZXF1ZW5jeVgpOwotICAgICAgICBwYWludGluZ0RhdGEud3JhcFggPSBzX3Blcmxp
bk5vaXNlICsgcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICBwYWludGluZ0RhdGEuaGVpZ2h0
ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAg
fQotICAgIGZsb2F0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IDA7Ci0gICAgRmxvYXRQb2lu
dCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBtX2Jhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBt
X2Jhc2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0
YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAo
bV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0
b3IpIC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCArPSBmYWJzZihub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJh
dGlvOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAg
ICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRp
byAqPSAyOwotICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBk
YXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2VvaXNlIGJlZm9yZSB0
aGUgbXVsdGlwbGljYXRpb24gYW5kCi0gICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJk
IHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBYID0gMiAqIHBh
aW50aW5nRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBwYWludGluZ0Rh
dGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSAyICogcGFp
bnRpbmdEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UK
LSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5j
ZS4KLSAgICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
ICogMC41ZiArIDAuNWY7Ci0gICAgLy8gQ2xhbXAgcmVzdWx0Ci0gICAgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ID0gc3RkOjptYXgoc3RkOjptaW4odHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAx
LmYpLCAwLmYpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCkt
PnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZVJlY3Quc2l6ZSgpLndpZHRoKCkgfHwgIWltYWdlUmVj
dC5zaXplKCkuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFn
ZVJlY3QuaGVpZ2h0KCkpOwotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCBp
bWFnZVJlY3Quc2l6ZSgpKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwotICAgIEZsb2F0
UG9pbnQgcG9pbnQ7Ci0gICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdpb24ueSgpKTsKLSAgICBpbnQg
aW5kZXhPZlBpeGVsQ2hhbm5lbCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZVJl
Y3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwot
ICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHBvaW50LnNl
dFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBmb3IgKHBhaW50aW5nRGF0YS5jaGFubmVs
ID0gMDsgcGFpbnRpbmdEYXRhLmNoYW5uZWwgPCA0OyArK3BhaW50aW5nRGF0YS5jaGFubmVsLCAr
K2luZGV4T2ZQaXhlbENoYW5uZWwpCi0gICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkt
PnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChwYWludGluZ0RhdGEsIHBvaW50KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0SW1h
Z2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0
LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQotewotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHVyYnVs
YW5jZVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGRVRVUkJV
TEVOQ0VfVFlQRV9VTktOT1dOOgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfVFVSQlVMRU5DRToKLSAgICAgICAgdHMg
PDwgIlRVUkJVTEFOQ0UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFVFVSQlVMRU5DRV9U
WVBFX0ZSQUNUQUxOT0lTRToKLSAgICAgICAgdHMgPDwgIk5PSVNFIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAot
ewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVUdXJidWxlbmNl
IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRz
IDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJhc2VGcmVxdWVu
Y3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5WSgpIDw8
ICJcIiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgotICAgICAgIDw8
ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAgICA8PCAic3Rp
dGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVR1cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRVR1cmJ1bGVuY2VfaAotI2Rl
ZmluZSBTVkdGRVR1cmJ1bGVuY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBUdXJidWxhbmNlVHlwZSB7Ci0gICAgRkVUVVJCVUxF
TkNFX1RZUEVfVU5LTk9XTiA9IDAsCi0gICAgRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNF
ID0gMSwKLSAgICBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFID0gMgotfTsKLQotY2xhc3Mg
RkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBm
bG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7Ci0KLSAgICBUdXJidWxhbmNlVHlwZSB0eXBlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRUeXBlKFR1cmJ1bGFuY2VUeXBlKTsKLQotICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lZKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCk7Ci0K
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QmFzZUZyZXF1
ZW5jeVgoZmxvYXQpOwotCi0gICAgZmxvYXQgc2VlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vl
ZChmbG9hdCk7Ci0KLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0OwotICAgIHZvaWQgc2V0TnVt
T2N0YXZlcyhib29sKTsKLQotICAgIGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdDsKLSAgICB2b2lk
IHNldFN0aXRjaFRpbGVzKGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciop
OwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAg
c3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0
cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50
WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBpbnQgd2lkdGg7IC8vIEhvdyBt
dWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IGhlaWdo
dDsKLSAgICAgICAgaW50IHdyYXBYOyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAg
IGludCB3cmFwWTsKLSAgICAgICAgaW50IGNoYW5uZWw7Ci0gICAgICAgIEludFNpemUgZmlsdGVy
U2l6ZTsKLQotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IElu
dFNpemUmIHBhaW50aW5nU2l6ZSk7Ci0gICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOwotICAg
IH07Ci0KLSAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50
LCBmbG9hdCwgYm9vbCk7Ci0KLSAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRh
Jik7Ci0gICAgZmxvYXQgbm9pc2UyRChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7
Ci0gICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWlu
dGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBUdXJidWxhbmNlVHlwZSBtX3R5
cGU7Ci0gICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBtX2Jhc2VGcmVxdWVu
Y3lZOwotICAgIGludCBtX251bU9jdGF2ZXM7Ci0gICAgZmxvYXQgbV9zZWVkOwotICAgIGJvb2wg
bV9zdGl0Y2hUaWxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVUdXJidWxl
bmNlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRT
b3VyY2UuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHTGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotI2lu
Y2x1ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR1BvaW50TGlnaHRT
b3VyY2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZH
U3BvdExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEo
UGFpbnRpbmdEYXRhJikKLXsKLX0KLQotdm9pZCBQb2ludExpZ2h0U291cmNlOjp1cGRhdGVQYWlu
dGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQg
eikKLXsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAt
IHgpOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0g
eSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6
KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7Ci19Ci0KLS8vIHNw
b3QtbGlnaHQgZWRnZSBkYXJrZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNvbHV0ZSB0cmVzaG9sZAot
Ly8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKLXN0
YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKLQotdm9pZCBTcG90
TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEp
Ci17Ci0gICAgcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3RvciA9IHBhaW50aW5nRGF0YS5j
b2xvclZlY3RvcjsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFgobV9kaXJl
Y3Rpb24ueCgpIC0gbV9wb3NpdGlvbi54KCkpOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25W
ZWN0b3Iuc2V0WShtX2RpcmVjdGlvbi55KCkgLSBtX3Bvc2l0aW9uLnkoKSk7Ci0gICAgcGFpbnRp
bmdEYXRhLmRpcmVjdGlvblZlY3Rvci5zZXRaKG1fZGlyZWN0aW9uLnooKSAtIG1fcG9zaXRpb24u
eigpKTsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOwotCi0g
ICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25l
Q3V0T2ZmTGltaXQgPSAwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9
IC1hbnRpQWxpYXNUcmVzaG9sZDsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBsaW1pdGlu
Z0NvbmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0Nv
bmVBbmdsZSA8IDAuMGYpCi0gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IC1saW1pdGlu
Z0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlID4gOTAuMGYpCi0gICAg
ICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEu
Y29uZUN1dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxpbWl0aW5nQ29uZUFuZ2xl
KSk7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNv
bmVDdXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOwotICAgIH0KLQotICAgIC8vIE9wdGlt
aXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVzCi0gICAgaWYgKCFtX3Nw
ZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0g
MDsKLSAgICBlbHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKLSAgICAgICAgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOwotICAgIGVsc2UgLy8gSXQgaXMgbmVpdGhl
ciAwLjBmIG5vciAxLjBmCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0g
MjsKLX0KLQotdm9pZCBTcG90TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KQotewotICAgIHBhaW50
aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7Ci0gICAgcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5KTsKLSAgICBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHopOwotICAgIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGZsb2F0IGNvc2luZU9mQW5nbGUg
PSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9y
OwotICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCkg
ewotICAgICAgICAvLyBObyBsaWdodCBpcyBwcm9kdWNlZCwgc2NhbmxpbmVzIGFyZSBub3QgdXBk
YXRlZAotICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WCgwLjBmKTsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFkoMC4wZik7Ci0gICAgICAgIHBhaW50aW5n
RGF0YS5jb2xvclZlY3Rvci5zZXRaKDAuMGYpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gU2V0IHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwKLSAgICBmbG9hdCBsaWdodFN0cmVuZ3Ro
OwotICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQpIHsKLSAgICBjYXNl
IDA6Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDAg
PT0gMQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSAtY29zaW5lT2ZBbmdsZTsgLy8gLWNvc2luZU9mQW5nbGUgXiAxID09IC1jb3NpbmVPZkFuZ2xl
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSBw
b3dmKC1jb3NpbmVPZkFuZ2xlLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lRnVsbExp
Z2h0KQotICAgICAgICBsaWdodFN0cmVuZ3RoICo9IChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxp
bWl0IC0gY29zaW5lT2ZBbmdsZSkgLyAocGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIHBh
aW50aW5nRGF0YS5jb25lRnVsbExpZ2h0KTsKLQotICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMS4w
ZikKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7Ci0KLSAgICBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3Iuc2V0WChwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLngoKSAqIGxpZ2h0
U3RyZW5ndGgpOwotICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZKHBhaW50aW5nRGF0
YS5wcml2YXRlQ29sb3JWZWN0b3IueSgpICogbGlnaHRTdHJlbmd0aCk7Ci0gICAgcGFpbnRpbmdE
YXRhLmNvbG9yVmVjdG9yLnNldFoocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci56KCkg
KiBsaWdodFN0cmVuZ3RoKTsKLX0KLQotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgYXppbXV0
aCA9IGRlZzJyYWQobV9hemltdXRoKTsKLSAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1f
ZWxldmF0aW9uKTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChjb3NmKGF6aW11
dGgpICogY29zZihlbGV2YXRpb24pKTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0
WShzaW5mKGF6aW11dGgpICogY29zZihlbGV2YXRpb24pKTsKLSAgICBwYWludGluZ0RhdGEubGln
aHRWZWN0b3Iuc2V0WihzaW5mKGVsZXZhdGlvbikpOwotfQotCi12b2lkIERpc3RhbnRMaWdodFNv
dXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCwgaW50LCBmbG9hdCkK
LXsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZsb2F0UG9pbnQzRCYgcCkKLXsKLSAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0i
IDw8IHAueSgpIDw8ICIgej0iIDw8IHAueigpOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0
cmVhbSYgUG9pbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9UE9JTlQtTElHSFRdICI7Ci0gICAgdHMg
PDwgIltwb3NpdGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJdIjsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLVRleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0g
IjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAg
IHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsKLSAgICB0cyA8
PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8PCAiXCJdIjsK
LSAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0NvbmVBbmdsZSgp
IDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0
U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewot
ICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIHRzIDw8ICJbYXppbXV0aD1c
IiIgPDwgYXppbXV0aCgpIDw8ICJcIl0iOwotICAgIHRzIDw8ICJbZWxldmF0aW9uPVwiIiA8PCBl
bGV2YXRpb24oKSA8PCAiXCJdIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaAkocmV2
aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0xpZ2h0
U291cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIExpZ2h0VHlw
ZSB7Ci0gICAgTFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBMU19TUE9UCi19OwotCi1j
bGFzcyBUZXh0U3RyZWFtOwotCi1jbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVk
PExpZ2h0U291cmNlPiB7Ci1wdWJsaWM6Ci0KLSAgICAvLyBMaWdodCB2ZWN0b3JzIG11c3QgYmUg
Y2FsY3VsYXRlZCBmb3IgZXZlcnkgcGl4ZWwgZHVyaW5nCi0gICAgLy8gcGFpbnRpbmcuIEl0IGlz
IGV4cGVuc2l2ZSB0byBwYXNzIGFsbCB0aGVzZSBhcmd1bWVudHMgdG8KLSAgICAvLyBhIGZyZXF1
ZW50bHkgY2FsbGVkIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGJlY2F1c2Ugbm90IGFsbAotICAgIC8v
IGxpZ2h0IHNvdXJjZXMgcmVxdWlyZSBhbGwgb2YgdGhlbS4gSW5zdGVhZCwgd2UganVzdCBwYXNz
Ci0gICAgLy8gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKLSAgICBzdHJ1
Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgLy8gU1ZHRkVMaWdodGluZyBhbHNvIHVzZSB0aGVt
Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKLSAgICAgICAgRmxvYXRQb2ludDNE
IGNvbG9yVmVjdG9yOwotICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMKLSAgICAgICAgRmxvYXRQ
b2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAgICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xv
clZlY3RvcjsKLSAgICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwotICAgICAgICBmbG9hdCBj
b25lRnVsbExpZ2h0OwotICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICB9OwotCi0g
ICAgTGlnaHRTb3VyY2UoTGlnaHRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgeyB9Ci0KLSAgICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpIHsgfQotCi0gICAgTGlnaHRUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpID0gMDsKLSAgICAvLyB6
IGlzIGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5
IGEgdXNlcgotICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2gg
dHlwZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkCi0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopID0g
MDsKLQotcHJpdmF0ZToKLSAgICBMaWdodFR5cGUgbV90eXBlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0K
LSNlbmRpZiAvLyBTVkdMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFNWR1BvaW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdQb2ludExpZ2h0U291
cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNW
R0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUG9pbnRMaWdo
dFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50TGlnaHRTb3VyY2Uo
cG9zaXRpb24pKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWlu
dGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwotCi0gICAgdmlydHVh
bCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9z
aXRpb24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV9wb3Np
dGlvbihwb3NpdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRp
b247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR1BvaW50TGlnaHRTb3VyY2VfaApJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNv
dXJjZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHU3BvdExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdTcG90TGlnaHRTb3VyY2VfaAot
I2RlZmluZSBTVkdTcG90TGlnaHRTb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBTcG90TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGly
ZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0
aW9uLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7Ci0g
ICAgfQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAgZmxvYXQgbGltaXRpbmdD
b25lQW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2xpbWl0aW5nQ29uZUFuZ2xlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgeik7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFNwb3RMaWdodFNvdXJjZShjb25z
dCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwK
LSAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUp
Ci0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfU1BPVCkKLSAgICAgICAgLCBtX3Bvc2l0aW9uKHBv
c2l0aW9uKQotICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX3Nw
ZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0aW5nQ29u
ZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50
M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9kaXJlY3Rpb247Ci0KLSAgICBmbG9h
dCBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHU3BvdExpZ2h0U291cmNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68224</attachid>
            <date>2010-09-21 05:42:12 -0700</date>
            <delta_ts>2010-09-21 07:32:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46177-20100921144207.patch</filename>
            <type>text/plain</type>
            <size>345374</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMTAtMDktMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IEZpbHRlckVmZmVjdHMgaW5kZXBlbmRlbnQgb2YgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE3NworCisgICAgICAgIE1vdmluZyBhbGwgRmls
dGVyRWZmZWN0cyBmcm9tIHN2Zy9ncmFwaGljcy9maWx0ZXJzIHRvIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMsIG5vdyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIFNWRy4g
UmVtb3ZlZCB0aGUgU1ZHIHByZWZpeCBvZiB0aGUgZmlsZXMgYW5kIHVwZGF0ZWQgdGhlIGhlYWRl
cnMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50TGlnaHRTb3VyY2Uu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9s
dmVNYXRyaXguY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFQ29udm9sdmVNYXRyaXguaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmguCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDog
Q29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6
IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6IENvcGllZCBmcm9tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6IENvcGllZCBmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVPZmZzZXQuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU9mZnNldC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRVRpbGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVHVyYnVsZW5jZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0xpZ2h0U291cmNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xp
Z2h0U291cmNlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdQb2ludExpZ2h0U291cmNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9TcG90TGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExp
Z2h0RWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0Rpc3RhbnRMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpc3BsYWNlbWVudE1hcC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5j
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291
cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdo
dFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Bv
aW50TGlnaHRTb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdTcG90TGlnaHRTb3VyY2UuaDogUmVtb3ZlZC4KKwogMjAxMC0wOS0yMSAgSm9jaGVuIEVp
c2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJl
bXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29y
a2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMywxOCBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NB
TF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIFwK
IAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKIAlwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIFwKLQlwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgXAorCXBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIFwKKwlwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuY3BwCiBlbmRpZgogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NB
TF9TUkNfRklMRVMpIFwKQEAgLTk1NiwyMCArOTY3LDkgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCXN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgXAogCVwK
LQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBcCi0Jc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKLQlzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRmxvb2QuY3BwIFwKIAlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBc
Ci0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAgXAotCXN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
T2Zmc2V0LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCBcCi0Jc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcCBcCiAJc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAorCXN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCiBlbmRpZgogCiBMT0NBTF9TUkNfRklM
RVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjU3LDkgKzEyNTcs
MjEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiAKQEAgLTE4MTIsMjEgKzE4MjQsOSBAQCBJRiAo
RU5BQkxFX1NWRykKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAK
ICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKICAgICAgICAgc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNv
bnZvbHZlTWF0cml4LmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1
c2VMaWdodGluZy5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3Bw
CiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCi0gICAgICAgIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTW9ycGhvbG9neS5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZz
ZXQuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAotICAgICAg
ICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCiAgICAgICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
TGlnaHRTb3VyY2UuY3BwCiAgICAgKQogRU5ESUYoKQogCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSw2
ICsyMDg1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKQEAgLTIwOTMsMTcgKzIwOTQsNDMgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKQEAgLTI4NTYsMzkgKzI4
ODMsMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9Db2xvckRpc3RhbmNl
LmggXAogCVdlYkNvcmUvc3ZnL0VsZW1lbnRUaW1lQ29udHJvbC5oIFwKIAlXZWJDb3JlL3N2Zy9H
cmFkaWVudEF0dHJpYnV0ZXMuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdE
aXN0YW50TGlnaHRTb3VyY2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUNvbnZvbHZlTWF0cml4LmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUNvbnZvbHZlTWF0cml4LmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVE
aWZmdXNlTGlnaHRpbmcuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVE
aXNwbGFjZW1lbnRNYXAuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlzcGxhY2VtZW50TWFwLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVG
bG9vZC5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIFwKIAlXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUxpZ2h0aW5nLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNZXJnZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5o
IFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAgXAot
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmggXAotCVdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwIFwKLQlXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVGlsZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5j
ZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgg
XAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgXAog
CVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIFwKIAlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgXAogCVdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHTGlnaHRTb3VyY2UuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0xpZ2h0U291cmNlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRM
aWdodFNvdXJjZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdo
dFNvdXJjZS5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgXAogCVdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmggXAogCVdlYkNvcmUvc3ZnL0xpbmVhckdyYWRpZW50
QXR0cmlidXRlcy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUzLDYgKzIzNTMsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAnLApAQCAtMjM2MSw4ICsyMzYyLDM0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgnLApAQCAtMzc3MiwzOSArMzc5OSwxMiBAQAogICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
aCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291
cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVN
YXRyaXguY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZv
bHZlTWF0cml4LmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVEaWZmdXNlTGlnaHRpbmcuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUZsb29kLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVGbG9vZC5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNw
cCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oJywK
LSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcCcsCi0gICAg
ICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oJywKLSAgICAgICAgICAg
ICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwJywKLSAgICAgICAgICAg
ICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaCcsCi0gICAgICAgICAgICAn
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwJywKLSAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwJywKLSAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCcsCi0gICAgICAgICAgICAn
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRT
b3VyY2UuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNv
dXJjZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0
U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdo
dFNvdXJjZS5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwJywKICAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCcsCiAgICAgICAgICAgICAnc3ZnL0Nv
bG9yRGlzdGFuY2UuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgxLDggKzE5ODEsMjAgQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggXAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXApAQCAtMjI3NCwy
MSArMjI4Niw5IEBAIEhFQURFUlMgKz0gXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBc
CiAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIFwKICAgICBzdmcvQ29sb3JEaXN0
YW5jZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4Lmgg
XAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAotICAg
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmggXAotICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaCBcCiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgg
XAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaCBcCi0gICAgc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFT2Zmc2V0LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJM
aWdodGluZy5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaCBcCi0gICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmggXAogICAgIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBcCiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmgg
XAogICAgIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIFwKICAgICBzdmcvU1ZHQUVsZW1lbnQuaCBc
CiAgICAgc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5oIFwKQEAgLTMxMDYsOCArMzEwNiwyMCBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMVEVSUz0xKSB7CiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAg
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogfQpAQCAtMzM3NiwyMSAr
MzM4OCw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBzdmcv
YW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAg
XAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBc
Ci0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBc
Ci0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBc
Ci0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwIFwKICAgICAgICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTWVyZ2UuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVN
b3JwaG9sb2d5LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0
LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwKLSAg
ICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcCBcCiAgICAgICAg
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgXAogICAg
ICAgICByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2OTA3LDYgKzI2OTA3LDEwIEBA
CiAJCQkJCU5hbWU9ImZpbHRlcnMiDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xEaXN0YW50TGlnaHRTb3VyY2Uu
aCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUJsZW5kLmNwcCINCiAJCQkJCQk+
DQogCQkJCQk8L0ZpbGU+DQpAQCAtMjY5MzksNiArMjY5NDMsMzggQEAKIAkJCQkJCT4NCiAJCQkJ
CTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xmaWx0ZXJzXEZFQ29udm9sdmVNYXRyaXguY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwv
RmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xmaWx0ZXJzXEZFQ29udm9sdmVNYXRyaXguaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+
DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
ZmlsdGVyc1xGRURpZmZ1c2VMaWdodGluZy5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcRkVEaWZmdXNlTGlnaHRpbmcuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJ
CQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVy
c1xGRURpc3BsYWNlbWVudE1hcC5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJ
PEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNc
RkVEaXNwbGFjZW1lbnRNYXAuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8Rmls
ZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUZs
b29kLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUZsb29kLmgiDQorCQkJ
CQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVHYXVzc2lhbkJsdXIuY3BwIg0KIAkJCQkJCT4N
CiAJCQkJCTwvRmlsZT4NCkBAIC0yNjk0Nyw2ICsyNjk4Myw2MiBAQAogCQkJCQkJPg0KIAkJCQkJ
PC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGZpbHRlcnNcRkVMaWdodGluZy5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcRkVMaWdodGluZy5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxl
DQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTWVy
Z2UuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTWVyZ2UuaCINCisJCQkJ
CQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU1vcnBob2xvZ3kuY3BwIg0KKwkJCQkJCT4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xmaWx0ZXJzXEZFTW9ycGhvbG9neS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmls
ZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xmaWx0ZXJzXEZFT2Zmc2V0LmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8
RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xG
RU9mZnNldC5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFU3BlY3VsYXJMaWdo
dGluZy5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVTcGVjdWxhckxpZ2h0
aW5nLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVUaWxlLmNwcCINCisJCQkJ
CQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVRpbGUuaCINCisJCQkJCQk+DQorCQkJCQk8L0Zp
bGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZmlsdGVyc1xGRVR1cmJ1bGVuY2UuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJ
CQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0
ZXJzXEZFVHVyYnVsZW5jZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxl
DQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZpbHRl
ci5oIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0yNjk2Nyw2ICsyNzA1OSwxOCBAQAog
CQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcTGlnaHRTb3VyY2UuY3BwIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXExpZ2h0U291cmNlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9G
aWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGZpbHRlcnNcUG9pbnRMaWdodFNvdXJjZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4N
CisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXFNvdXJjZUFscGhhLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtMjY5
ODIsNiArMjcwODYsMTAgQEAKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZmlsdGVyc1xTb3VyY2VHcmFwaGljLmgiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRl
cnNcU3BvdExpZ2h0U291cmNlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KIAkJCQk8L0Zp
bHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8RmlsdGVyDQpAQCAtMjc0NDksNiArMjc1NTcsNyBA
QAogCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCiAJCQkJCQkJLz4NCiAJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KKw0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KIAkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCkBAIC00MzMxNCw2ICs0MzQyMyw3IEBACiAJCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5h
bHxXaW4zMiINCiAJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCiAJCQkJCQk+DQorDQog
CQkJCQkJPFRvb2wNCiAJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCiAJCQkJCQkvPg0K
QEAgLTUxMTQzLDQyICs1MTI1Myw2IEBACiAJCQkJCU5hbWU9ImZpbHRlcnMiDQogCQkJCQk+DQog
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHRGlzdGFudExpZ2h0U291cmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJ
PEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZF
Q29udm9sdmVNYXRyaXguY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUNvbnZv
bHZlTWF0cml4LmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVEaWZmdXNlTGlnaHRpbmcu
aCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwIg0K
LQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRURpc3BsYWNlbWVudE1hcC5oIg0KLQkJCQkJ
CT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUZsb29kLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0Zp
bGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZp
bHRlcnNcU1ZHRkVGbG9vZC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUltYWdl
LmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtNTExODcsNjIgKzUxMjYxLDYgQEAK
IAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUxpZ2h0aW5nLmNwcCINCi0JCQkJCQk+DQot
CQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdy
YXBoaWNzXGZpbHRlcnNcU1ZHRkVMaWdodGluZy5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4N
Ci0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVy
c1xTVkdGRU1lcmdlLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0K
LQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVNZXJnZS5o
Ig0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1vcnBob2xvZ3kuY3BwIg0KLQkJCQkJ
CT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1vcnBob2xvZ3kuaCINCi0JCQkJCQk+DQotCQkJCQk8
L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNz
XGZpbHRlcnNcU1ZHRkVPZmZzZXQuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJ
CTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdG
RU9mZnNldC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVNwZWN1bGFyTGlnaHRp
bmcuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVNwZWN1bGFyTGlnaHRpbmcu
aCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVUaWxlLmNwcCINCi0JCQkJCQk+DQot
CQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdy
YXBoaWNzXGZpbHRlcnNcU1ZHRkVUaWxlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJ
CQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNW
R0ZFVHVyYnVsZW5jZS5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUN
Ci0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFVHVyYnVs
ZW5jZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGaWx0ZXIuY3BwIg0KIAkJCQkJ
CT4NCiAJCQkJCTwvRmlsZT4NCkBAIC01MTI1OCwyMiArNTEyNzYsNiBAQAogCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGaWx0ZXJCdWlsZGVyLmgiDQogCQkJ
CQkJPg0KIAkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0xpZ2h0U291cmNlLmNwcCINCi0JCQkJCQk+DQotCQkJ
CQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBo
aWNzXGZpbHRlcnNcU1ZHTGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHUG9pbnRMaWdodFNvdXJjZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdTcG90
TGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQogCQkJCTwvRmlsdGVyPg0K
IAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwNDgsMzIgKzQw
NDgsMzIgQEAKIAkJQjIzN0M4QTgwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM3QzhBNjBEMzQ0
RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCAqLzsgfTsKIAkJQjI0MDU1NjUwQjVCRTY0MDAw
MkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjQwNTU2MzBCNUJFNjQwMDAyQTI4QzAg
LyogRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJQjI0MDU1NjYwQjVC
RTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI0MDU1NjQwQjVCRTY0
MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oICovOyB9Owot
CQlCMjU1OTk3MTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRGlzdGFudExpZ2h0U291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThENzBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHRGlzdGFudExpZ2h0U291cmNlLmggKi87IH07Ci0JCUIyNTU5OTdB
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEUwMEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4LmNwcCAqLzsgfTsKLQkJQjI1NTk5N0IwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEUxMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUNv
bnZvbHZlTWF0cml4LmggKi87IH07Ci0JCUIyNTU5OTdDMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdG
RURpZmZ1c2VMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjU1OThFMjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuY3BwICovOyB9OwotCQlCMjU1OTk3RDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5OEUzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5oICovOyB9
OwotCQlCMjU1OTk3RTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTQw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCAqLzsgfTsKLQkJQjI1
NTk5N0YwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFNTBEMDBEOEI5MDBC
QjgyNUMgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCAqLzsgfTsKLQkJQjI1NTk5ODAwRDAwRDhC
QTAwQkI4MjVDIC8qIFNWR0ZFRmxvb2QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTYwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRmxvb2Qu
Y3BwICovOyB9OwotCQlCMjU1OTk4MTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVGbG9vZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTcwRDAw
RDhCOTAwQkI4MjVDIC8qIFNWR0ZFRmxvb2QuaCAqLzsgfTsKKwkJQjI1NTk5NzEwRDAwRDhCQTAw
QkI4MjVDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RDcwRDAwRDhCOTAwQkI4MjVDIC8qIERpc3RhbnRM
aWdodFNvdXJjZS5oICovOyB9OworCQlCMjU1OTk3QTBEMDBEOEJBMDBCQjgyNUMgLyogRkVDb252
b2x2ZU1hdHJpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogRkVDb252b2x2ZU1hdHJpeC5jcHAgKi87
IH07CisJCUIyNTU5OTdCMEQwMEQ4QkEwMEJCODI1QyAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFMTBEMDBE
OEI5MDBCQjgyNUMgLyogRkVDb252b2x2ZU1hdHJpeC5oICovOyB9OworCQlCMjU1OTk3QzBEMDBE
OEJBMDBCQjgyNUMgLyogRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTIwRDAwRDhCOTAwQkI4MjVDIC8qIEZF
RGlmZnVzZUxpZ2h0aW5nLmNwcCAqLzsgfTsKKwkJQjI1NTk5N0QwRDAwRDhCQTAwQkI4MjVDIC8q
IEZFRGlmZnVzZUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjU1OThFMzBEMDBEOEI5MDBCQjgyNUMgLyogRkVEaWZmdXNlTGlnaHRpbmcu
aCAqLzsgfTsKKwkJQjI1NTk5N0UwRDAwRDhCQTAwQkI4MjVDIC8qIEZFRGlzcGxhY2VtZW50TWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OEU0MEQwMEQ4QjkwMEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgKi87IH07CisJCUIy
NTU5OTdGMEQwMEQ4QkEwMEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTUwRDAwRDhCOTAwQkI4
MjVDIC8qIEZFRGlzcGxhY2VtZW50TWFwLmggKi87IH07CisJCUIyNTU5OTgwMEQwMEQ4QkEwMEJC
ODI1QyAvKiBGRUZsb29kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNTU5OEU2MEQwMEQ4QjkwMEJCODI1QyAvKiBGRUZsb29kLmNwcCAqLzsgfTsK
KwkJQjI1NTk5ODEwRDAwRDhCQTAwQkI4MjVDIC8qIEZFRmxvb2QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1QyAv
KiBGRUZsb29kLmggKi87IH07CiAJCUIyNTU5OTg0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUlt
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLzsgfTsKIAkJQjI1NTk5
ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmggKi87IH07Ci0JCUIyNTU5OTg2MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1lcmdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OEVDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmNwcCAqLzsgfTsKLQkJQjI1NTk5ODcw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFTWVyZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVEMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1l
cmdlLmggKi87IH07Ci0JCUIyNTU5OTg4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xv
Z3kuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk4RUUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5jcHAgKi87IH07Ci0JCUIy
NTU5OTg5MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVGMEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCAqLzsgfTsKLQkJQjI1NTk5OEEwRDAwRDhCQTAwQkI4MjVD
IC8qIFNWR0ZFT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNTU5OEYwMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU9mZnNldC5jcHAgKi87
IH07Ci0JCUIyNTU5OThCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU9mZnNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjEwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmggKi87IH07Ci0JCUIyNTU5OThDMEQwMEQ4QkEwMEJCODI1
QyAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAgKi87IH07Ci0JCUIyNTU5OThEMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNTU5OEYzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVNwZWN1bGFyTGln
aHRpbmcuaCAqLzsgfTsKLQkJQjI1NTk5OEUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFVGlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjQw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFVGlsZS5oICovOyB9OwotCQlCMjU1OTk4RjBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEY1MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVR1
cmJ1bGVuY2UuY3BwICovOyB9OwotCQlCMjU1OTk5MDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVU
dXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmggKi87IH07Ci0J
CUIyNTU5OTkzMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGOTBEMDBEOEI5MDBC
QjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuY3BwICovOyB9OwotCQlCMjU1OTk5NDBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNTU5OEZBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJj
ZS5oICovOyB9OwotCQlCMjU1OTk5NTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUG9pbnRMaWdodFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3VyY2UuaCAqLzsgfTsKLQkJ
QjI1NTk5OTYwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Nwb3RMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RkMwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR1Nwb3RMaWdodFNvdXJjZS5oICovOyB9OworCQlCMjU1OTk4NjBEMDBEOEJB
MDBCQjgyNUMgLyogRkVNZXJnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjU1OThFQzBEMDBEOEI5MDBCQjgyNUMgLyogRkVNZXJnZS5jcHAgKi87
IH07CisJCUIyNTU5OTg3MEQwMEQ4QkEwMEJCODI1QyAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFRDBEMDBEOEI5MDBCQjgy
NUMgLyogRkVNZXJnZS5oICovOyB9OworCQlCMjU1OTk4ODBEMDBEOEJBMDBCQjgyNUMgLyogRkVN
b3JwaG9sb2d5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5OEVFMEQwMEQ4QjkwMEJCODI1QyAvKiBGRU1vcnBob2xvZ3kuY3BwICovOyB9Owor
CQlCMjU1OTk4OTBEMDBEOEJBMDBCQjgyNUMgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFRjBEMDBEOEI5MDBCQjgy
NUMgLyogRkVNb3JwaG9sb2d5LmggKi87IH07CisJCUIyNTU5OThBMEQwMEQ4QkEwMEJCODI1QyAv
KiBGRU9mZnNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OThGMDBEMDBEOEI5MDBCQjgyNUMgLyogRkVPZmZzZXQuY3BwICovOyB9OworCQlC
MjU1OTk4QjBEMDBEOEJBMDBCQjgyNUMgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEYxMEQwMEQ4QjkwMEJCODI1QyAvKiBG
RU9mZnNldC5oICovOyB9OworCQlCMjU1OTk4QzBEMDBEOEJBMDBCQjgyNUMgLyogRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5OEYyMEQwMEQ4QjkwMEJCODI1QyAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuY3BwICov
OyB9OworCQlCMjU1OTk4RDBEMDBEOEJBMDBCQjgyNUMgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGMzBE
MDBEOEI5MDBCQjgyNUMgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi87IH07CisJCUIyNTU5OThF
MEQwMEQ4QkEwMEJCODI1QyAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEY0MEQwMEQ4QjkwMEJCODI1QyAvKiBGRVRpbGUuaCAq
LzsgfTsKKwkJQjI1NTk5OEYwRDAwRDhCQTAwQkI4MjVDIC8qIEZFVHVyYnVsZW5jZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGNTBEMDBE
OEI5MDBCQjgyNUMgLyogRkVUdXJidWxlbmNlLmNwcCAqLzsgfTsKKwkJQjI1NTk5OTAwRDAwRDhC
QTAwQkI4MjVDIC8qIEZFVHVyYnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjYwRDAwRDhCOTAwQkI4MjVDIC8qIEZFVHVyYnVsZW5j
ZS5oICovOyB9OworCQlCMjU1OTk5MzBEMDBEOEJBMDBCQjgyNUMgLyogTGlnaHRTb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4Rjkw
RDAwRDhCOTAwQkI4MjVDIC8qIExpZ2h0U291cmNlLmNwcCAqLzsgfTsKKwkJQjI1NTk5OTQwRDAw
RDhCQTAwQkI4MjVDIC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGQTBEMDBEOEI5MDBCQjgyNUMgLyogTGlnaHRTb3Vy
Y2UuaCAqLzsgfTsKKwkJQjI1NTk5OTUwRDAwRDhCQTAwQkI4MjVDIC8qIFBvaW50TGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OEZCMEQwMEQ4QjkwMEJCODI1QyAvKiBQb2ludExpZ2h0U291cmNlLmggKi87IH07CisJCUIyNTU5
OTk2MEQwMEQ4QkEwMEJCODI1QyAvKiBTcG90TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEZDMEQwMEQ4QjkwMEJCODI1QyAv
KiBTcG90TGlnaHRTb3VyY2UuaCAqLzsgfTsKIAkJQjI1NTk5QTMwRDAwRDhCQTAwQkI4MjVDIC8q
IFNWR0ltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAgKi87IH07CiAJCUIy
NTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ltYWdlLmggKi87IH07CiAJCUIyNTU5OUE1MEQwMEQ4QkEwMEJCODI1QyAvKiBFbXB0eUNsaWVu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLzsgfTsKQEAgLTk4NDQsMzIg
Kzk4NDQsMzIgQEAKIAkJQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjQwNTU2MzBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZH
RWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2VMaXN0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNW
R0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMjU1OThENzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRGlzdGFudExpZ2h0U291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdEaXN0YW50TGlnaHRTb3VyY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RTAwRDAwRDhCOTAwQkI4MjVD
IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ZFQ29udm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjU1OThFMTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVDb252b2x2ZU1hdHJpeC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFMjBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjI1NTk4RTMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURpZmZ1c2VMaWdodGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFNDBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjI1NTk4RTUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxhY2VtZW50
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVu
dE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFNjBEMDBEOEI5MDBC
QjgyNUMgLyogU1ZHRkVGbG9vZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHRkVGbG9vZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5
OEU3MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUZsb29kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdGRUZsb29kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyNTU5OEQ3MEQwMEQ4QjkwMEJCODI1QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogRkVDb252
b2x2ZU1hdHJpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVD
b252b2x2ZU1hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNTU5OEUx
MEQwMEQ4QjkwMEJCODI1QyAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUIyNTU5OEUyMEQwMEQ4QjkwMEJCODI1QyAvKiBGRURpZmZ1c2VMaWdodGluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaWZmdXNlTGlnaHRp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjU1OThFMzBEMDBEOEI5MDBC
QjgyNUMgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZFRGlmZnVzZUxpZ2h0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyNTU5OEU0MEQwMEQ4QjkwMEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjU1OThFNTBEMDBEOEI5MDBCQjgyNUMgLyog
RkVEaXNwbGFjZW1lbnRNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZF
RGlzcGxhY2VtZW50TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNTU5OEU2
MEQwMEQ4QjkwMEJCODI1QyAvKiBGRUZsb29kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRUZsb29kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjI1NTk4RTcwRDAwRDhCOTAwQkI4MjVDIC8qIEZFRmxvb2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFRmxvb2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVJbWFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVNZXJnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEVEMEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRU1lcmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdG
RU1lcmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEVFMEQwMEQ4Qjkw
MEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZFTW9ycGhvbG9neS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyNTU5OEVGMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFTW9ycGhvbG9neS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVP
ZmZzZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFT2Zm
c2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RjEwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdGRU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGMjBE
MDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGMzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdGRVNwZWN1bGFyTGlnaHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1
NTk4RjQwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFVGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHRkVUaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyNTU5OEY1MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVR1cmJ1bGVuY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVHVyYnVsZW5jZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEY2MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RVR1cmJ1bGVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFVHVy
YnVsZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGOTBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0xpZ2h0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjI1NTk4RkEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0xpZ2h0U291cmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHUG9pbnRM
aWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnRM
aWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGQzBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHU3BvdExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdTcG90TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjI1NTk4RUMwRDAwRDhCOTAwQkI4MjVDIC8qIEZFTWVyZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTWVyZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMjU1OThFRDBEMDBEOEI5MDBCQjgyNUMgLyogRkVNZXJnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVNZXJnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMjU1OThFRTBEMDBEOEI5MDBCQjgyNUMgLyogRkVNb3JwaG9sb2d5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjU1OThFRjBEMDBEOEI5MDBCQjgy
NUMgLyogRkVNb3JwaG9sb2d5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RU1vcnBob2xvZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI1NTk4RjAwRDAw
RDhCOTAwQkI4MjVDIC8qIEZFT2Zmc2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRU9mZnNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NTU5OEYxMEQwMEQ4QjkwMEJCODI1QyAvKiBGRU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRkVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjI1NTk4RjIwRDAwRDhCOTAwQkI4MjVDIC8qIEZFU3BlY3VsYXJMaWdodGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI1NTk4RjMwRDAwRDhCOTAwQkI4MjVDIC8q
IEZFU3BlY3VsYXJMaWdodGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RkVTcGVjdWxhckxpZ2h0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNTU5
OEY0MEQwMEQ4QjkwMEJCODI1QyAvKiBGRVRpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZFVGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjU1OThG
NTBEMDBEOEI5MDBCQjgyNUMgLyogRkVUdXJidWxlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMgLyogRkVUdXJidWxlbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRVR1cmJ1bGVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI1NTk4RjkwRDAwRDhCOTAwQkI4MjVDIC8qIExpZ2h0U291
cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWdodFNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNTU5OEZBMEQwMEQ4QjkwMEJC
ODI1QyAvKiBMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI1NTk4RkIwRDAw
RDhCOTAwQkI4MjVDIC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjI1NTk4RkMwRDAwRDhCOTAwQkI4MjVDIC8qIFNwb3RMaWdodFNvdXJjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BvdExpZ2h0U291cmNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkwQzBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1
QyAvKiBFbXB0eUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVt
cHR5Q2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1NjUsNiArMTQ1
NjUsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjI1NTk4RDcwRDAwRDhCOTAw
QkI4MjVDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYw
MDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKIAkJCQlBNzVFOEI4MTBFMURFMkQ2MDA3RjI0ODEg
LyogRkVCbGVuZC5oICovLAogCQkJCUE3NUU4QjgyMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9y
TWF0cml4LmNwcCAqLywKQEAgLTE0NTczLDE1ICsxNDU3NCw0MSBAQAogCQkJCUE3NUU4Qjg1MEUx
REUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggKi8sCiAJCQkJQTc1RThCODYw
RTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlBNzVFOEI4NzBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCAqLywKKwkJCQlCMjU1OThFMDBEMDBEOEI5MDBC
QjgyNUMgLyogRkVDb252b2x2ZU1hdHJpeC5jcHAgKi8sCisJCQkJQjI1NTk4RTEwRDAwRDhCOTAw
QkI4MjVDIC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLywKKwkJCQlCMjU1OThFMjBEMDBEOEI5MDBC
QjgyNUMgLyogRkVEaWZmdXNlTGlnaHRpbmcuY3BwICovLAorCQkJCUIyNTU5OEUzMEQwMEQ4Qjkw
MEJCODI1QyAvKiBGRURpZmZ1c2VMaWdodGluZy5oICovLAorCQkJCUIyNTU5OEU0MEQwMEQ4Qjkw
MEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgKi8sCisJCQkJQjI1NTk4RTUwRDAwRDhC
OTAwQkI4MjVDIC8qIEZFRGlzcGxhY2VtZW50TWFwLmggKi8sCisJCQkJQjI1NTk4RTYwRDAwRDhC
OTAwQkI4MjVDIC8qIEZFRmxvb2QuY3BwICovLAorCQkJCUIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1
QyAvKiBGRUZsb29kLmggKi8sCiAJCQkJODQ4MDE5NTIxMDhCQUZCMzAwQ0IyQjFGIC8qIEZFR2F1
c3NpYW5CbHVyLmNwcCAqLywKIAkJCQk4NDgwMTk1MzEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVz
c2lhbkJsdXIuaCAqLywKKwkJCQlFNDQwQTJENDExOTFBNTBCMDAwODIwQjAgLyogRkVMaWdodGlu
Zy5jcHAgKi8sCisJCQkJRTQ0MEEyRDYxMTkxQTUyMzAwMDgyMEIwIC8qIEZFTGlnaHRpbmcuaCAq
LywKKwkJCQlCMjU1OThFQzBEMDBEOEI5MDBCQjgyNUMgLyogRkVNZXJnZS5jcHAgKi8sCisJCQkJ
QjI1NTk4RUQwRDAwRDhCOTAwQkI4MjVDIC8qIEZFTWVyZ2UuaCAqLywKKwkJCQlCMjU1OThFRTBE
MDBEOEI5MDBCQjgyNUMgLyogRkVNb3JwaG9sb2d5LmNwcCAqLywKKwkJCQlCMjU1OThFRjBEMDBE
OEI5MDBCQjgyNUMgLyogRkVNb3JwaG9sb2d5LmggKi8sCisJCQkJQjI1NTk4RjAwRDAwRDhCOTAw
QkI4MjVDIC8qIEZFT2Zmc2V0LmNwcCAqLywKKwkJCQlCMjU1OThGMTBEMDBEOEI5MDBCQjgyNUMg
LyogRkVPZmZzZXQuaCAqLywKKwkJCQlCMjU1OThGMjBEMDBEOEI5MDBCQjgyNUMgLyogRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCAqLywKKwkJCQlCMjU1OThGMzBEMDBEOEI5MDBCQjgyNUMgLyogRkVT
cGVjdWxhckxpZ2h0aW5nLmggKi8sCisJCQkJQTdEMjdGQzMwRTBBNTk5RjAwNzlBRDJCIC8qIEZF
VGlsZS5jcHAgKi8sCisJCQkJQjI1NTk4RjQwRDAwRDhCOTAwQkI4MjVDIC8qIEZFVGlsZS5oICov
LAorCQkJCUIyNTU5OEY1MEQwMEQ4QjkwMEJCODI1QyAvKiBGRVR1cmJ1bGVuY2UuY3BwICovLAor
CQkJCUIyNTU5OEY2MEQwMEQ4QjkwMEJCODI1QyAvKiBGRVR1cmJ1bGVuY2UuaCAqLywKIAkJCQk4
NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi8sCiAJCQkJMDhDOTI1MTcwRkND
N0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0
QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAorCQkJCUIyNTU5OEY5MEQwMEQ4QjkwMEJC
ODI1QyAvKiBMaWdodFNvdXJjZS5jcHAgKi8sCisJCQkJQjI1NTk4RkEwRDAwRDhCOTAwQkI4MjVD
IC8qIExpZ2h0U291cmNlLmggKi8sCisJCQkJQjI1NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFBv
aW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAgLyogU291
cmNlQWxwaGEuY3BwICovLAogCQkJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VB
bHBoYS5oICovLAogCQkJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGlj
LmNwcCAqLywKIAkJCQk4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5o
ICovLAorCQkJCUIyNTU5OEZDMEQwMEQ4QjkwMEJCODI1QyAvKiBTcG90TGlnaHRTb3VyY2UuaCAq
LywKIAkJCSk7CiAJCQluYW1lID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xNTg1NywzOSArMTU4ODQsMTIgQEAKIAkJQjI1NTk4OUMwRDAwRDhCODAwQkI4MjVDIC8q
IGZpbHRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUIyNTU5OEQ3MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywK
LQkJCQlCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAg
Ki8sCi0JCQkJQjI1NTk4RTEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRyaXgu
aCAqLywKLQkJCQlCMjU1OThFMjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuY3BwICovLAotCQkJCUIyNTU5OEUzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VM
aWdodGluZy5oICovLAotCQkJCUIyNTU5OEU0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpc3Bs
YWNlbWVudE1hcC5jcHAgKi8sCi0JCQkJQjI1NTk4RTUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZF
RGlzcGxhY2VtZW50TWFwLmggKi8sCi0JCQkJQjI1NTk4RTYwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ZFRmxvb2QuY3BwICovLAotCQkJCUIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUZs
b29kLmggKi8sCiAJCQkJQjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3Bw
ICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0J
CQkJRTQ0MEEyRDQxMTkxQTUwQjAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuY3BwICovLAotCQkJ
CUU0NDBBMkQ2MTE5MUE1MjMwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmggKi8sCi0JCQkJQjI1
NTk4RUMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTWVyZ2UuY3BwICovLAotCQkJCUIyNTU5OEVE
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmggKi8sCi0JCQkJQjI1NTk4RUUwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5jcHAgKi8sCi0JCQkJQjI1NTk4RUYwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5oICovLAotCQkJCUIyNTU5OEYwMEQwMEQ4Qjkw
MEJCODI1QyAvKiBTVkdGRU9mZnNldC5jcHAgKi8sCi0JCQkJQjI1NTk4RjEwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0ZFT2Zmc2V0LmggKi8sCi0JCQkJQjI1NTk4RjIwRDAwRDhCOTAwQkI4MjVDIC8q
IFNWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgKi8sCi0JCQkJQjI1NTk4RjMwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZy5oICovLAotCQkJCUE3RDI3RkMzMEUwQTU5OUYw
MDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwICovLAotCQkJCUIyNTU5OEY0MEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRVRpbGUuaCAqLywKLQkJCQlCMjU1OThGNTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
RkVUdXJidWxlbmNlLmNwcCAqLywKLQkJCQlCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
RkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5jcHAgKi8sCiAJCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5o
ICovLAogCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNw
cCAqLywKIAkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5o
ICovLAotCQkJCUIyNTU5OEY5MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5jcHAg
Ki8sCi0JCQkJQjI1NTk4RkEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0xpZ2h0U291cmNlLmggKi8s
Ci0JCQkJQjI1NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3VyY2UuaCAq
LywKLQkJCQlCMjU1OThGQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHU3BvdExpZ2h0U291cmNlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMTc2MTgsOCArMTc2MTgsOCBAQAogCQkJCTkzODMxQjU2MEQwODdENjAwMEU1Qzk4NCAv
KiBFeGNlcHRpb25Db2RlLmNwcCAqLywKIAkJCQk5MzVGQkNGMTA5QkExNDNCMDBFMjMwQjEgLyog
RXhjZXB0aW9uQ29kZS5oICovLAogCQkJCUE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLywKLQkJCQk4NDgyQjc0NDExOThDMzJFMDBCRkIw
MDUgLyogSGFzaENoYW5nZUV2ZW50LmlkbCAqLywKIAkJCQkyNDQyQkJGODExOTRDOUQzMDBENDk0
NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8sCisJCQkJODQ4MkI3NDQxMTk4QzMyRTAwQkZCMDA1
IC8qIEhhc2hDaGFuZ2VFdmVudC5pZGwgKi8sCiAJCQkJMDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5
IC8qIElucHV0RWxlbWVudC5jcHAgKi8sCiAJCQkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8q
IElucHV0RWxlbWVudC5oICovLAogCQkJCTg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXli
b2FyZEV2ZW50LmNwcCAqLywKQEAgLTE4MTAzLDYgKzE4MTAzLDcgQEAKIAkJCQk1OUE4NUVBNDEx
OUQ2OEVDMDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODk4Nzg1NTMxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeUVudHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4OTg3ODU1NTEyMkNBMDY0MDAzQUFCREEgLyogRGlyZWN0b3J5UmVhZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjU1OTk3MTBEMDBEOEJBMDBCQjgyNUMgLyogRGlzdGFu
dExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkYzNEZFNjBFODJGODE0MDBGNjI3
Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NUY0MDA5NzY1NzY2MDA1ODI2RDkg
LyogRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg1RjNEMDk3NjU3NjYwMDU4MjZE
OSAvKiBEb2N1bWVudEZyYWdtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE4OTExLDcgKzE4OTEy
LDE4IEBACiAJCQkJQTc1RThCOEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVu
dFRyYW5zZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEg
LyogRkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyNTU5OTdCMEQwMEQ4QkEwMEJC
ODI1QyAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjU1OTk3RDBE
MDBEOEJBMDBCQjgyNUMgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUIyNTU5OTdGMEQwMEQ4QkEwMEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQjI1NTk5ODEwRDAwRDhCQTAwQkI4MjVDIC8qIEZFRmxvb2QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg0ODAxOTU1MTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MEEyRDcxMTkxQTUyMzAwMDgyMEIwIC8qIEZFTGlnaHRp
bmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyNTU5OTg3MEQwMEQ4QkEwMEJCODI1QyAvKiBGRU1l
cmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjU1OTk4OTBEMDBEOEJBMDBCQjgyNUMgLyogRkVN
b3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjU1OTk4QjBEMDBEOEJBMDBCQjgyNUMg
LyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyNTU5OThEMEQwMEQ4QkEwMEJCODI1
QyAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyNTU5OThFMEQw
MEQ4QkEwMEJCODI1QyAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyNTU5OTkwMEQw
MEQ4QkEwMEJCODI1QyAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2
QzgxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTNDNDdB
NzEyMzg5MDhCMDAyQjNEODYgLyogRmlsZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
NjZDNzcyQjBBQjYwM0I3MDAyMzhDQzQgLyogRmlsZUNob29zZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMTk2OTgsNiArMTk3MTAsNyBAQAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBM
ZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBM
ZW5ndGhCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkyMEVBRDE1QzIwMEMxRDZGNyAv
KiBMZW5ndGhTaXplLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjU1OTk5NDBEMDBEOEJBMDBCQjgy
NUMgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTY1MEQwMEJGMjIw
MDcxQjc4MiAvKiBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFCMzFDOTFFMTBBRTFCOEUwMDBDN0I5MiAvKiBMaW5lQ2xhbXBWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODlCNUVBQTIxMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTk4MzcsNiArMTk4NTAsNyBAQAogCQkJCTFBQTg3OTkwMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFGREFDM0QxMEY1
NDQ4QzAwRTFGM0QyIC8qIFBsdWdpblZpZXdCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkIx
RjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMjU1OTk5NTBEMDBEOEJBMDBCQjgyNUMgLyogUG9pbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5NzgxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzA1OTk3QTEwN0Q5NzUyMDBBNTBBN0MgLyog
UG9saWN5Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NEUyMEExMEExRjQ0RjAwRjk1
RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAwOTIsNiArMjAxMDYs
NyBAQAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5RTY0OTIwMDU2
RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMjU1OTk5NjBEMDBEOEJBMDBCQjgyNUMgLyogU3BvdExpZ2h0U291cmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUVDOTI1OTBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUI1NkVCQTg1MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNl
cHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjI0NjRBMENDOThEREIwMEMwNTI0MCAvKiBT
UUxpdGVEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDE4NCw3ICsyMDE5OSw2IEBACiAJ
CQkJQjIyMjc5QTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0N1cnNvckVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3OUFFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5QjEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Rlc2NF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk3MTBEMDBEOEJBMDBCQjgyNUMgLyog
U1ZHRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlCNDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyOEM2QTI4
MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3OUI3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTIwMTk5LDE0ICsyMDIxMywxMCBAQAogCQkJCUIyMjI3OUNCMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
Mjc5Q0UwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlEMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk3QjBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTkyMTMyNzUx
MUMwRTZCQjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjU1OTk3RDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUQ0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OTdGMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjc5RDcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5REEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5ODEwRDAwRDhC
QTAwQkI4MjVDIC8qIFNWR0ZFRmxvb2QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUREMEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdGRUZsb29kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5RTAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRnVuY0FFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyNzlFMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVGdW5jQkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjAyMTYsMjEgKzIwMjI2LDE0IEBACiAJCQkJQjI1NTk5ODUw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OUVGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjc5RjIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTGlnaHRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNDQwQTJENzExOTFBNTIzMDAwODIwQjAgLyogU1ZHRkVMaWdodGlu
Zy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5ODcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZF
TWVyZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUY0MEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdGRU1lcmdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RjcwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1
NTk5ODkwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODQyMjQxOTQxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OThCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU9m
ZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkEwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZFT2Zmc2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkQwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIy
NTU5OThEMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTAwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk4
RTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVUaWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjI1NTk5OTAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFVHVyYnVsZW5jZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAv
KiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1
OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIwMjU5LDcgKzIwMjYy
LDYgQEAKIAkJCQlCMjIyN0EzMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGFuZ1NwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EzMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGVuZ3RoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EzNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGVuZ3Ro
TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5OTQwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R0xpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EzOTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0EzQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGluZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QTNFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMaXN0LmggaW4gSGVhZGVycyAqLywK
QEAgLTIwMzAzLDcgKzIwMzA1LDYgQEAKIAkJCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyog
U1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRDNUIyRkIxMjE2REM4
MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTg4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXR0ZXJuRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5OTUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BvaW50TGln
aHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QThDMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQb2ludExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QThGMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQb2x5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOTEwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlnb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIw
MzI0LDcgKzIwMzI1LDYgQEAKIAkJCQlCMjIyN0FBNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU2V0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhEQUI5QzMxMTAzRDlDMTAwM0U3QUJBIC8q
IFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBRkQwMTAwREFG
MzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1
OTk5NjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyN0FBOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QUFDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FBRjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3R5
bGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjE0NDIsNyArMjE0NDIsMTggQEAKIAkJCQlBNzVF
OEI4QTBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzVFOEI4QzBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzVFOEI4RTBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3Np
dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI1NTk5N0EwRDAwRDhCQTAwQkI4MjVDIC8qIEZF
Q29udm9sdmVNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI1NTk5N0MwRDAwRDhCQTAw
QkI4MjVDIC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyNTU5
OTdFMEQwMEQ4QkEwMEJCODI1QyAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCMjU1OTk4MDBEMDBEOEJBMDBCQjgyNUMgLyogRkVGbG9vZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NDgwMTk1NDEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRTQ0MEEyRDUxMTkxQTUwQjAwMDgyMEIwIC8qIEZFTGlnaHRp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI1NTk5ODYwRDAwRDhCQTAwQkI4MjVDIC8qIEZF
TWVyZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI1NTk5ODgwRDAwRDhCQTAwQkI4MjVDIC8q
IEZFTW9ycGhvbG9neS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjU1OTk4QTBEMDBEOEJBMDBC
QjgyNUMgLyogRkVPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI1NTk5OEMwRDAwRDhC
QTAwQkI4MjVDIC8qIEZFU3BlY3VsYXJMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
N0QyN0ZDNDBFMEE1OTlGMDA3OUFEMkIgLyogRkVUaWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUIyNTU5OThGMEQwMEQ4QkEwMEJCODI1QyAvKiBGRVR1cmJ1bGVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTc2RDZDODAxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM0RkU5RTUwQjVDQTUzOTAwM0U0QTczIC8qIEZpbGVDaG9vc2VyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA2NkM3NzJEMEFCNjAzRDIwMDIzOENDNCAvKiBGaWxlQ2hvb3Nlck1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjIyOTEsNiArMjIzMDIsNyBAQAogCQkJCTUxMkREOEY0
MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVCRUEwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCMjU1OTk5MzBEMDBEOEJBMDBCQjgyNUMgLyogTGlnaHRTb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODlCNUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExp
bmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAy
IC8qIExpbmtIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2
Nzc0MSAvKiBsb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjcyNCwxNCArMjI3MzYsMTAg
QEAKIAkJCQlCMjIyNzlDQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5Q0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQjI1NTk5N0EwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRy
aXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTkyMTMyNzQxMUMwRTZCQjAwNDU2MjM4IC8qIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTdD
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyNzlEMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTdFMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlENjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3OUQ5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5ODAwRDAwRDhCQTAwQkI4MjVD
IC8qIFNWR0ZFRmxvb2QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5REMwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZFRmxvb2RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OURGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyNzlFMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVGdW5jQkVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yMjc0MSwyMSArMjI3NDksMTQgQEAKIAkJCQlCMjU1OTk4NDBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
NzlFRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjc5RjEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTGlnaHRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU0NDBBMkQ1MTE5MUE1MEIwMDA4MjBCMCAvKiBTVkdGRUxp
Z2h0aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTg2MEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRU1lcmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUYzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRU1lcmdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlG
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUIyNTU5OTg4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODQyMjQxOTMxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEEwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUY5MEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdGRU9mZnNldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjc5RkMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlGRjBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyN0EwMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMDUwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZFVGlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEYwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0Ew
ODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA4MUVCRjNBMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjI3ODQsNyArMjI3ODUsNiBAQAogCQkJCUIyMjI3
QTJGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMYW5nU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjdBMzIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xlbmd0aC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0EzNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGVuZ3RoTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCMjU1OTk5MzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHTGlnaHRTb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMzgwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0EzQjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHTGluZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBNDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xvY2F0YWJsZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRMaWdodFNvdXJjZS5oOjY3OTM1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKKyNkZWZpbmUgU1ZHRGlzdGFudExpZ2h0U291
cmNlX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNW
R0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGlzdGFudExp
Z2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEaXN0YW50TGlnaHRTb3VyY2U+IGNyZWF0ZShmbG9hdCBhemltdXRoLCBmbG9hdCBl
bGV2YXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpc3RhbnRMaWdo
dFNvdXJjZShhemltdXRoLCBlbGV2YXRpb24pKTsKKyAgICB9CisKKyAgICBmbG9hdCBhemltdXRo
KCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoOyB9CisgICAgZmxvYXQgZWxldmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRp
bmdEYXRhKFBhaW50aW5nRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0Rh
dGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KTsKKworICAgIHZpcnR1YWwg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgRGlzdGFudExpZ2h0U291cmNlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVs
ZXZhdGlvbikKKyAgICAgICAgOiBMaWdodFNvdXJjZShMU19ESVNUQU5UKQorICAgICAgICAsIG1f
YXppbXV0aChhemltdXRoKQorICAgICAgICAsIG1fZWxldmF0aW9uKGVsZXZhdGlvbikKKyAgICB7
CisgICAgfQorCisgICAgZmxvYXQgbV9hemltdXRoOworICAgIGZsb2F0IG1fZWxldmF0aW9uOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50
TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEx
ICsyMCwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRl
ZiBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdEaXN0YW50TGlnaHRTb3VyY2Vf
aAorI2lmbmRlZiBEaXN0YW50TGlnaHRTb3VyY2VfaAorI2RlZmluZSBEaXN0YW50TGlnaHRTb3Vy
Y2VfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZH
TGlnaHRTb3VyY2UuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJj
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDYgKzU3LDYgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdE
aXN0YW50TGlnaHRTb3VyY2VfaAorI2VuZGlmIC8vIERpc3RhbnRMaWdodFNvdXJjZV9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFQ29u
dm9sdmVNYXRyaXguaCIKKworI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtl
cm5lbFNpemUsCisgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQm
IHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAorICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZs
b2F0PiYga2VybmVsTWF0cml4KQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fa2VybmVs
U2l6ZShrZXJuZWxTaXplKQorICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCisgICAgLCBtX2JpYXMo
YmlhcykKKyAgICAsIG1fdGFyZ2V0T2Zmc2V0KHRhcmdldE9mZnNldCkKKyAgICAsIG1fZWRnZU1v
ZGUoZWRnZU1vZGUpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGgoa2VybmVsVW5pdExlbmd0aCkK
KyAgICAsIG1fcHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKQorICAgICwgbV9rZXJuZWxNYXRy
aXgoa2VybmVsTWF0cml4KQoreworfQorCitQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAorICAgIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSwKKyAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6
ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0
aCwKKyAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKKworSW50U2l6
ZSBGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9r
ZXJuZWxTaXplOworfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUoSW50
U2l6ZSBrZXJuZWxTaXplKQoreworICAgIG1fa2VybmVsU2l6ZSA9IGtlcm5lbFNpemU7IAorfQor
Citjb25zdCBWZWN0b3I8ZmxvYXQ+JiBGRUNvbnZvbHZlTWF0cml4OjprZXJuZWwoKSBjb25zdAor
eworICAgIHJldHVybiBtX2tlcm5lbE1hdHJpeDsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6c2V0S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCkKK3sKKyAgICBtX2tlcm5l
bE1hdHJpeCA9IGtlcm5lbDsgCit9CisKK2Zsb2F0IEZFQ29udm9sdmVNYXRyaXg6OmRpdmlzb3Io
KSBjb25zdAoreworICAgIHJldHVybiBtX2Rpdmlzb3I7IAorfQorCit2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldERpdmlzb3IoZmxvYXQgZGl2aXNvcikKK3sKKyAgICBtX2Rpdmlzb3IgPSBkaXZp
c29yOyAKK30KKworZmxvYXQgRkVDb252b2x2ZU1hdHJpeDo6YmlhcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYmlhczsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9h
dCBiaWFzKQoreworICAgIG1fYmlhcyA9IGJpYXM7IAorfQorCitJbnRQb2ludCBGRUNvbnZvbHZl
TWF0cml4Ojp0YXJnZXRPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RhcmdldE9mZnNl
dDsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50
IHRhcmdldE9mZnNldCkKK3sKKyAgICBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsgCit9
CisKK0VkZ2VNb2RlVHlwZSBGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZWRnZU1vZGU7IAorfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEVk
Z2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBtX2VkZ2VNb2RlID0gZWRnZU1v
ZGU7IAorfQorCitGbG9hdFBvaW50IEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFVuaXRMZW5ndGgo
KSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IAorfQorCit2b2lkIEZF
Q29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludCBrZXJuZWxVbml0
TGVuZ3RoKQoreworICAgIG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVuaXRMZW5ndGg7IAor
fQorCitib29sIEZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByZXNlcnZlQWxwaGE7IAorfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNl
dFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQoreworICAgIG1fcHJlc2VydmVBbHBo
YSA9IHByZXNlcnZlQWxwaGE7IAorfQorCisvKgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCisgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgaW1hZ2UgcmVjdGFuZ2xl
IGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAgICAgfCBCIHwg
ICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8CisgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBFICAgICAgICAgIHwKKyAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJlZ2lvbiBDIGNvbnRhaW5z
IHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0
IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAgIEV4YW1wbGU6CisgICAg
ICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAgICAgT3JkZXIgKGtlcm5l
bCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAgVGFyZ2V0OiB4OjEsIHk6
MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGFyZ2V0IGluc2lkZSB0
aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAgLi4uCisgICAgICAgIC4u
LgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBjYXNlIGFyZSB0aGUgZm9s
bG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5kICh4MiwgeTIpIGlzIHRo
ZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIgYW5kIGNvbHVtbiB5MiBp
cyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5IHRob3NlICh4LCB5KSBw
aXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHkyCisKKyAgICAgIFJlZ2lv
biBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJlZ2lvbiBCOiB4MTogMCwg
eTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTogMSwgeTE6IDMsIHgyOiA5
LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgyOiAxMCwgeTI6IDEwCisg
ICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5MjogMTAgKGVtcHR5IHJlZ2lv
bikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBtb3N0IG9mIHRoZSBwaXhl
bHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8gY2FsY3VsYXRlIHRoZXNl
IHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAgIEZvciBvdGhlciByZWdp
b25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2FsbHMgZ2V0UGl4ZWxWYWx1
ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1hZ2UuIEluIGEgcmFyZSBz
aXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dlciB0aGFuIHRoZSBpbWFn
ZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBmdW5jdGlvbi4KKworICAg
QWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBjb21tb24sIEkgZGVjaWRl
ZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRoZW0sIHNpbmNlIHRoZXJl
IGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3VsZCBtYWtlIGl0IHJlYWxs
eSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCitzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4ID0g
MjU1KQoreworICAgIGlmIChjaGFubmVsIDw9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChjaGFubmVsID49IG1heCkKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICByZXR1cm4gY2hhbm5l
bDsKK30KKwordGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgorQUxXQVlTX0lOTElO
RSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKENhbnZhc1BpeGVsQXJyYXkqIGltYWdlLCBpbnQm
IHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBDYW52YXNQ
aXhlbEFycmF5KiBzcmMpCit7CisgICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZl
QWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsg
Ymlhcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGltYWdlLT5z
ZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1h
eEFscGhhKSk7CisKKyAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgeworICAgICAgICBpbWFn
ZS0+c2V0KHBpeGVsLCBzcmMtPmdldChwaXhlbCkpOworICAgICAgICArK3BpeGVsOworICAgIH0g
ZWxzZQorICAgICAgICBpbWFnZS0+c2V0KHBpeGVsKyssIG1heEFscGhhKTsKK30KKworLy8gT25s
eSBmb3IgcmVnaW9uIEMKK3RlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKQor
eworICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCisgICAgaW50
IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFy
Z2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gMDsKKyAgICBp
bnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAo
bV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBv
ZiByZ2IoYSkgY29tcG9uZW50cworICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFW
YWx1ZXMgPyAwIDogMSldOworCisgICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKKyAgICBBU1NFUlQobV9kaXZpc29yKTsK
KworICAgIGZvciAoaW50IHkgPSBjbGlwQm90dG9tICsgMTsgeSA+IDA7IC0teSkgeworICAgICAg
ICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkgeworICAgICAgICAgICAg
aW50IGtlcm5lbFZhbHVlID0gbV9rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKKyAgICAgICAgICAg
IGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7CisgICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
KyAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwor
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Cisg
ICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5l
bFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gbV9rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5LT5nZXQoa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBt
X2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10g
Kz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwpKTsKKyAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsOworICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
ICs9IGtlcm5lbEluY3JlYXNlOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVs
U2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdE
YXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRh
LmJpYXMsIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5KTsKKyAgICAgICAgICAgIHN0YXJ0S2Vy
bmVsUGl4ZWwgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Cisg
ICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOworICAgIH0KK30KKworQUxXQVlT
X0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4ID49IDAgJiYgeCA8IHBh
aW50aW5nRGF0YS53aWR0aCAmJiB4ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCisg
ICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisKKyAgICBz
d2l0Y2ggKG1fZWRnZU1vZGUpIHsKKyAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCisgICAg
ICAgIHJldHVybiAtMTsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAgICAgICAgaWYg
KHggPCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRp
bmdEYXRhLndpZHRoKQorICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Cisg
ICAgICAgIGlmICh5IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlmICh5
ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhl
aWdodCAtIDE7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8
IDI7CisgICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAgICAgICB3aGlsZSAoeCA8IDApCisgICAg
ICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgeCAlPSBwYWludGluZ0Rh
dGEud2lkdGg7CisgICAgICAgIHdoaWxlICh5IDwgMCkKKyAgICAgICAgICAgIHkgKz0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKyAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAg
ICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIH0KK30KKwor
Ly8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCit0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXM+Cit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQorewor
ICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CisgICAg
aW50IGhlaWdodCA9IHkyIC0geTE7CisgICAgaW50IHdpZHRoID0geDIgLSB4MTsKKyAgICBpbnQg
YmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBh
aW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBv
ZiByZ2IoYSkgY29tcG9uZW50cworICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFW
YWx1ZXMgPyAwIDogMSldOworCisgICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKKyAgICBBU1NFUlQobV9kaXZpc29yKTsK
KworICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUg
PSBtX2tlcm5lbE1hdHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOworICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndp
ZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIGlmICghcHJl
c2VydmVBbHBoYVZhbHVlcykKKyAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIGludCBw
aXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2Vy
bmVsUGl4ZWxZKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhl
bEluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBtX2tlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXktPmdldChwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNb
Ml0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCArIDIpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBp
eGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IG1fa2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXggKyAzKSk7CisgICAgICAgICAgICAgICAgKytrZXJu
ZWxQaXhlbFg7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3Rh
cnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOworICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhl
bHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVs
LCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5KTsKKyAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgIH0K
KyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9
IGJlZ2luS2VybmVsUGl4ZWxYOworICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOworICAgIH0K
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJv
dHRvbSkKK3sKKyAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGhlcmUsIHNpbmNlIGl0IHJlZmVy
cyBhbm90aGVyIEFMV0FZU19JTkxJTkUKKyAgICAvLyBmdW5jdGlvbiwgd2hpY2ggZGVmaW5lZCBp
biB0aGlzIEMrKyBzb3VyY2UgZmlsZSBhcyB3ZWxsCisgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkK
KyAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tKTsKKyAgICBlbHNlCisgICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAg
ICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBp
dCBpcyBpbXBsZW1lbnRlZCBoZXJlCisgICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBp
cyBhbHNvIGltcGxlbWVudGVkIGhlcmUKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAg
ICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7
CisgICAgZWxzZQorICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgeDEsIHkxLCB4MiwgeTIpOworfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KEZp
bHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
KyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6
ZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworCisgICAgUmVm
UHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXk7CisgICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CisgICAgZWxzZQor
ICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CisKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwg
aW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Cisg
ICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOworICAg
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gaW1hZ2VSZWN0LndpZHRoKCk7CisgICAgcGFpbnRpbmdEYXRhLmhl
aWdodCA9IGltYWdlUmVjdC5oZWlnaHQoKTsKKyAgICBwYWludGluZ0RhdGEuYmlhcyA9IG1fYmlh
cyAqIDI1NTsKKworICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQg
Y2xpcFJpZ2h0ID0gaW1hZ2VSZWN0LndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAg
ICBpbnQgY2xpcEJvdHRvbSA9IGltYWdlUmVjdC5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWln
aHQoKTsKKworICAgIGlmIChjbGlwUmlnaHQgPj0gMCAmJiBjbGlwQm90dG9tID49IDApIHsKKyAg
ICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0
b20pOworCisgICAgICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOworICAg
ICAgICBjbGlwQm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisgICAgICAgIGlmICht
X3RhcmdldE9mZnNldC55KCkgPiAwKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKKyAg
ICAgICAgaWYgKGNsaXBCb3R0b20gPCBpbWFnZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIGltYWdlUmVjdC53aWR0
aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgp
ID4gMCkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJn
ZXRPZmZzZXQueSgpLCBtX3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOworICAgICAgICBp
ZiAoY2xpcFJpZ2h0IDwgaW1hZ2VSZWN0LndpZHRoKCkpCisgICAgICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVJl
Y3Qud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmFyZSBz
aXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0
KCkpOworICAgIH0KKworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIHJlc3VsdElt
YWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgp
KTsKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpkdW1wKCkKK3sKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVER0VNT0RFX1VOS05PV046
CisgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFREdF
TU9ERV9EVVBMSUNBVEU6CisgICAgICAgIHRzIDw8ICJEVVBMSUNBVEUiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAgIHRzIDw8ICJXUkFQIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFREdFTU9ERV9OT05FOgorICAgICAgICB0cyA8PCAiTk9ORSI7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0m
IEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAg
dHMgPDwgIltmZUNvbnZvbHZlTWF0cml4IjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6ZSA8
PCAiXCIgIgorICAgICAgIDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4ICA8
PCAiXCIgIgorICAgICAgIDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIKKyAg
ICAgICA8PCAiYmlhcz1cIiIgPDwgbV9iaWFzIDw8ICJcIiAiCisgICAgICAgPDwgInRhcmdldD1c
IiIgPDwgbV90YXJnZXRPZmZzZXQgPDwgIlwiICIKKyAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8
IG1fZWRnZU1vZGUgPDwgIlwiICIKKyAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwg
bV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCisgICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIi
IDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFQ29udm9sdmVNYXRy
aXguaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4Lmgi
CiAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBA
IC00NjgsNCArNDY4LDQgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZQogCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJ
KHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
Q29udm9sdmVNYXRyaXguaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
IDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAorI2Rl
ZmluZSBTVkdGRUNvbnZvbHZlTWF0cml4X2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2VudW0gRWRnZU1vZGVUeXBlIHsKKyAgICBFREdFTU9ERV9VTktOT1dO
ICAgPSAwLAorICAgIEVER0VNT0RFX0RVUExJQ0FURSA9IDEsCisgICAgRURHRU1PREVfV1JBUCAg
ICAgID0gMiwKKyAgICBFREdFTU9ERV9OT05FICAgICAgPSAzCit9OworCitjbGFzcyBDYW52YXNQ
aXhlbEFycmF5OworCitjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gY3Jl
YXRlKGNvbnN0IEludFNpemUmLAorICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCisgICAgICAgICAgICBib29s
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisKKyAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dDsKKyAgICB2b2lkIHNldEtlcm5lbFNpemUoSW50U2l6ZSk7CisKKyAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWwoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbChjb25zdCBWZWN0b3I8
ZmxvYXQ+Jik7CisKKyAgICBmbG9hdCBkaXZpc29yKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXZp
c29yKGZsb2F0KTsKKworICAgIGZsb2F0IGJpYXMoKSBjb25zdDsKKyAgICB2b2lkIHNldEJpYXMo
ZmxvYXQpOworCisgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQpOworCisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOworCisgICAgRmxvYXRQ
b2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVu
Z3RoKEZsb2F0UG9pbnQpOworCisgICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZp
bHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNv
bnN0OworCitwcml2YXRlOgorICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYsIGZs
b2F0LCBmbG9hdCwKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBj
b25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgc3Ry
dWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJy
YXk7CisgICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGlu
dCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgZmxvYXQgYmlhczsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBS
aWdodCwgaW50IGNsaXBCb3R0b20pOworCisgICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxW
YWx1ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgorICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5n
RGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7CisKKyAgICAvLyBXcmFwcGVy
IGZ1bmN0aW9ucworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pOwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKKworICAgIEludFNpemUg
bV9rZXJuZWxTaXplOworICAgIGZsb2F0IG1fZGl2aXNvcjsKKyAgICBmbG9hdCBtX2JpYXM7Cisg
ICAgSW50UG9pbnQgbV90YXJnZXRPZmZzZXQ7CisgICAgRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7
CisgICAgRmxvYXRQb2ludCBtX2tlcm5lbFVuaXRMZW5ndGg7CisgICAgYm9vbCBtX3ByZXNlcnZl
QWxwaGE7CisgICAgVmVjdG9yPGZsb2F0PiBtX2tlcm5lbE1hdHJpeDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorCisjZW5kaWYgLy8gU1ZHRkVDb252b2x2ZU1hdHJpeF9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlz
aW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDEwIEBACiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFQ29udm9sdmVNYXRyaXhf
aAotI2RlZmluZSBTVkdGRUNvbnZvbHZlTWF0cml4X2gKKyNpZm5kZWYgRkVDb252b2x2ZU1hdHJp
eF9oCisjZGVmaW5lIEZFQ29udm9sdmVNYXRyaXhfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgpAQCAt
MTEzLDYgKzExMyw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShG
SUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVDb252b2x2ZU1hdHJpeF9oCisjZW5kaWYgLy8gRkVD
b252b2x2ZU1hdHJpeF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJv
bSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDo2
NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgorCisjaW5jbHVkZSAiU1ZH
TGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRURpZmZ1c2VMaWdodGlu
Zzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwKKyAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8
RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29u
c3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2Fs
ZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IGxpZ2h0U291cmNlKSk7Cit9CisKK0ZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRp
bmcoKQoreworfQorCitDb2xvciBGRURpZmZ1c2VMaWdodGluZzo6bGlnaHRpbmdDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsKK30KKwordm9pZCBGRURpZmZ1c2VM
aWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKK3sK
KyAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOworfQorCitmbG9hdCBGRURpZmZ1
c2VMaWdodGluZzo6c3VyZmFjZVNjYWxlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZVNjYWxlOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxv
YXQgc3VyZmFjZVNjYWxlKQoreworICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwor
fQorCitmbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6ZGlmZnVzZUNvbnN0YW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCit7CisgICAgbV9k
aWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxp
Z2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVs
VW5pdExlbmd0aFg7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRM
ZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQoreworICAgIG1fa2VybmVsVW5pdExlbmd0
aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKK30KKworZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6Omtl
cm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3Ro
WTsKK30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxv
YXQga2VybmVsVW5pdExlbmd0aFkpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOworfQorCitjb25zdCBMaWdodFNvdXJjZSogRkVEaWZmdXNlTGlnaHRpbmc6
OmxpZ2h0U291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsK
K30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCit7ICAgIAorICAgIG1fbGlnaHRTb3VyY2UgPSBsaWdo
dFNvdXJjZTsKK30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6ZHVtcCgpCit7Cit9CisKK1Rl
eHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQpOworICAgIHRzIDw8ICJbZmVEaWZmdXNlTGlnaHRpbmciOworICAgIEZpbHRlckVmZmVjdDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIi
IDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCisgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1c
IiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwgIlwiICIKKyAgICAgICA8PCAia2VybmVsVW5pdExl
bmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExl
bmd0aFkgPDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCIKKyNp
ZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRURpZmZ1c2VMaWdodGluZy5oIgogCi0jaW5j
bHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyMyw0ICsxMjMsNCBAQCBUZXh0U3RyZWFtJiBGRURpZmZ1
c2VMaWdodGluZzo6ZXh0ZXJuYWxSCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmg6Njc5MzUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRURp
ZmZ1c2VMaWdodGluZ19oCisjZGVmaW5lIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKKworI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMaWdodFNvdXJjZTsKKworY2xhc3MgRkVE
aWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwKKyAgICAgICAgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7
CisgICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKKworICAgIENvbG9yIGxpZ2h0aW5n
Q29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsK
KworICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3VyZmFjZVNj
YWxlKGZsb2F0KTsKKworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0OworICAgIHZv
aWQgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKKworICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7CisKKyAg
ICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsVW5p
dExlbmd0aFkoZmxvYXQpOworCisgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKworI2VuZGlmIC8vIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksMTEgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVEaWZmdXNl
TGlnaHRpbmdfaAotI2RlZmluZSBTVkdGRURpZmZ1c2VMaWdodGluZ19oCisjaWZuZGVmIEZFRGlm
ZnVzZUxpZ2h0aW5nX2gKKyNkZWZpbmUgRkVEaWZmdXNlTGlnaHRpbmdfaAogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorI2lm
IEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02Myw2ICs2Myw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAor
I2VuZGlmIC8vIEZFRGlmZnVzZUxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkocmV2aXNp
b24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNp
bmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5u
ZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBt
X3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxl
Y3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKK3sKK30KKworUGFz
c1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3Is
IHNjYWxlKSk7Cit9CisKK0NoYW5uZWxTZWxlY3RvclR5cGUgRkVEaXNwbGFjZW1lbnRNYXA6OnhD
aGFubmVsU2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7
Cit9CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQoreworICAgIG1feENoYW5uZWxT
ZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Cit9CisKK0NoYW5uZWxTZWxlY3RvclR5cGUgRkVE
aXNwbGFjZW1lbnRNYXA6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBt
X3lDaGFubmVsU2VsZWN0b3I7Cit9CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFu
bmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQor
eworICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Cit9CisKK2Zsb2F0
IEZFRGlzcGxhY2VtZW50TWFwOjpzY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGU7
Cit9CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQorewor
ICAgIG1fc2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgaW4tPmFwcGx5
KGZpbHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdElt
YWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1feENoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVj
dG9yID09IENIQU5ORUxfVU5LTk9XTikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZmZl
Y3RDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1Bp
eGVsQXJyYXlBKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7CisKKyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4
ZWxBcnJheUIoaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZm
ZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBmbG9hdCBzY2FsZVggPSBtX3NjYWxlIC8gMjU1
LmYgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOworICAgIGZsb2F0IHNjYWxl
WSA9IG1fc2NhbGUgLyAyNTUuZiAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgp
OworICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFggPSAoMC41ZiAtIDAuNWYgKiBtX3NjYWxlKSAq
IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7CisgICAgZmxvYXQgc2NhbGVBZGp1
c3RtZW50WSA9ICgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCk7CisgICAgaW50IHN0cmlkZSA9IGltYWdlUmVjdC53aWR0aCgpICogNDsK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBp
bWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICBpbnQgZHN0SW5kZXggPSBsaW5l
ICsgeCAqIDQ7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNj
YWxlWCAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3hDaGFubmVsU2VsZWN0b3Ig
LSAxKSArIHNjYWxlQWRqdXN0bWVudFgpOworICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZVkgKiBzcmNQaXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV95
Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1lbnRZKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBpbWFnZVJlY3Qud2lkdGgoKSB8fCBz
cmNZIDwgMCB8fCBzcmNZID49IGltYWdlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFZhbHVlID0gc3JjUGl4ZWxBcnJheUEtPmdldChz
cmNZICogc3RyaWRlICsgc3JjWCAqIDQgKyBjaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2VEYXRhLT5kYXRhKCktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHBpeGVsVmFsdWUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorICAg
IHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgp
LCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworfQorCit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpk
dW1wKCkKK3sKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBDSEFOTkVMX1VOS05PV046CisgICAgICAgIHRzIDw8ICJVTktOT1dOIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDSEFOTkVMX1I6CisgICAgICAgIHRzIDw8ICJSRUQi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENIQU5ORUxfRzoKKyAgICAgICAgdHMgPDwgIkdS
RUVOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDSEFOTkVMX0I6CisgICAgICAgIHRzIDw8
ICJCTFVFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDSEFOTkVMX0E6CisgICAgICAgIHRz
IDw8ICJBTFBIQSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisK
K1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQpOworICAgIHRzIDw8ICJbZmVEaXNwbGFjZW1lbnRNYXAiOworICAgIEZpbHRlckVmZmVj
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBzY2FsZT1cIiIgPDwg
bV9zY2FsZSA8PCAiXCIgIgorICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3hD
aGFubmVsU2VsZWN0b3IgPDwgIlwiICIKKyAgICAgICA8PCAieUNoYW5uZWxTZWxlY3Rvcj1cIiIg
PDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDEp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2NzkzNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaXNw
bGFjZW1lbnRNYXAuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRURpc3BsYWNl
bWVudE1hcC5oIgogCiAjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgpAQCAtMTY4LDQgKzE2OCw0IEBAIFRleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFw
OjpleHRlcm5hbFIKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFRGlzcGxhY2VtZW50
TWFwX2gKKyNkZWZpbmUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAorCisjaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitlbnVtIENoYW5uZWxTZWxlY3RvclR5cGUgeworICAgIENIQU5ORUxfVU5LTk9XTiA9
IDAsCisgICAgQ0hBTk5FTF9SID0gMSwKKyAgICBDSEFOTkVMX0cgPSAyLAorICAgIENIQU5ORUxf
QiA9IDMsCisgICAgQ0hBTk5FTF9BID0gNAorfTsKKworY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
RURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisKKyAg
ICBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKKyAgICB2b2lk
IHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CisKKyAgICBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CisKKyAgICBmbG9h
dCBzY2FsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisK
KyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFRGlzcGxhY2VtZW50
TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisKKyAgICBDaGFubmVsU2VsZWN0b3JUeXBl
IG1feENoYW5uZWxTZWxlY3RvcjsKKyAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxT
ZWxlY3RvcjsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAv
LyBTVkdGRURpc3BsYWNlbWVudE1hcF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAkocmV2aXNpb24gNjc5MzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKLSNkZWZp
bmUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAorI2lmbmRlZiBGRURpc3BsYWNlbWVudE1hcF9oCisj
ZGVmaW5lIEZFRGlzcGxhY2VtZW50TWFwX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC02NSw2
ICs2NSw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJT
KQogCi0jZW5kaWYgLy8gU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAorI2VuZGlmIC8vIEZFRGlzcGxh
Y2VtZW50TWFwX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRmxvb2QuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdGRUZsb29kLmgiCisKKyNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9v
ZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV9mbG9vZENvbG9yKGZsb29k
Q29sb3IpCisgICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCit7Cit9CisKK1Bhc3NS
ZWZQdHI8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBm
bG9hdCBmbG9vZE9wYWNpdHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUZsb29kKGZs
b29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOworfQorCitDb2xvciBGRUZsb29kOjpmbG9vZENvbG9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mbG9vZENvbG9yOworfQorCit2b2lkIEZFRmxvb2Q6
OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIG1fZmxvb2RDb2xvciA9
IGNvbG9yOworfQorCitmbG9hdCBGRUZsb29kOjpmbG9vZE9wYWNpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Zsb29kT3BhY2l0eTsKK30KKwordm9pZCBGRUZsb29kOjpzZXRGbG9vZE9wYWNp
dHkoZmxvYXQgZmxvb2RPcGFjaXR5KQoreworICAgIG1fZmxvb2RPcGFjaXR5ID0gZmxvb2RPcGFj
aXR5OworfQorCit2b2lkIEZFRmxvb2Q6OmFwcGx5KEZpbHRlciopCit7CisgICAgR3JhcGhpY3ND
b250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOworICAgIGlmICghZmlsdGVy
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhP
dmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOworICAgIGZp
bHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgpKSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOwor
fQorCit2b2lkIEZFRmxvb2Q6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRUZsb29kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAor
eworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVGbG9vZCI7Cisg
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAi
IGZsb29kLWNvbG9yPVwiIiA8PCBmbG9vZENvbG9yKCkubmFtZSgpIDw8ICJcIiAiCisgICAgICAg
PDwgImZsb29kLW9wYWNpdHk9XCIiIDw8IGZsb29kT3BhY2l0eSgpIDw8ICJcIl1cbiI7CisgICAg
cmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRmxvb2QuaCIKKyNpZiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTg4LDQgKzg4LDQgQEAgVGV4dFN0cmVhbSYgRkVG
bG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUo
RklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVGbG9vZC5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBTVkdGRUZsb29kX2gKKyNkZWZpbmUgU1ZHRkVGbG9vZF9oCisKKyNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisKKyAgICBDb2xvciBmbG9vZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGbG9vZENv
bG9yKGNvbnN0IENvbG9yICYpOworCisgICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24p
IGNvbnN0OworCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBmbG9hdCk7CisK
KyAgICBDb2xvciBtX2Zsb29kQ29sb3I7CisgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFRmxvb2RfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBTVkdGRUZsb29kX2gKLSNkZWZpbmUgU1ZHRkVGbG9vZF9oCisjaWZuZGVmIEZF
Rmxvb2RfaAorI2RlZmluZSBGRUZsb29kX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCkBAIC01Myw2ICs1Myw2IEBA
IHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5k
aWYgLy8gU1ZHRkVGbG9vZF9oCisjZW5kaWYgLy8gRkVGbG9vZF9oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2
NzkzNSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNw
cDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRh
biBIZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKworI2luY2x1
ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKKyAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsCisgICAgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRy
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKKyAgICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBt
X2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCisgICAgLCBtX2xpZ2h0U291cmNlKGxpZ2h0U291
cmNlKQorICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCisgICAgLCBtX3N1cmZh
Y2VTY2FsZShzdXJmYWNlU2NhbGUpCisgICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29u
c3RhbnQpCisgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFudCkKKyAgICAs
IG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQorICAgICwgbV9rZXJuZWxVbml0
TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKKyAgICAsIG1fa2VybmVsVW5pdExlbmd0aFkoa2Vy
bmVsVW5pdExlbmd0aFkpCit7Cit9CisKK2NvbnN0IHN0YXRpYyBpbnQgY1BpeGVsU2l6ZSA9IDQ7
Citjb25zdCBzdGF0aWMgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOworY29uc3Qgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MHhmZik7CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBM
ZWZ0UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OnVwUGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6Okxp
Z2h0aW5nRGF0YTo6dXBSaWdodFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBp
bnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpjZW50ZXJQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRQaXhlbFZh
bHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5F
IGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25MZWZ0UGl4ZWxWYWx1ZSgpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
fQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25QaXhl
bFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
K30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duUmln
aHRQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdl
dChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBGRUxpZ2h0aW5nOjpz
ZXRQaXhlbChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwKKyAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBp
bnQgbm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpCit7CisgICAgbV9saWdodFNv
dXJjZS0+dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSwgbGlnaHRYLCBsaWdodFksIHN0
YXRpY19jYXN0PGZsb2F0PihkYXRhLnBpeGVscy0+Z2V0KGRhdGEub2Zmc2V0ICsgMykpICogZGF0
YS5zdXJmYWNlU2NhbGUpOworCisgICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFgpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAgIGRh
dGEubm9ybWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxZ
KSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKyAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRaKDEuMGYp
OworICAgIGRhdGEubm9ybWFsVmVjdG9yLm5vcm1hbGl6ZSgpOworCisgICAgaWYgKG1fbGlnaHRp
bmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKKyAgICAgICAgZGF0YS5saWdo
dFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAoZGF0YS5ub3JtYWxWZWN0b3IgKiBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3IpOworICAgIGVsc2UgeworICAgICAgICBGbG9hdFBvaW50M0Qg
aGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvcjsKKyAgICAgICAgaGFsZndh
eVZlY3Rvci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsgMS4wZik7CisgICAgICAgIGhhbGZ3YXlW
ZWN0b3Iubm9ybWFsaXplKCk7CisgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4w
ZikKKyAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAq
IChkYXRhLm5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGRh
dGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvciwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAg
ICB9CisKKyAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoID4gMS4wZikKKyAgICAgICAgZGF0YS5s
aWdodFN0cmVuZ3RoID0gMS4wZjsKKyAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoIDwgMC4wZikK
KyAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gMC4wZjsKKworICAgIGRhdGEucGl4ZWxzLT5z
ZXQoZGF0YS5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJl
bmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KCkpKTsKKyAgICBkYXRhLnBpeGVscy0+
c2V0KGRhdGEub2Zmc2V0ICsgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdo
dFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSkpOworICAgIGRhdGEucGl4
ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRh
LmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueigpKSk7Cit9CisKK2Jv
b2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKENhbnZhc1BpeGVsQXJyYXkqIHBpeGVscywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworCisgICAgaWYgKCFtX2xpZ2h0U291
cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5n
IGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMg
c3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVy
bnMuCisgICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGRhdGEucGl4ZWxzID0gcGl4ZWxzOworICAgIGRhdGEuc3VyZmFjZVNjYWxl
ID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUgPSB3aWR0aCAtIDE7CisgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAt
IDE7CisgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKG1fbGlnaHRp
bmdDb2xvci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5i
bHVlKCkpOworICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEocGFpbnRpbmdEYXRh
KTsKKworICAgIC8vIFRvcC9MZWZ0IGNvcm5lcgorICAgIGRhdGEub2Zmc2V0ID0gMDsKKyAgICBz
ZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsCisgICAgICAgIC0yLjBmIC8gMy4wZiwg
LTIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgp
IC0gZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCisg
ICAgICAgIC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEu
cmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3du
UmlnaHRQaXhlbFZhbHVlKCkpOworCisgICAgLy8gVG9wL1JpZ2h0IHBpeGVsCisgICAgZGF0YS5v
ZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAg
ICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwg
MCwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBk
YXRhLmRvd25QaXhlbFZhbHVlKCksCisgICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEubGVmdFBp
eGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKKworICAgIC8vIEJvdHRv
bS9MZWZ0IHBpeGVsCisgICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25l
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChkYXRhLCBw
YWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCisgICAgICAgIC0yLjBm
IC8gMy4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkg
LSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUo
KSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRh
LnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRh
LnJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKworICAgIC8vIEJvdHRvbS9SaWdodCBwaXhlbAorICAgIGRh
dGEub2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQ
aXhlbFNpemU7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCisgICAgICAgIC0yLjBmIC8g
My4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtIDIg
KiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCksCisg
ICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEu
dXBQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQ
aXhlbFZhbHVlKCkpOworCisgICAgaWYgKHdpZHRoID49IDMpIHsKKyAgICAgICAgLy8gVG9wIGxp
bmUKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBj
UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgs
IDAsCisgICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVmdFBpeGVsVmFs
dWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0xLjBm
IC8gMi4wZiwgLWRhdGEubGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFs
dWUoKSAtIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBCb3R0b20gbGluZQorICAgICAgICBkYXRhLm9mZnNl
dCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAg
ICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lLAorICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4
ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVs
VmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0x
LjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZh
bHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkg
KyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoZWlnaHQgPj0gMykgeworICAgICAgICAvLyBM
ZWZ0IGxpbmUKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkgeworICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LAorICAg
ICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVw
UmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0
YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJp
Z2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLTIgKiBkYXRh
LnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93
blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBSaWdodCBsaW5lCisgICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSkgeworICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUsIHksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0
YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0yICogZGF0YS5sZWZ0
UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVm
dFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAt
MS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZh
bHVlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0
ID49IDMpIHsKKyAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzCisgICAgICAgIGZvciAoaW50IHkg
PSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5KSB7CisgICAgICAgICAgICBk
YXRhLm9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVs
U2l6ZTsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgICAg
ICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksCisgICAgICAgICAgICAgICAgICAg
IC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4
ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4
ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4
ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQuMGYsIC1kYXRhLnVwTGVm
dFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhl
bFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgdG90YWxTaXplID0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKKyAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVz
ZUxpZ2h0aW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAzOyBpIDwgdG90YWxTaXplOyBpICs9
IDQpCisgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkg
eworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhMSA9IGRhdGEucGl4ZWxzLT5nZXQoaSk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEyID0gZGF0YS5waXhlbHMtPmdldChpICsgMSk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEzID0gZGF0YS5waXhlbHMtPmdldChpICsgMik7Cisg
ICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQorICAgICAg
ICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6
IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQor
eworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+YXBwbHko
ZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SXNB
bHBoYUltYWdlKGZhbHNlKTsKKworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdElt
YWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOworICAg
IENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOwor
CisgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwx
KS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKKyAgICAvLyBzdGFuZGFyZCBoYXMgbm8g
dGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFz
IHN0cmFuZ2UKKyAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFu
ZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgorICAgIC8vIEFueXdheSwgZmVDb252
b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCisKKyAgICBpZiAo
ZHJhd0xpZ2h0aW5nKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCksIGVm
ZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKSkKKyAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
I2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRl
ICJGRUxpZ2h0aW5nLmgiCiAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJM
aWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTI2Nyw0ICsyNjcsNCBA
QCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oOjY3OTM1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBTVkdGRUxpZ2h0aW5nX2gKKyNkZWZpbmUgU1ZHRkVMaWdodGluZ19oCisKKyNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNWR0xpZ2h0U291
cmNlLmgiCisjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgorCisvLyBDb21tb24gYmFzZSBj
bGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc1BpeGVsQXJyYXk7CisKK2NsYXNzIEZFTGln
aHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoRmlsdGVyKik7CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Cisg
ICAgICAgIERpZmZ1c2VMaWdodGluZywKKyAgICAgICAgU3BlY3VsYXJMaWdodGluZworICAgIH07
CisKKyAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1h
bFZlY3RvcjsKKyAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzOworICAgICAgICBmbG9h
dCBsaWdodFN0cmVuZ3RoOworICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgICAgIGlu
dCBvZmZzZXQ7CisgICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAg
ICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7CisgICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRC
eU9uZTsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cExlZnRQaXhlbFZhbHVlKCk7Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwUGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNf
SU5MSU5FIGludCB1cFJpZ2h0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGlu
dCBsZWZ0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBjZW50ZXJQaXhl
bFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHJpZ2h0UGl4ZWxWYWx1ZSgpOwor
ICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duTGVmdFBpeGVsVmFsdWUoKTsKKyAgICAgICAg
QUxXQVlTX0lOTElORSBpbnQgZG93blBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElO
RSBpbnQgZG93blJpZ2h0UGl4ZWxWYWx1ZSgpOworICAgIH07CisKKyAgICBGRUxpZ2h0aW5nKExp
Z2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CisKKyAgICBib29sIGRyYXdMaWdo
dGluZyhDYW52YXNQaXhlbEFycmF5KiwgaW50LCBpbnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRQaXhlbChMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwKKyAg
ICAgICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5vcm1hbFgs
IGZsb2F0IGZhY3RvclksIGludCBub3JtYWxZKTsKKworICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0
aW5nVHlwZTsKKyAgICBSZWZQdHI8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CisKKyAgICBD
b2xvciBtX2xpZ2h0aW5nQ29sb3I7CisgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CisgICAgZmxv
YXQgbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OworICAg
IGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhY
OworICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2Vu
ZGlmIC8vIFNWR0ZFTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDE0ICsyNCwxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBTVkdGRUxpZ2h0
aW5nX2gKLSNkZWZpbmUgU1ZHRkVMaWdodGluZ19oCisjaWZuZGVmIEZFTGlnaHRpbmdfaAorI2Rl
ZmluZSBGRUxpZ2h0aW5nX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQor
I2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2Uu
aCIKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUu
aD4KIAogLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNw
ZWN1bGFyTGlnaHRpbmcKQEAgLTkxLDYgKzkxLDYgQEAgcHJvdGVjdGVkOgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFTGlnaHRpbmdfaAor
I2VuZGlmIC8vIEZFTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIKKwor
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZFTWVyZ2U6OkZFTWVyZ2UoKSAKKyAgICA6IEZpbHRlckVmZmVj
dCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFTWVyZ2UpOworfQorCit2b2lkIEZFTWVyZ2U6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQoreworICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElu
cHV0cygpOworICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
aSk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgICAgICBpZiAoIWluLT5yZXN1bHRJ
bWFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4
dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgRkVNZXJnZTo6ZHVtcCgp
Cit7Cit9CisKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCk7CisgICAgdHMgPDwgIltmZU1lcmdlIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMpOworICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElu
cHV0cygpOworICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwi
IiA8PCBzaXplIDw8ICJcIl1cbiI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCShyZXZpc2lvbiA2
NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU1lcmdl
LmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVNZXJnZS5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC03OSw0ICs3OSw0
IEBAIFRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXQKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVNZXJnZV9oCisjZGVmaW5lIFNW
R0ZFTWVyZ2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFTWVyZ2UgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1lcmdlPiBj
cmVhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBGRU1lcmdlKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFTWVyZ2VfaApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCShyZXZp
c2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRU1lcmdlX2gKLSNkZWZpbmUgU1ZHRkVN
ZXJnZV9oCisjaWZuZGVmIEZFTWVyZ2VfaAorI2RlZmluZSBFTWVyZ2VfaAogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNDQsNiArNDQsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFTWVyZ2VfaAorI2VuZGlmIC8vIEZFTWVy
Z2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neS5o
IgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2lu
ZyBzdGQ6Om1pbjsKK3VzaW5nIHN0ZDo6bWF4OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZF
TW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBt
X3R5cGUodHlwZSkKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJh
ZGl1c1kpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNy
ZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1vcnBob2xvZ3kodHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOworfQorCitNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIEZFTW9ycGhvbG9n
eTo6bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlOworfQor
Cit2b2lkIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgdHlwZSkKK3sKKyAgICBtX3R5cGUgPSB0eXBlOworfQorCitmbG9hdCBGRU1vcnBo
b2xvZ3k6OnJhZGl1c1goKSBjb25zdAoreworICAgIHJldHVybiBtX3JhZGl1c1g7Cit9CisKK3Zv
aWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpCit7CisgICAgbV9yYWRp
dXNYID0gcmFkaXVzWDsKK30KKworZmxvYXQgRkVNb3JwaG9sb2d5OjpyYWRpdXNZKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yYWRpdXNZOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFk
aXVzWShmbG9hdCByYWRpdXNZKQoreworICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7Cit9CisKK3Zv
aWQgRkVNb3JwaG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYg
KCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZmZlY3RD
b250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOworCisgICAgaW50IHJhZGl1c1ggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFk
aXVzWCAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCkpOworICAgIGludCByYWRp
dXNZID0gc3RhdGljX2Nhc3Q8aW50PihtX3JhZGl1c1kgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKS5oZWlnaHQoKSk7CisgICAgaWYgKHJhZGl1c1ggPD0gMCB8fCByYWRpdXNZIDw9IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlKCktPnNpemUoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpOworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5KGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0
KS0+ZGF0YSgpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIGlu
dCBlZmZlY3RXaWR0aCA9IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiA0OworICAgIAorICAg
IC8vIExpbWl0IHRoZSByYWRpdXMgc2l6ZSB0byBlZmZlY3QgZGltZW5zaW9ucworICAgIHJhZGl1
c1ggPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1c1gpOworICAgIHJh
ZGl1c1kgPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXNZKTsKKyAg
ICAKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZXh0cmVtYTsKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IHN0
YXJ0WSA9IG1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAgICAgIGludCBlbmRZID0gbWluKGVmZmVj
dERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgeSArIHJhZGl1c1kpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwKKyAgICAgICAgICAgIGV4dHJlbWEuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHJhZGl1c1g7ICsraikgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgY29sdW1uRXh0cmVtYSA9IHNyY1BpeGVsQXJyYXktPmdldChzdGFy
dFkgKiBlZmZlY3RXaWR0aCArIDQgKiBqICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IHN0YXJ0WTsgaSA8PSBlbmRZOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBwaXhlbCA9IHNyY1BpeGVsQXJyYXktPmdldChpICogZWZmZWN0V2lkdGgg
KyA0ICogaiArIGNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYgcGl4ZWwgPD0gY29sdW1uRXh0cmVtYSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0RJTEFURSAmJiBwaXhlbCA+PSBjb2x1bW5FeHRyZW1hKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbkV4dHJlbWEgPSBwaXhlbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtYSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBleHRyZW1hIG9m
IG5leHQgY29sdW1uIAorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3REcmF3
aW5nUmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmRYID0g
bWluKHggKyByYWRpdXNYLCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBjb2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0
KHN0YXJ0WSAqIGVmZmVjdFdpZHRoICsgZW5kWCAqIDQgKyBjaGFubmVsKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gc3RhcnRZOyBpIDw9IGVuZFk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsID0gc3JjUGl4ZWxBcnJheS0+Z2V0KGkgKiBlZmZl
Y3RXaWR0aCArIGVuZFggKiA0ICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgo
bV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAmJiBwaXhlbCA8PSBjb2x1bW5F
eHRyZW1hKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFICYmIHBpeGVsID49IGNvbHVtbkV4dHJlbWEpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uRXh0cmVtYSA9IHBpeGVsOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoeCAtIHJhZGl1c1ggPj0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgZXh0cmVtYS5yZW1vdmUoMCk7CisgICAgICAgICAgICAgICAgaWYgKHggKyByYWRpdXNYIDw9
IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbWEpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW50
aXJlRXh0cmVtYSA9IGV4dHJlbWFbMF07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBr
ZXJuZWxJbmRleCA9IDA7IGtlcm5lbEluZGV4IDwgZXh0cmVtYS5zaXplKCk7ICsra2VybmVsSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0VST0RFICYmIGV4dHJlbWFba2VybmVsSW5kZXhdIDw9IGVudGlyZUV4dHJlbWEpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9ESUxBVEUgJiYgZXh0cmVtYVtrZXJuZWxJbmRleF0gPj0gZW50aXJlRXh0cmVtYSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRpcmVFeHRyZW1hID0gZXh0cmVtYVtrZXJuZWxJbmRleF07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5z
ZXQoeSAqIGVmZmVjdFdpZHRoICsgNCAqIHggKyBjaGFubmVsLCBlbnRpcmVFeHRyZW1hKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgp
KTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OmR1bXAoKQoreworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9VTktOT1dOOgorICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgorICAgICAgICB0cyA8
PCAiRVJPREUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9ESUxBVEU6CisgICAgICAgIHRzIDw8ICJESUxBVEUiOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAg
d3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZU1vcnBob2xvZ3kiOworICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBv
cGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKKyAgICAgICA8PCAi
cmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsg
ICAgCisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVu
dCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNp
b24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJT
VkdGRU1vcnBob2xvZ3kuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRU1vcnBo
b2xvZ3kuaCIKIAogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKQEAgLTE4NSw0ICsxODUsNCBAQCBUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVy
bmFsUmVwcmVzCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAko
cmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVN
b3JwaG9sb2d5Lmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgU1ZHRkVNb3JwaG9sb2d5X2gKKyNkZWZpbmUgU1ZHRkVNb3JwaG9s
b2d5X2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CisgICAgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX1VOS05PV04gPSAwLAorICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEsCisg
ICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKK307CisKK2NsYXNzIEZFTW9ycGhv
bG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJh
ZGl1c1gsIGZsb2F0IHJhZGl1c1kpOyAgCisgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3Jw
aG9sb2d5T3BlcmF0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldE1vcnBob2xvZ3lPcGVyYXRvcihN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKworICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdDsKKyAg
ICB2b2lkIHNldFJhZGl1c1goZmxvYXQpOworCisgICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UmFkaXVzWShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmls
dGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIAorICAgIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgbV90eXBlOworICAgIGZsb2F0IG1fcmFkaXVzWDsKKyAgICBmbG9hdCBtX3JhZGl1
c1k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFTW9ycGhvbG9neV9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFTW9ycGhvbG9neV9o
Ci0jZGVmaW5lIFNWR0ZFTW9ycGhvbG9neV9oCisjaWZuZGVmIEZFTW9ycGhvbG9neV9oCisjZGVm
aW5lIEZFTW9ycGhvbG9neV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKIApAQCAtNjEsNiArNjEsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFTW9ycGhvbG9neV9oCisj
ZW5kaWYgLy8gRkVNb3JwaG9sb2d5X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFT2Zmc2V0Lmgi
CisKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0
IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fZHgoZHgpCisgICAgLCBtX2R5KGR5
KQoreworfQorCitQYXNzUmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4
LCBmbG9hdCBkeSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFT2Zmc2V0KGR4LCBkeSkp
OworfQorCitmbG9hdCBGRU9mZnNldDo6ZHgoKSBjb25zdAoreworICAgIHJldHVybiBtX2R4Owor
fQorCit2b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKK3sKKyAgICBtX2R4ID0gZHg7Cit9
CisKK2Zsb2F0IEZFT2Zmc2V0OjpkeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHk7Cit9CisK
K3ZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQoreworICAgIG1fZHkgPSBkeTsKK30KKwor
dm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICgh
aW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUlt
YWdlKCkpOworCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCA9IGZpbHRlci0+c291cmNl
SW1hZ2VSZWN0KCk7CisgICAgc291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
KworICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9kZSgpKSB7CisgICAgICAgIG1f
ZHggKj0gc291cmNlSW1hZ2VSZWN0LndpZHRoKCk7CisgICAgICAgIG1fZHkgKj0gc291cmNlSW1h
Z2VSZWN0LmhlaWdodCgpOworICAgIH0KKyAgICBtX2R4ICo9IGZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCk7CisgICAgbV9keSAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKTsKKworICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gRmxvYXRSZWN0KG1fZHggKyBpbi0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2R5
ICsgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKS55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkud2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKS5oZWlnaHQoKSk7CisKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOworfQorCit2b2lkIEZF
T2Zmc2V0OjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZU9mZnNldCI7IAorICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBkeD1cIiIg
PDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJu
IHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFT2Zmc2V0LmgiCisjaWYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTA5LDQgKzEwOSw0IEBAIFRleHRTdHJlYW0mIEZF
T2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGEKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxF
KEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVPZmZzZXQuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFNWR0ZFT2Zmc2V0X2gKKyNkZWZpbmUgU1ZHRkVPZmZzZXRfaAor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRkVPZmZzZXQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSk7CisKKyAgICBm
bG9hdCBkeCgpIGNvbnN0OworICAgIHZvaWQgc2V0RHgoZmxvYXQpOworCisgICAgZmxvYXQgZHko
KSBjb25zdDsKKyAgICB2b2lkIHNldER5KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9u
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwor
CisgICAgZmxvYXQgbV9keDsKKyAgICBmbG9hdCBtX2R5OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNl
bmRpZiAvLyBTVkdGRU9mZnNldF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5
LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNW
R0ZFT2Zmc2V0X2gKLSNkZWZpbmUgU1ZHRkVPZmZzZXRfaAorI2lmbmRlZiBGRU9mZnNldF9oCisj
ZGVmaW5lIEZFT2Zmc2V0X2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQor
I2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogCkBAIC01Miw2ICs1Miw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2Vu
ZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVPZmZzZXRfaAorI2VuZGlm
IC8vIEZFT2Zmc2V0X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkJKGZy
b20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
OjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCIKKworI2luY2x1ZGUg
IlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVTcGVjdWxhckxp
Z2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwKKyAgICBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCisgICAgOiBG
RUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwg
MCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkKK3sKK30KKworUGFzc1JlZlB0cjxGRVNw
ZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBs
aWdodGluZ0NvbG9yLAorICAgIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0
U291cmNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxp
Z2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwKKyAgICAgICAga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdo
dFNvdXJjZSkpOworfQorCitGRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmco
KQoreworfQorCitDb2xvciBGRVNwZWN1bGFyTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorewor
ICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Cit9CisKK2Zsb2F0IEZFU3BlY3Vs
YXJMaWdodGluZzo6c3VyZmFjZVNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNl
U2NhbGU7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxv
YXQgc3VyZmFjZVNjYWxlKQoreworICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwor
fQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3NwZWN1bGFyQ29uc3RhbnQ7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCit7Cisg
ICAgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsKK30KKworZmxvYXQgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckV4cG9uZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zcGVjdWxhckV4cG9uZW50OworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3Bl
Y3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50KQoreworICAgIG1fc3BlY3VsYXJF
eHBvbmVudCA9IHNwZWN1bGFyRXhwb25lbnQ7Cit9CisKK2Zsb2F0IEZFU3BlY3VsYXJMaWdodGlu
Zzo6a2VybmVsVW5pdExlbmd0aFgoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRM
ZW5ndGhYOworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0
aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9
IGtlcm5lbFVuaXRMZW5ndGhYOworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5l
bFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsK
K30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZKQoreworICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxV
bml0TGVuZ3RoWTsKK30KKworY29uc3QgTGlnaHRTb3VyY2UqIEZFU3BlY3VsYXJMaWdodGluZzo6
bGlnaHRTb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOwor
fQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCit7CisgICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291
cmNlOworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6ZHVtcCgpCit7Cit9CisKK1RleHRT
dHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
KTsKKyAgICB0cyA8PCAiW2ZlU3BlY3VsYXJMaWdodGluZyI7CisgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIg
PDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKKyAgICAgICA8PCAic3BlY3VhbENvbnN0YW50PVwi
IiA8PCBtX3NwZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKKyAgICAgICA8PCAic3BlY3VsYXJFeHBv
bmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl1cbiI7CisgICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIHJldHVy
biB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5
MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEwIEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUg
IkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNp
bmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzNSw0
ICsxMzUsNCBAQCBUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAkocmV2
aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKKyNkZWZp
bmUgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgICAgIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBh
c3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKyAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmco
KTsKKworICAgIENvbG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldExpZ2h0
aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKKworICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0
OworICAgIHZvaWQgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKKworICAgIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwor
CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0U3BlY3Vs
YXJFeHBvbmVudChmbG9hdCk7CisKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0
OworICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOworCisgICAgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFkoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZs
b2F0KTsKKworICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworCisgICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKKworI2VuZGlmIC8vIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBACiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCisjaWZuZGVmIEZF
U3BlY3VsYXJMaWdodGluZ19oCisjZGVmaW5lIEZFU3BlY3VsYXJMaWdodGluZ19oCiAKLSNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgi
CisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTY0LDYgKzY0LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisj
ZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRVNwZWN1bGFyTGlnaHRp
bmdfaAorI2VuZGlmIC8vIEZFU3BlY3VsYXJMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDo2NzkzNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3
cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgor
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZFVGlsZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdCgpCit7
Cit9CisKK1Bhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGRVRpbGUpOworfQorCitGbG9hdFJlY3QgRkVUaWxlOjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgaW5wdXRFZmZl
Y3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworCisgICAg
ZmlsdGVyLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24odGhpcywgZmlsdGVyLT5m
aWx0ZXJSZWdpb24oKSk7CisgICAgcmV0dXJuIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwor
fQorCit2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNv
bnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBo
YUltYWdlKCkpOworCisgICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworCisgICAgLy8gU291cmNlIGlucHV0
IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lv
biBidXQgZ2l2ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJh
Y2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgor
ICAgIGlmIChpbi0+aXNTb3VyY2VJbnB1dCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgICAgICBmaWx0ZXJSZWdpb24uc2Nh
bGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
ZmlsdGVyUmVnaW9uKTsKKyAgICB9CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKKyAgICB0aWxl
SW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNv
bG9yU3BhY2UsIEludFBvaW50KCkpOworICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0
dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRydWUpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkueCgpLAorICAgICAgICAgICAgICAgICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkpOwor
ICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShtYXRyaXgpOworCisg
ICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7CisgICAgZmlsdGVyQ29u
dGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKS5zaXplKCkpKTsKK30KKwordm9pZCBGRVRpbGU6OmR1bXAoKQoreworfQor
CitUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Cisg
ICAgdHMgPDwgIltmZVRpbGUiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cyk7CisgICAgdHMgPDwgIl1cbiI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworCisgICAgcmV0dXJuIHRzOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0j
aW5jbHVkZSAiU1ZHRkVUaWxlLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVU
aWxlLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKQEAgLTEwMiw1ICsxMDIsNSBAQCBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVz
ZW50YXRpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCShyZXZpc2lvbiA2Nzkz
NSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaDo2NzkzNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRVRp
bGVfaAorI2RlZmluZSBTVkdGRVRpbGVfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFVGlsZT4gY3JlYXRlKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CisgICAgCitwcml2
YXRlOgorICAgIEZFVGlsZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRVRp
bGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAko
cmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRVRpbGVfaAotI2RlZmluZSBTVkdG
RVRpbGVfaAorI2lmbmRlZiBGRVRpbGVfaAorI2RlZmluZSBGRVRpbGVfaAogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTQ1LDYgKzQ1LDYgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRp
ZiAvLyBTVkdGRVRpbGVfaAorI2VuZGlmIC8vIEZFVGlsZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24g
Njc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNl
LmNwcDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFVHVyYnVsZW5jZS5oIgorCisjaW5jbHVkZSAiQ2FudmFz
UGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvKgorICAgIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBB
bGdvcml0aG0gaXM6CisgICAgciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1
ZGUgPSAxNjgwNyBhbmQKKyAgICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgz
NjQ3LCByID0gc2VlZC4KKyAgICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8u
IDEwIHAuIDExOTUsIE9jdC4gMTk4OAorICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxk
IHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQzNjE4MDY1CisgICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVy
YXRlZCBudW1iZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KKyovCitzdGF0aWMgY29uc3Qg
aW50IHNfcGVybGluTm9pc2UgPSA0MDk2Oworc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11
bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMxIC0gMQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBs
aXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQorc3RhdGljIGNvbnN0
IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRS
ID0gMjgzNjsgLy8gbSAlIGEKKworRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsYW5j
ZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBp
bnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRl
ckVmZmVjdCgpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVgpCisgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQorICAg
ICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgLCBtX3NlZWQoc2VlZCkKKyAgICAsIG1f
c3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVUdXJidWxlbmNl
PiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShUdXJidWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVk
LCBib29sIHN0aXRjaFRpbGVzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUdXJidWxl
bmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2Vl
ZCwgc3RpdGNoVGlsZXMpKTsKK30KKworVHVyYnVsYW5jZVR5cGUgRkVUdXJidWxlbmNlOjp0eXBl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6
c2V0VHlwZShUdXJidWxhbmNlVHlwZSB0eXBlKQoreworICAgIG1fdHlwZSA9IHR5cGU7Cit9CisK
K2Zsb2F0IEZFVHVyYnVsZW5jZTo6YmFzZUZyZXF1ZW5jeVkoKSBjb25zdAoreworICAgIHJldHVy
biBtX2Jhc2VGcmVxdWVuY3lZOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCit7CisgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJh
c2VGcmVxdWVuY3lZOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lYKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WDsKK30KKwordm9pZCBGRVR1cmJ1
bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQoreworICAgICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKK30KKworZmxvYXQgRkVUdXJidWxl
bmNlOjpzZWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWVkOyAKK30KKwordm9pZCBGRVR1
cmJ1bGVuY2U6OnNldFNlZWQoZmxvYXQgc2VlZCkKK3sKKyAgICBtX3NlZWQgPSBzZWVkOworfQor
CitpbnQgRkVUdXJidWxlbmNlOjpudW1PY3RhdmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
dW1PY3RhdmVzOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhib29sIG51
bU9jdGF2ZXMpCit7CisgICAgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsKK30KKworYm9vbCBG
RVR1cmJ1bGVuY2U6OnN0aXRjaFRpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGl0Y2hU
aWxlczsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNo
KQoreworICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7Cit9CisKKy8vIFRoZSB0dXJidWxlbmNl
IGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBp
biB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgorLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH
MTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQorCitGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0
YTo6UGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGlu
Z1NpemUpCisgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKKyAgICAsIHdpZHRoKDApCisgICAgLCBo
ZWlnaHQoMCkKKyAgICAsIHdyYXBYKDApCisgICAgLCB3cmFwWSgwKQorICAgICwgY2hhbm5lbCgw
KQorICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCit7Cit9CisKKy8vIENvbXB1dGUgcHNl
dWRvIHJhbmRvbSBudW1iZXIuCitpbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0
YTo6cmFuZG9tKCkKK3sKKyAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVk
ICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKKyAgICBpZiAocmVzdWx0
IDw9IDApCisgICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOworICAgIHNlZWQgPSByZXN1
bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZs
b2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Cit9CisKK2lubGluZSBm
bG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30KKworaW5saW5lIHZvaWQgRkVUdXJidWxlbmNl
Ojppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit7CisgICAgZmxvYXQgbm9y
bWFsaXphdGlvbkZhY3RvcjsKKworICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSBy
YW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgorICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8
PSAwKQorICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAo
c19yYW5kTWF4aW11bSAtIDEpKSArIDE7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19y
YW5kTWF4aW11bSAtIDEpCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11
bSAtIDE7CisKKyAgICBmbG9hdCogZ3JhZGllbnQ7CisgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7
IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
X2Jsb2NrU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2ldID0gaTsKKyAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW2ldOworICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNf
YmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3Rv
ciA9IHNxcnRmKGdyYWRpZW50WzBdICogZ3JhZGllbnRbMF0gKyBncmFkaWVudFsxXSAqIGdyYWRp
ZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
CisgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAg
ICB9CisgICAgfQorICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAg
ICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOworICAgICAg
ICBBU1NFUlQoaiA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAy
KTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbal07CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3Jbal0gPSBrOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsg
MjsgKytpKSB7CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1Np
emUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGZvciAo
aW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAgICAgICBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50
aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVswXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW2ldWzFdOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9p
ZCBjaGVja05vaXNlKGludCYgbm9pc2VWYWx1ZSwgaW50IGxpbWl0VmFsdWUsIGludCBuZXdWYWx1
ZSkKK3sKKyAgICBpZiAobm9pc2VWYWx1ZSA+PSBsaW1pdFZhbHVlKQorICAgICAgICBub2lzZVZh
bHVlIC09IG5ld1ZhbHVlOworICAgIGlmIChub2lzZVZhbHVlID49IGxpbWl0VmFsdWUgLSAxKQor
ICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlIC0gMTsKK30KKworZmxvYXQgRkVUdXJidWxl
bmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50
JiBub2lzZVZlY3RvcikKK3sKKyAgICBzdHJ1Y3QgTm9pc2UgeworICAgICAgICBpbnQgbm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZTsKKyAgICAgICAgZmxvYXQgbm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWU7CisKKyAgICAgICAgTm9pc2UoZmxvYXQgY29tcG9uZW50KQorICAgICAgICB7CisgICAg
ICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7CisgICAg
ICAgICAgICBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihwb3Np
dGlvbik7CisgICAgICAgICAgICBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSA9IHBvc2l0aW9u
IC0gbm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBO
b2lzZSBub2lzZVgobm9pc2VWZWN0b3IueCgpKTsKKyAgICBOb2lzZSBub2lzZVkobm9pc2VWZWN0
b3IueSgpKTsKKyAgICBmbG9hdCogcTsKKyAgICBmbG9hdCBzeCwgc3ksIGEsIGIsIHUsIHY7CisK
KyAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4K
KyAgICBpZiAobV9zdGl0Y2hUaWxlcykgeworICAgICAgICBjaGVja05vaXNlKG5vaXNlWC5ub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlLCBwYWludGluZ0RhdGEud3JhcFgsIHBhaW50aW5nRGF0YS53
aWR0aCk7CisgICAgICAgIGNoZWNrTm9pc2Uobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUsIHBhaW50aW5nRGF0YS53cmFwWSwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgICAgfQorCisg
ICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgaW50
IGxhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3Rvclsobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
KyAxKSAmIHNfYmxvY2tNYXNrXTsKKworICAgIHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKyAgICBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7CisKKyAgICAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9t
IFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJi
dWxlbmNlRWxlbWVudC4KKyAgICBpbnQgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAg
IHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwor
ICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgbm9pc2VZ
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKKyAgICB0ZW1wID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWVdOworICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdE
YXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlIC0gMSkgKiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICog
cVsxXTsKKyAgICBhID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisgICAgdGVtcCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRp
b25GcmFjdGlvblZhbHVlICogcVswXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWUgLSAxKSAqIHFbMV07CisgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
bmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07
CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVt
cF07CisgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFb
MF0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOworICAg
IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKyAgICByZXR1cm4gbGluZWFySW50
ZXJwb2xhdGlvbihzeSwgYSwgYik7Cit9CisKK3Vuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpj
YWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgZmxvYXQgdGlsZVdpZHRoID0gcGFp
bnRpbmdEYXRhLmZpbHRlclNpemUud2lkdGgoKTsKKyAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7
CisgICAgZmxvYXQgdGlsZUhlaWdodCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLmhlaWdodCgp
OworICAgIEFTU0VSVCh0aWxlSGVpZ2h0ID4gMCk7CisgICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZy
ZXF1ZW5jaWVzIGlmIG5lY2Vzc2FyeSBmb3Igc3RpdGNoaW5nLgorICAgIGlmIChtX3N0aXRjaFRp
bGVzKSB7CisgICAgICAgIC8vIFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBm
cmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVkCisgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUg
Ym9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCisgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lY
KSB7CisgICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICog
bV9iYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCBoaWdoRnJl
cXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7
CisgICAgICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNj
b3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lY
IC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIG1fYmFzZUZyZXF1ZW5jeVgpCisgICAg
ICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsK
KyAgICAgICAgfQorICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WSkgeworICAgICAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZ
KSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYo
dGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAg
IGlmIChtX2Jhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIG1f
YmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGxvd0Zy
ZXF1ZW5jeTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVu
Y3lZID0gaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgdXAgVHVyYnVs
ZW5jZUluaXRpYWwgc3RpdGNoIHZhbHVlcy4KKyAgICAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0g
cm91bmRmKHRpbGVXaWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBwYWludGluZ0Rh
dGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICBw
YWludGluZ0RhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZ
KTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHBhaW50aW5n
RGF0YS5oZWlnaHQ7CisgICAgfQorICAgIGZsb2F0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9
IDA7CisgICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBtX2Jhc2VGcmVxdWVu
Y3lYLCBwb2ludC55KCkgKiBtX2Jhc2VGcmVxdWVuY3lZKTsKKyAgICBmbG9hdCByYXRpbyA9IDE7
CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2
ZSkgeworICAgICAgICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lT
RSkKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50
aW5nRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBmYWJzZihub2lzZTJEKHBhaW50aW5nRGF0YSwg
bm9pc2VWZWN0b3IpKSAvIHJhdGlvOworICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVj
dG9yLngoKSAqIDIpOworICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAq
IDIpOworICAgICAgICByYXRpbyAqPSAyOworICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewor
ICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGlu
Tm9pc2VvaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAgICAgICAgICAvLyBh
ZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KKyAg
ICAgICAgICAgIHBhaW50aW5nRGF0YS53aWR0aCAqPSAyOworICAgICAgICAgICAgcGFpbnRpbmdE
YXRhLndyYXBYID0gMiAqIHBhaW50aW5nRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7CisgICAg
ICAgICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ICo9IDI7CisgICAgICAgICAgICBwYWludGluZ0Rh
dGEud3JhcFkgPSAyICogcGFpbnRpbmdEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8g
MiBieSBmcmFjdGFsTm9pc2UKKyAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAq
IDI1NSkgYnkgdHVyYnVsZW5jZS4KKyAgICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBF
X0ZSQUNUQUxOT0lTRSkKKyAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7CisgICAgLy8gQ2xhbXAgcmVzdWx0Cisg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gc3RkOjptYXgoc3RkOjptaW4odHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0LCAxLmYpLCAwLmYpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPih0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpOworfQorCit2b2lkIEZF
VHVyYnVsZW5jZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgaWYgKCFlZmZlY3RDb250
ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgaWYgKCFpbWFnZVJlY3Quc2l6ZSgpLndp
ZHRoKCkgfHwgIWltYWdlUmVjdC5zaXplKCkuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdl
UmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworICAgIFBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGEobV9zZWVkLCBpbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBpbml0UGFpbnQocGFpbnRp
bmdEYXRhKTsKKworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJl
Z2lvbigpOworICAgIEZsb2F0UG9pbnQgcG9pbnQ7CisgICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdp
b24ueSgpKTsKKyAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IDA7CisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBpbWFnZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBwb2ludC5zZXRZ
KHBvaW50LnkoKSArIDEpOworICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAg
ICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CisgICAgICAgICAgICBmb3IgKHBh
aW50aW5nRGF0YS5jaGFubmVsID0gMDsgcGFpbnRpbmdEYXRhLmNoYW5uZWwgPCA0OyArK3BhaW50
aW5nRGF0YS5jaGFubmVsLCArK2luZGV4T2ZQaXhlbENoYW5uZWwpCisgICAgICAgICAgICAgICAg
aW1hZ2VEYXRhLT5kYXRhKCktPnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHBvaW50KSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0
YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6
OmR1bXAoKQoreworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgVHVyYnVsYW5jZVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9VTktOT1dOOgorICAgICAgICB0cyA8PCAiVU5L
Tk9XTiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfVFVSQlVM
RU5DRToKKyAgICAgICAgdHMgPDwgIlRVUkJVTEFOQ0UiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRToKKyAgICAgICAgdHMgPDwgIk5PSVNF
IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVh
bSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBp
bnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRz
IDw8ICJbZmVUdXJidWxlbmNlIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMpOworICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCisgICAg
ICAgPDwgImJhc2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBi
YXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAiCisgICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8
PCAiXCIgIgorICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwi
ICIKKyAgICAgICA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxu
IjsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVU
dXJidWxlbmNlLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVUdXJidWxlbmNl
LmgiCiAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CkBAIC0zODMsNCArMzgzLDQgQEAgVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJl
cHJlcwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHJldmlz
aW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVs
ZW5jZS5oOjY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgU1ZHRkVUdXJidWxlbmNlX2gKKyNkZWZpbmUgU1ZHRkVUdXJidWxlbmNl
X2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gVHVyYnVsYW5jZVR5cGUgeworICAgIEZFVFVSQlVMRU5DRV9UWVBFX1VOS05PV04gPSAw
LAorICAgIEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSA9IDEsCisgICAgRkVUVVJCVUxF
TkNFX1RZUEVfVFVSQlVMRU5DRSA9IDIKK307CisKK2NsYXNzIEZFVHVyYnVsZW5jZSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFVHVyYnVs
ZW5jZT4gY3JlYXRlKFR1cmJ1bGFuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJv
b2wpOworCisgICAgVHVyYnVsYW5jZVR5cGUgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlw
ZShUdXJidWxhbmNlVHlwZSk7CisKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQpOworCisgICAgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgoKSBjb25zdDsKKyAgICB2b2lkIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsKKworICAg
IGZsb2F0IHNlZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlZWQoZmxvYXQpOworCisgICAgaW50
IG51bU9jdGF2ZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldE51bU9jdGF2ZXMoYm9vbCk7CisKKyAg
ICBib29sIHN0aXRjaFRpbGVzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdGl0Y2hUaWxlcyhib29s
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2OworICAgIHN0YXRpYyBjb25zdCBpbnQgc19i
bG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
KyAgICAgICAgbG9uZyBzZWVkOworICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Js
b2NrU2l6ZSArIDJdOworICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUg
KyAyXVsyXTsKKyAgICAgICAgaW50IHdpZHRoOyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3
cmFwIGZvciBzdGl0Y2hpbmcuCisgICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIGludCB3cmFw
WDsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgICAgICBpbnQgd3JhcFk7CisgICAgICAg
IGludCBjaGFubmVsOworICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7CisKKyAgICAgICAgUGFp
bnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUp
OworICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKKyAgICB9OworCisgICAgRkVUdXJidWxl
bmNlKFR1cmJ1bGFuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworCisg
ICAgaW5saW5lIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOworICAgIGZsb2F0IG5vaXNl
MkQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHVuc2lnbmVkIGNoYXIg
Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxv
YXRQb2ludCYpOworCisgICAgVHVyYnVsYW5jZVR5cGUgbV90eXBlOworICAgIGZsb2F0IG1fYmFz
ZUZyZXF1ZW5jeVg7CisgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WTsKKyAgICBpbnQgbV9udW1P
Y3RhdmVzOworICAgIGZsb2F0IG1fc2VlZDsKKyAgICBib29sIG1fc3RpdGNoVGlsZXM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFVHVyYnVsZW5jZV9oCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lv
biA2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEwIEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFVHVyYnVsZW5jZV9oCi0jZGVmaW5l
IFNWR0ZFVHVyYnVsZW5jZV9oCisjaWZuZGVmIEZFVHVyYnVsZW5jZV9oCisjZGVmaW5lIEZFVHVy
YnVsZW5jZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFC
TEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKIApAQCAtOTgsNiArOTgsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFVHVyYnVsZW5jZV9oCisjZW5kaWYgLy8g
RkVUdXJidWxlbmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0xpZ2h0U291cmNlLmNwcAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwOjY3OTM1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0xp
Z2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCIKKyNpbmNs
dWRlICJTVkdQb2ludExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIgorI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQb2ludExpZ2h0U291cmNl
Ojppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpCit7Cit9CisKK3ZvaWQgUG9pbnRMaWdo
dFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeCwgaW50IHksIGZsb2F0IHopCit7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNl
dFgobV9wb3NpdGlvbi54KCkgLSB4KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0
WShtX3Bvc2l0aW9uLnkoKSAtIHkpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRa
KG1fcG9zaXRpb24ueigpIC0geik7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLm5vcm1h
bGl6ZSgpOworfQorCisvLyBzcG90LWxpZ2h0IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4g
YWJzb2x1dGUgdHJlc2hvbGQKKy8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCBy
ZWdyZXNzaW9uIHRlc3RzCitzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAw
LjAxNmY7CisKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKQoreworICAgIHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0
b3IgPSBwYWludGluZ0RhdGEuY29sb3JWZWN0b3I7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3Rvci5zZXRYKG1fZGlyZWN0aW9uLngoKSAtIG1fcG9zaXRpb24ueCgpKTsKKyAgICBwYWlu
dGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFkobV9kaXJlY3Rpb24ueSgpIC0gbV9wb3NpdGlv
bi55KCkpOworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WihtX2RpcmVjdGlv
bi56KCkgLSBtX3Bvc2l0aW9uLnooKSk7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKKworICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgeworICAgICAg
ICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKyAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworICAg
ICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdD
b25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA+IDkwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKKyAg
ICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYg
LSBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdo
dCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKyAg
ICB9CisKKyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZh
bHVlcworICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQorICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09
IDEuMGYpCisgICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKKyAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgorICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDI7Cit9CisKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjp1cGRhdGVQ
YWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxv
YXQgeikKK3sKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngo
KSAtIHgpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgp
IC0geSk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkg
LSB6KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7CisKKyAgICBm
bG9hdCBjb3NpbmVPZkFuZ2xlID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yICogcGFpbnRpbmdE
YXRhLmRpcmVjdGlvblZlY3RvcjsKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0
YS5jb25lQ3V0T2ZmTGltaXQpIHsKKyAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNj
YW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9y
LnNldFgoMC4wZik7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZKDAuMGYp
OworICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WigwLjBmKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFNldCB0aGUgY29sb3Igb2YgdGhlIHBpeGVsCisgICAg
ZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5zcGVjdWxhckV4
cG9uZW50KSB7CisgICAgY2FzZSAwOgorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsgLy8g
LWNvc2luZU9mQW5nbGUgXiAwID09IDEKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gLWNvc2luZU9mQW5nbGU7IC8vIC1jb3NpbmVPZkFuZ2xlIF4g
MSA9PSAtY29zaW5lT2ZBbmdsZQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gcG93ZigtY29zaW5lT2ZBbmdsZSwgbV9zcGVjdWxhckV4cG9uZW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWlu
dGluZ0RhdGEuY29uZUZ1bGxMaWdodCkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCAqPSAocGFpbnRp
bmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGNvc2luZU9mQW5nbGUpIC8gKHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgLSBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCk7CisKKyAgICBpZiAo
bGlnaHRTdHJlbmd0aCA+IDEuMGYpCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOworCisg
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xv
clZlY3Rvci54KCkgKiBsaWdodFN0cmVuZ3RoKTsKKyAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3Iuc2V0WShwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnkoKSAqIGxpZ2h0U3RyZW5n
dGgpOworICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRaKHBhaW50aW5nRGF0YS5wcml2
YXRlQ29sb3JWZWN0b3IueigpICogbGlnaHRTdHJlbmd0aCk7Cit9CisKK3ZvaWQgRGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQor
eworICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CisgICAgZmxvYXQgZWxl
dmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnNldFgoY29zZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7CisgICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7Cisg
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFooc2luZihlbGV2YXRpb24pKTsKK30KKwor
dm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEm
LCBpbnQsIGludCwgZmxvYXQpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50M0QmIHApCit7CisgICAgdHMgPDwgIng9
IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIFBvaW50TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIlt0eXBlPVBPSU5U
LUxJR0hUXSAiOworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0aW9uKCkgPDwgIlwi
XSI7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBTcG90TGlnaHRTb3VyY2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwg
Ilt0eXBlPVNQT1QtTElHSFRdICI7CisgICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9zaXRp
b24oKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0aW9uKCkg
PDwgIlwiXSI7CisgICAgdHMgPDwgIltzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBzcGVjdWxhckV4
cG9uZW50KCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltsaW1pdGluZ0NvbmVBbmdsZT1cIiIgPDwg
bGltaXRpbmdDb25lQW5nbGUoKSA8PCAiXCJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRT
dHJlYW0mIERpc3RhbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9RElTVEFOVC1MSUdIVF0gIjsKKyAg
ICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IGF6aW11dGgoKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAi
W2VsZXZhdGlvbj1cIiIgPDwgZWxldmF0aW9uKCkgPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0xpZ2h0U291cmNlLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MiwxMyArMjIsMTMgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNpZiBFTkFC
TEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogCi0jaW5jbHVkZSAiU1ZHRGlz
dGFudExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHUG9pbnRMaWdodFNvdXJjZS5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdTcG90TGlnaHRTb3Vy
Y2UuaCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJQb2ludExp
Z2h0U291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNw
b3RMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTE2Niw0ICsxNjYsNCBAQCBUZXh0U3RyZWFtJiBEaXN0YW50TGlnaHRT
b3VyY2U6OmV4dGVybmFsCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmgJKHJldmlzaW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0xpZ2h0U291cmNlLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0xpZ2h0U291cmNlX2gKKyNkZWZp
bmUgU1ZHTGlnaHRTb3VyY2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gTGlnaHRUeXBlIHsKKyAgICBMU19ESVNUQU5ULAorICAgIExTX1BPSU5ULAorICAgIExTX1NQ
T1QKK307CisKK2NsYXNzIFRleHRTdHJlYW07CisKK2NsYXNzIExpZ2h0U291cmNlIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGlnaHRTb3VyY2U+IHsKK3B1YmxpYzoKKworICAgIC8vIExpZ2h0IHZlY3Rv
cnMgbXVzdCBiZSBjYWxjdWxhdGVkIGZvciBldmVyeSBwaXhlbCBkdXJpbmcKKyAgICAvLyBwYWlu
dGluZy4gSXQgaXMgZXhwZW5zaXZlIHRvIHBhc3MgYWxsIHRoZXNlIGFyZ3VtZW50cyB0bworICAg
IC8vIGEgZnJlcXVlbnRseSBjYWxsZWQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgYmVjYXVzZSBub3Qg
YWxsCisgICAgLy8gbGlnaHQgc291cmNlcyByZXF1aXJlIGFsbCBvZiB0aGVtLiBJbnN0ZWFkLCB3
ZSBqdXN0IHBhc3MKKyAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVy
ZQorICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAgICAgICAvLyBTVkdGRUxpZ2h0aW5nIGFs
c28gdXNlIHRoZW0KKyAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOworICAgICAgICBG
bG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgICAgICAgIC8vIFByaXZhdGUgbWVtYmVycworICAg
ICAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOworICAgICAgICBGbG9hdFBvaW50M0Qg
cHJpdmF0ZUNvbG9yVmVjdG9yOworICAgICAgICBmbG9hdCBjb25lQ3V0T2ZmTGltaXQ7CisgICAg
ICAgIGZsb2F0IGNvbmVGdWxsTGlnaHQ7CisgICAgICAgIGludCBzcGVjdWxhckV4cG9uZW50Owor
ICAgIH07CisKKyAgICBMaWdodFNvdXJjZShMaWdodFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUodHlwZSkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgfkxpZ2h0U291cmNlKCkgeyB9CisKKyAg
ICBMaWdodFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZpcnR1YWwg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJikgPSAw
OworICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1
ZSBzY2FsZWQgYnkgYSB1c2VyCisgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0
YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgeikgPSAwOworCitwcml2YXRlOgorICAgIExpZ2h0VHlwZSBtX3R5cGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKworI2VuZGlmIC8vIFNWR0xpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2Nzkz
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHTGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdMaWdo
dFNvdXJjZV9oCisjaWZuZGVmIExpZ2h0U291cmNlX2gKKyNkZWZpbmUgTGlnaHRTb3VyY2VfaAog
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMp
CiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzksNiArNzksNiBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0xp
Z2h0U291cmNlX2gKKyNlbmRpZiAvLyBMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgJKHJldmlz
aW9uIDY3OTM1KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1BvaW50TGln
aHRTb3VyY2UuaDo2NzkzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Q
b2ludExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdQb2ludExpZ2h0U291cmNlX2gKKyNk
ZWZpbmUgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQb2ludExpZ2h0U291cmNlKHBvc2l0aW9uKSk7CisgICAgfQorCisgICAgY29uc3QgRmxv
YXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAg
IHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUG9pbnRMaWdodFNvdXJjZShj
b25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQorICAgICAgICA6IExpZ2h0U291cmNlKExTX1BP
SU5UKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgeworICAgIH0KKworICAg
IEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBT
VkdQb2ludExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR1Bv
aW50TGlnaHRTb3VyY2VfaAorI2lmbmRlZiBQb2ludExpZ2h0U291cmNlX2gKKyNkZWZpbmUgUG9p
bnRMaWdodFNvdXJjZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUg
IkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsNiArNTQsNiBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2Vu
ZGlmIC8vIFNWR1BvaW50TGlnaHRTb3VyY2VfaAorI2VuZGlmIC8vIFBvaW50TGlnaHRTb3VyY2Vf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5MzUpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHU3BvdExpZ2h0U291cmNlLmg6Njc5MzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nl
c3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdTcG90
TGlnaHRTb3VyY2VfaAorI2RlZmluZSBTVkdTcG90TGlnaHRTb3VyY2VfaAorCisjaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTcG90TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGln
aHRTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdodFNvdXJj
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sCisgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQzRCYgZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1p
dGluZ0NvbmVBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BvdExp
Z2h0U291cmNlKHBvc2l0aW9uLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5n
Q29uZUFuZ2xlKSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRp
cmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisKKyAgICBmbG9hdCBzcGVj
dWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAg
ZmxvYXQgbGltaXRpbmdDb25lQW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2xpbWl0aW5nQ29uZUFu
Z2xlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeik7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFNwb3RM
aWdodFNvdXJjZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50
M0QmIGRpcmVjdGlvbiwKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGlt
aXRpbmdDb25lQW5nbGUpCisgICAgICAgIDogTGlnaHRTb3VyY2UoTFNfU1BPVCkKKyAgICAgICAg
LCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikK
KyAgICAgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKKyAgICAgICAg
LCBtX2xpbWl0aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHsKKyAgICB9CisK
KyAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50M0QgbV9kaXJlY3Rp
b247CisKKyAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgZmxvYXQgbV9saW1pdGlu
Z0NvbmVBbmdsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHU3BvdExpZ2h0U291
cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwx
MSArMjAsMTEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgU1ZHU3BvdExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHU3BvdExpZ2h0U291cmNlX2gKKyNp
Zm5kZWYgU3BvdExpZ2h0U291cmNlX2gKKyNkZWZpbmUgU3BvdExpZ2h0U291cmNlX2gKIAotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNl
LmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Nyw2ICs2Nyw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHU3BvdExpZ2h0U291
cmNlX2gKKyNlbmRpZiAvLyBTcG90TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIx
LDcgQEAKICNkZWZpbmUgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnRfaAogCiAjaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVDb252b2x2ZU1hdHJpeC5o
IgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2
aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVkZSAiRkVE
aWZmdXNlTGlnaHRpbmcuaCIKICNpbmNsdWRlICJTVkdDb2xvci5oIgotI2luY2x1ZGUgIlNWR0ZF
RGlmZnVzZUxpZ2h0aW5nLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1
KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNW
R0ZFRGlzcGxhY2VtZW50TWFwLmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAKIAogI2lmIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgorCisjaW5jbHVkZSAiRGlz
dGFudExpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRmxv
b2RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1ZH
RkVGbG9vZEVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0j
aW5jbHVkZSAiU1ZHRkVGbG9vZC5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDggQEAKICNkZWZpbmUgU1ZHRkVMaWdodEVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVkdGRU1lcmdlRWxlbWVudF9o
CiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU1l
cmdlLmgiCisjaW5jbHVkZSAiRkVNZXJnZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
NyBAQAogI2RlZmluZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neS5oIgorI2luY2x1
ZGUgIkZFTW9ycGhvbG9neS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2RlZmluZSBTVkdGRU9m
ZnNldEVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5j
bHVkZSAiRkVPZmZzZXQuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKICNpbmNsdWRlICJTVkdGRVBvaW50TGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHUG9pbnRMaWdodFNvdXJjZS5oIgorCisjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBA
CiAjZGVmaW5lIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgi
CisjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5nLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw3ICsyMSw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKICNpbmNs
dWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdTcG90TGlnaHRTb3Vy
Y2UuaCIKKworI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4
IEBACiAjZGVmaW5lIFNWR0ZFVGlsZUVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVUaWxlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHRkVUaWxlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1ZHRkVUdXJidWxl
bmNlRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRVR1cmJ1bGVuY2UuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50
TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0Rpc3RhbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3Mg
PHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBT
VkdEaXN0YW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaAot
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRT
b3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEaXN0YW50TGlnaHRTb3Vy
Y2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERpc3RhbnRMaWdodFNvdXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlv
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlzdGFudExpZ2h0U291cmNl
KGF6aW11dGgsIGVsZXZhdGlvbikpOwotICAgIH0KLQotICAgIGZsb2F0IGF6aW11dGgoKSBjb25z
dCB7IHJldHVybiBtX2F6aW11dGg7IH0KLSAgICBmbG9hdCBlbGV2YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2VsZXZhdGlvbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEo
UGFpbnRpbmdEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwotCi0gICAgdmlydHVhbCBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBEaXN0YW50TGlnaHRTb3VyY2UoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0aW9u
KQotICAgICAgICA6IExpZ2h0U291cmNlKExTX0RJU1RBTlQpCi0gICAgICAgICwgbV9hemltdXRo
KGF6aW11dGgpCi0gICAgICAgICwgbV9lbGV2YXRpb24oZWxldmF0aW9uKQotICAgIHsKLSAgICB9
Ci0KLSAgICBmbG9hdCBtX2F6aW11dGg7Ci0gICAgZmxvYXQgbV9lbGV2YXRpb247Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5j
cHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJj
emVnQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFQ29udm9sdmVNYXRyaXguaCIKLQotI2lu
Y2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQot
ICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXplKQotICAg
ICwgbV9kaXZpc29yKGRpdmlzb3IpCi0gICAgLCBtX2JpYXMoYmlhcykKLSAgICAsIG1fdGFyZ2V0
T2Zmc2V0KHRhcmdldE9mZnNldCkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi0gICAgLCBt
X2tlcm5lbFVuaXRMZW5ndGgoa2VybmVsVW5pdExlbmd0aCkKLSAgICAsIG1fcHJlc2VydmVBbHBo
YShwcmVzZXJ2ZUFscGhhKQotICAgICwgbV9rZXJuZWxNYXRyaXgoa2VybmVsTWF0cml4KQotewot
fQotCi1QYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0
ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwK
LSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxw
aGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKLSAgICAgICAgcHJlc2VydmVB
bHBoYSwga2VybmVsTWF0cml4KSk7Ci19Ci0KLQotSW50U2l6ZSBGRUNvbnZvbHZlTWF0cml4Ojpr
ZXJuZWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxTaXplOwotfQotCi12b2lk
IEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUoSW50U2l6ZSBrZXJuZWxTaXplKQotewot
ICAgIG1fa2VybmVsU2l6ZSA9IGtlcm5lbFNpemU7IAotfQotCi1jb25zdCBWZWN0b3I8ZmxvYXQ+
JiBGRUNvbnZvbHZlTWF0cml4OjprZXJuZWwoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5l
bE1hdHJpeDsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbCkKLXsKLSAgICBtX2tlcm5lbE1hdHJpeCA9IGtlcm5lbDsgCi19
Ci0KLWZsb2F0IEZFQ29udm9sdmVNYXRyaXg6OmRpdmlzb3IoKSBjb25zdAotewotICAgIHJldHVy
biBtX2Rpdmlzb3I7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldERpdmlzb3IoZmxv
YXQgZGl2aXNvcikKLXsKLSAgICBtX2Rpdmlzb3IgPSBkaXZpc29yOyAKLX0KLQotZmxvYXQgRkVD
b252b2x2ZU1hdHJpeDo6YmlhcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmlhczsgCi19Ci0K
LXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9hdCBiaWFzKQotewotICAgIG1fYmlh
cyA9IGJpYXM7IAotfQotCi1JbnRQb2ludCBGRUNvbnZvbHZlTWF0cml4Ojp0YXJnZXRPZmZzZXQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3RhcmdldE9mZnNldDsgCi19Ci0KLXZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50IHRhcmdldE9mZnNldCkKLXsKLSAg
ICBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsgCi19Ci0KLUVkZ2VNb2RlVHlwZSBGRUNv
bnZvbHZlTWF0cml4OjplZGdlTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWRnZU1vZGU7
IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IAotfQotCi1GbG9hdFBvaW50
IEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVy
biBtX2tlcm5lbFVuaXRMZW5ndGg7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtl
cm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludCBrZXJuZWxVbml0TGVuZ3RoKQotewotICAgIG1fa2Vy
bmVsVW5pdExlbmd0aCA9IGtlcm5lbFVuaXRMZW5ndGg7IAotfQotCi1ib29sIEZFQ29udm9sdmVN
YXRyaXg6OnByZXNlcnZlQWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByZXNlcnZlQWxw
aGE7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEoYm9vbCBw
cmVzZXJ2ZUFscGhhKQotewotICAgIG1fcHJlc2VydmVBbHBoYSA9IHByZXNlcnZlQWxwaGE7IAot
fQotCi0vKgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIENv
bnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICBUaGUgaW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xs
b3dpbmcgd2F5OgotCi0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAg
ICAgICBBICAgICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8
ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKLSAg
ICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KwotICAgICAgfCAgICAgICAgICBFICAgICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCi0KLSAgIFdoZXJlIHJlZ2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2Ug
dmFsdWVzCi0gICBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9m
IHRoZSByZWN0YW5nbGUuCi0KLSAgIEV4YW1wbGU6Ci0gICAgICBJbWFnZSBzaXplOiB3aWR0aDog
MTAsIGhlaWdodDogMTAKLQotICAgICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRo
OiAzLCBoZWlnaHQgNAotICAgICAgVGFyZ2V0OiB4OjEsIHk6MwotCi0gICAgICBUaGUgZm9sbG93
aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKLQot
ICAgICAgICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuWC4KLQotICAg
VGhlIHJlZ2lvbnMgaW4gdGhpcyBjYXNlIGFyZSB0aGUgZm9sbG93aW5nOgotICAgICAgTm90ZTog
KHgxLCB5MSkgdG9wLWxlZnQgYW5kICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVy
Ci0gICAgICBOb3RlOiByb3cgeDIgYW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVn
aW9uCi0gICAgICAgICAgICBvbmx5IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHgg
PCB4MiBhbmQgeTEgPD0geSA8IHkyCi0KLSAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgy
OiAxMCwgeTI6IDMKLSAgICAgIFJlZ2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAK
LSAgICAgIFJlZ2lvbiBDOiB4MTogMSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKLSAgICAgIFJlZ2lv
biBEOiB4MTogOSwgeTE6IDMsIHgyOiAxMCwgeTI6IDEwCi0gICAgICBSZWdpb24gRTogeDE6IDAs
IHkxOiAxMCwgeDI6IDEwLCB5MjogMTAgKGVtcHR5IHJlZ2lvbikKLQotICAgU2luY2UgcmVnaW9u
IEMgKG9mdGVuKSBjb250YWlucyBtb3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCi0g
ICBhIGZhc3QgYWxnb3JpdG0gdG8gY2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RT
ZXRJbnRlcmlvclBpeGVscy4KLSAgIEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhl
bHMgaXMgdXNlZCwgd2hpY2ggY2FsbHMgZ2V0UGl4ZWxWYWx1ZSwKLSAgIHRvIGhhbmRsZSBwaXhl
bHMgb3V0c2lkZSBvZiB0aGUgaW1hZ2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCi0gICBr
ZXJuZWwgbWF0cml4IGlzIGJpZ2dlciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2Fs
Y3VsYXRlZCBieSB0aGlzCi0gICBmdW5jdGlvbi4KLQotICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1
bmN0aW9ucyBoYXZlIGxvdCBpbiBjb21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQotICAgY29t
bW9uIGEgdGVtcGxhdGUgZm9yIHRoZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMg
YXMgd2VsbCwKLSAgIGFuZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQu
Ci0qLwotCi1zdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVl
KGZsb2F0IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4ID0gMjU1KQotewotICAgIGlmIChjaGFu
bmVsIDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAg
ICAgICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKLX0KLQotdGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9u
UGl4ZWxzKENhbnZhc1BpeGVsQXJyYXkqIGltYWdlLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxz
LCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBDYW52YXNQaXhlbEFycmF5KiBzcmMpCi17Ci0g
ICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBj
bGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGltYWdlLT5zZXQocGl4ZWwrKywgY2xhbXBSR0JB
VmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAo
cHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBpbWFnZS0+c2V0KHBpeGVsLCBzcmMtPmdl
dChwaXhlbCkpOwotICAgICAgICArK3BpeGVsOwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotLy8gT25seSBmb3IgcmVnaW9uIEMKLXRlbXBs
YXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKQotewotICAgIC8vIGVkZ2UgbW9kZSBk
b2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zm
c2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0Owot
ICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gMDsKLSAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBj
bGlwUmlnaHQgKiA0OwotICAgIGludCB4SW5jcmVhc2UgPSAobV9rZXJuZWxTaXplLndpZHRoKCkg
LSAxKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwot
ICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0g
ICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBl
bnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBj
bGlwQm90dG9tICsgMTsgeSA+IDA7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJp
Z2h0ICsgMTsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gbV9r
ZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbCA9IHN0
YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lk
dGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sx
XSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVz
ZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAg
ICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdG90YWxz
WzBdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAg
ICAgICAgICB0b3RhbHNbMV0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwr
KykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxW
YWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdl
dChrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFs
dWVzKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gbV9rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LT5nZXQoa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAg
ICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwot
ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25Q
aXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBp
eGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5KTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAg
ICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4
ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2
ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgs
IGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB4
ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsK
LSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBj
YXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAg
eCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAg
ICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAg
ICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWln
aHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9E
RV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5n
RGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdo
aWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAg
ICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMg
dGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9s
dmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7
Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4
MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdp
bktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0
T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdp
ZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwot
ICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0g
ICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBl
bnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBo
ZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBtX2tlcm5lbE1hdHJpeC5zaXpl
KCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxY
OwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOwotICAg
ICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAgICAgICAg
IHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVs
VmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxW
YWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAgICAgICAg
ICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1swXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4
ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gbV9rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5LT5nZXQocGl4ZWxJbmRleCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVs
SW5kZXggKyAzKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7Ci0gICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAg
ICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgICAgICAgICB3aWR0
aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVl
cz4ocGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwg
cGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5KTsKLSAgICAgICAg
ICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geElu
Y3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwot
ICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSkKLXsKLSAgICAvLyBNdXN0
IGJlIGltcGxlbWVudGVkIGhlcmUsIHNpbmNlIGl0IHJlZmVycyBhbm90aGVyIEFMV0FZU19JTkxJ
TkUKLSAgICAvLyBmdW5jdGlvbiwgd2hpY2ggZGVmaW5lZCBpbiB0aGlzIEMrKyBzb3VyY2UgZmls
ZSBhcyB3ZWxsCi0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgZmFzdFNldEludGVy
aW9yUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1
bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJl
Ci0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhl
cmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8
dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwot
fQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVy
KTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbWFn
ZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBJbnRSZWN0IGVm
ZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotCi0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IHNyY1BpeGVsQXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4
ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZm
ZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7Ci0gICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5
ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJh
d2luZ1JlY3QpLT5kYXRhKCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
LQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gaW1h
Z2VSZWN0LndpZHRoKCk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGltYWdlUmVjdC5oZWln
aHQoKTsKLSAgICBwYWludGluZ0RhdGEuYmlhcyA9IG1fYmlhcyAqIDI1NTsKLQotICAgIC8vIERy
YXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VSZWN0
LndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IGlt
YWdlUmVjdC5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQotICAgIGlmIChjbGlw
UmlnaHQgPj0gMCAmJiBjbGlwQm90dG9tID49IDApIHsKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhl
bHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOwotCi0gICAgICAgIGNsaXBS
aWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwotICAgICAgICBjbGlwQm90dG9tICs9IG1f
dGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0gICAgICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAw
KQotICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJl
Y3Qud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICAgICAgaWYgKGNsaXBCb3R0b20g
PCBpbWFnZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIDAsIGNsaXBCb3R0b20sIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0
KCkpOwotICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAgICAgIHNl
dE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3Rhcmdl
dE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgICAgICBpZiAoY2xpcFJpZ2h0IDwgaW1hZ2VS
ZWN0LndpZHRoKCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVJlY3Qud2lkdGgoKSwgY2xpcEJvdHRv
bSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6
aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAs
IGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGlm
IChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGll
ZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Ci0gICAg
ZWxzZQotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpkdW1wKCkKLXsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIEVER0VNT0RFX1VOS05PV046Ci0gICAgICAgIHRzIDw8ICJVTktO
T1dOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6Ci0gICAg
ICAgIHRzIDw8ICJEVVBMSUNBVEUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVER0VNT0RF
X1dSQVA6Ci0gICAgICAgIHRzIDw8ICJXUkFQIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
REdFTU9ERV9OT05FOgotICAgICAgICB0cyA8PCAiTk9ORSI7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17
Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZUNvbnZvbHZlTWF0
cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAg
IHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6ZSA8PCAiXCIgIgotICAgICAgIDw8ICJr
ZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4ICA8PCAiXCIgIgotICAgICAgIDw8ICJk
aXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIKLSAgICAgICA8PCAiYmlhcz1cIiIgPDwg
bV9iaWFzIDw8ICJcIiAiCi0gICAgICAgPDwgInRhcmdldD1cIiIgPDwgbV90YXJnZXRPZmZzZXQg
PDwgIlwiICIKLSAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIK
LSAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8
ICJcIiAiCi0gICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8
PCAiXCJdXG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVD
b252b2x2ZU1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRUNvbnZvbHZlTWF0cml4X2gKLSNkZWZpbmUgU1ZH
RkVDb252b2x2ZU1hdHJpeF9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5j
bHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL0Fs
d2F5c0lubGluZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1lbnVtIEVkZ2VNb2RlVHlwZSB7Ci0gICAgRURHRU1PREVfVU5LTk9XTiAgID0gMCwK
LSAgICBFREdFTU9ERV9EVVBMSUNBVEUgPSAxLAotICAgIEVER0VNT0RFX1dSQVAgICAgICA9IDIs
Ci0gICAgRURHRU1PREVfTk9ORSAgICAgID0gMwotfTsKLQotY2xhc3MgQ2FudmFzUGl4ZWxBcnJh
eTsKLQotY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25z
dCBJbnRTaXplJiwKLSAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBF
ZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRLZXJuZWxTaXplKEludFNpemUpOwotCi0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYp
OwotCi0gICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0RGl2aXNvcihmbG9h
dCk7Ci0KLSAgICBmbG9hdCBiaWFzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCaWFzKGZsb2F0KTsK
LQotICAgIEludFBvaW50IHRhcmdldE9mZnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFyZ2V0
T2Zmc2V0KEludFBvaW50KTsKLQotICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQotICAgIEZsb2F0UG9pbnQga2Vy
bmVsVW5pdExlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChGbG9h
dFBvaW50KTsKLQotICAgIGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
UHJlc2VydmVBbHBoYShib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxv
YXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxv
YXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAgIHN0cnVjdCBQYWlu
dGluZ0RhdGEgewotICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAg
ICAgICBDYW52YXNQaXhlbEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7
Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGlu
dCBjbGlwQm90dG9tKTsKLQotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVB
bHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBp
bnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlv
bnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKTsKLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKLSAgICBmbG9hdCBtX2Rpdmlzb3I7Ci0gICAgZmxvYXQgbV9iaWFzOwotICAgIEludFBv
aW50IG1fdGFyZ2V0T2Zmc2V0OwotICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOwotICAgIEZs
b2F0UG9pbnQgbV9rZXJuZWxVbml0TGVuZ3RoOwotICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwot
ICAgIFZlY3RvcjxmbG9hdD4gbV9rZXJuZWxNYXRyaXg7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2Vu
ZGlmIC8vIFNWR0ZFQ29udm9sdmVNYXRyaXhfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVS
UykKLSNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgotCi0jaW5jbHVkZSAiU1ZHTGln
aHRTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRURpZmZ1c2VMaWdodGluZzo6
RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwKLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGln
aHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVE
aWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLAotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwg
ZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxp
Z2h0U291cmNlKSk7Ci19Ci0KLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRpbmco
KQotewotfQotCi1Db2xvciBGRURpZmZ1c2VMaWdodGluZzo6bGlnaHRpbmdDb2xvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsKLX0KLQotdm9pZCBGRURpZmZ1c2VMaWdo
dGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAg
ICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotfQotCi1mbG9hdCBGRURpZmZ1c2VM
aWdodGluZzo6c3VyZmFjZVNjYWxlKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1fc3VyZmFjZVNj
YWxlOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQg
c3VyZmFjZVNjYWxlKQotewotICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotfQot
Ci1mbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6ZGlmZnVzZUNvbnN0YW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6
OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgbV9kaWZm
dXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7Ci19Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0
aW5nOjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5p
dExlbmd0aFg7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQotewotICAgIG1fa2VybmVsVW5pdExlbmd0aFgg
PSBrZXJuZWxVbml0TGVuZ3RoWDsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6Omtlcm5l
bFVuaXRMZW5ndGhZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsK
LX0KLQotdm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFkpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVu
aXRMZW5ndGhZOwotfQotCi1jb25zdCBMaWdodFNvdXJjZSogRkVEaWZmdXNlTGlnaHRpbmc6Omxp
Z2h0U291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsKLX0K
LQotdm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdo
dFNvdXJjZT4gbGlnaHRTb3VyY2UpCi17ICAgIAotICAgIG1fbGlnaHRTb3VyY2UgPSBsaWdodFNv
dXJjZTsKLX0KLQotdm9pZCBGRURpZmZ1c2VMaWdodGluZzo6ZHVtcCgpCi17Ci19Ci0KLVRleHRT
dHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQp
OwotICAgIHRzIDw8ICJbZmVEaWZmdXNlTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8
IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCi0gICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIg
PDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwgIlwiICIKLSAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0
aFkgPDwgIlwiXVxuIjsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgaW5kZW50ICsgMSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKLSNkZWZpbmUg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIExpZ2h0U291cmNlOwotCi1jbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBG
RUxpZ2h0aW5nIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdo
dGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAotICAgICAgICBmbG9hdCwg
ZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1c2VM
aWdodGluZygpOwotCi0gICAgQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOwotCi0gICAgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxv
YXQpOwotCi0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKLSAgICB2b2lkIHNl
dEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKLQotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7Ci0KLSAgICBj
b25zdCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldExpZ2h0
U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkdW1w
KCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFRGlmZnVz
ZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NS
ZWZQdHI8TGlnaHRTb3VyY2U+KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVE
aWZmdXNlTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJT
VkdGRURpc3BsYWNlbWVudE1hcC5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFRGlzcGxhY2VtZW50
TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0
b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2Vs
ZWN0b3IpCi0gICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKLSAgICAs
IG1fc2NhbGUoc2NhbGUpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IEZF
RGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVj
dG9yLAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2Nh
bGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5l
bFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwotfQotCi1DaGFubmVsU2VsZWN0
b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFw
OjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvcikKLXsKLSAgICBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNlbGVjdG9yOwot
fQotCi1DaGFubmVsU2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp5Q2hhbm5lbFNlbGVj
dG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yOwotfQotCi12b2lk
IEZFRGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikKLXsKLSAgICBtX3lDaGFubmVsU2VsZWN0b3IgPSB5
Q2hhbm5lbFNlbGVjdG9yOwotfQotCi1mbG9hdCBGRURpc3BsYWNlbWVudE1hcDo6c2NhbGUoKSBj
b25zdAotewotICAgIHJldHVybiBtX3NjYWxlOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAgIGluMi0+YXBwbHkoZmls
dGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5F
TF9VTktOT1dOIHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJl
ZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1hZ2UoKS0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwot
Ci0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgUmVm
UHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKGluMi0+cmVzdWx0SW1hZ2UoKS0+
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7Ci0K
LSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkp
OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGlt
YWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgQVNTRVJUKHNyY1Bp
eGVsQXJyYXlBLT5sZW5ndGgoKSA9PSBzcmNQaXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwotCi0gICAg
ZmxvYXQgc2NhbGVYID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9u
KCkud2lkdGgoKTsKLSAgICBmbG9hdCBzY2FsZVkgPSBtX3NjYWxlIC8gMjU1LmYgKiBmaWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKTsKLSAgICBmbG9hdCBzY2FsZUFkanVzdG1lbnRY
ID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53
aWR0aCgpOwotICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFkgPSAoMC41ZiAtIDAuNWYgKiBtX3Nj
YWxlKSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOwotICAgIGludCBzdHJp
ZGUgPSBpbWFnZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFn
ZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGU7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgewotICAg
ICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZSArIHggKiA0OwotICAgICAgICAgICAgaW50IHNy
Y1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVggKiBzcmNQaXhlbEFycmF5Qi0+Z2V0KGRz
dEluZGV4ICsgbV94Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1lbnRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVZICogc3JjUGl4
ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feUNoYW5uZWxTZWxlY3RvciAtIDEpICsgc2NhbGVB
ZGp1c3RtZW50WSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFu
bmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNy
Y1ggPj0gaW1hZ2VSZWN0LndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBpbWFnZVJlY3Qu
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQoZHN0
SW5kZXggKyBjaGFubmVsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxW
YWx1ZSA9IHNyY1BpeGVsQXJyYXlBLT5nZXQoc3JjWSAqIHN0cmlkZSArIHNyY1ggKiA0ICsgY2hh
bm5lbCk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQoZHN0SW5k
ZXggKyBjaGFubmVsLCBwaXhlbFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLX0K
LQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCi17Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ0hBTk5FTF9VTktOT1dO
OgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0hB
Tk5FTF9SOgotICAgICAgICB0cyA8PCAiUkVEIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
SEFOTkVMX0c6Ci0gICAgICAgIHRzIDw8ICJHUkVFTiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ0hBTk5FTF9COgotICAgICAgICB0cyA8PCAiQkxVRSI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ0hBTk5FTF9BOgotICAgICAgICB0cyA8PCAiQUxQSEEiOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1h
cDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlRGlzcGxh
Y2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMp
OwotICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUgPDwgIlwiICIKLSAgICAgICA8PCAi
eENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIiAiCi0gICAg
ICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNoYW5uZWxTZWxlY3RvciA8PCAiXCJd
XG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRl
bnQgKyAxKTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURp
c3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKLSNkZWZpbmUgU1ZHRkVE
aXNwbGFjZW1lbnRNYXBfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIENoYW5uZWxT
ZWxlY3RvclR5cGUgewotICAgIENIQU5ORUxfVU5LTk9XTiA9IDAsCi0gICAgQ0hBTk5FTF9SID0g
MSwKLSAgICBDSEFOTkVMX0cgPSAyLAotICAgIENIQU5ORUxfQiA9IDMsCi0gICAgQ0hBTk5FTF9B
ID0gNAotfTsKLQotY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gY3Jl
YXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7Ci0KLSAgICBDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFhDaGFubmVsU2VsZWN0b3Io
Y29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7Ci0KLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlD
aGFubmVsU2VsZWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFlDaGFubmVsU2VsZWN0b3IoY29u
c3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7Ci0KLSAgICBmbG9hdCBzY2FsZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZp
bHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCk7Ci0KLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsK
LSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKLSAgICBmbG9hdCBt
X3NjYWxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRURpc3BsYWNlbWVudE1h
cF9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJ
KHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZs
b29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiU1ZHRkVGbG9vZC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVGbG9vZDo6
RkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAg
IDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQotICAgICwg
bV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQotewotfQotCi1QYXNzUmVmUHRyPEZFRmxvb2Q+
IEZFRmxvb2Q6OmNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFj
aXR5KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9v
ZE9wYWNpdHkpKTsKLX0KLQotQ29sb3IgRkVGbG9vZDo6Zmxvb2RDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZmxvb2RDb2xvcjsKLX0KLQotdm9pZCBGRUZsb29kOjpzZXRGbG9vZENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKLX0KLQot
ZmxvYXQgRkVGbG9vZDo6Zmxvb2RPcGFjaXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mbG9v
ZE9wYWNpdHk7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29k
T3BhY2l0eSkKLXsKLSAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsKLX0KLQotdm9p
ZCBGRUZsb29kOjphcHBseShGaWx0ZXIqKQotewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShm
bG9vZENvbG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpLnNpemUoKSksIGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKLX0KLQotdm9pZCBGRUZs
b29kOjpkdW1wKCkKLXsKLX0KLQotVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlRmxvb2QiOwotICAgIEZpbHRlckVmZmVj
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1c
IiIgPDwgZmxvb2RDb2xvcigpLm5hbWUoKSA8PCAiXCIgIgotICAgICAgIDw8ICJmbG9vZC1vcGFj
aXR5PVwiIiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4iOwotICAgIHJldHVybiB0czsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxv
b2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxv
b2QuaAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRmxvb2QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBTVkdGRUZsb29kX2gKLSNkZWZpbmUgU1ZHRkVGbG9vZF9oCi0KLSNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9h
dCk7Ci0KLSAgICBDb2xvciBmbG9vZENvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGbG9vZENv
bG9yKGNvbnN0IENvbG9yICYpOwotCi0gICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24p
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBmbG9hdCk7Ci0K
LSAgICBDb2xvciBtX2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFRmxvb2RfaApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzkzNSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCi0KLSNpbmNsdWRlICJDYW52YXNQ
aXhlbEFycmF5LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRT
b3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5n
KExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsCi0gICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAotICAgIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJj
ZT4gbGlnaHRTb3VyY2UpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9saWdodGluZ1R5
cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShsaWdodFNvdXJjZSkKLSAgICAs
IG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQotICAgICwgbV9zdXJmYWNlU2NhbGUoc3Vy
ZmFjZVNjYWxlKQotICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQotICAg
ICwgbV9zcGVjdWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgLCBtX3NwZWN1bGFy
RXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5n
dGhZKQotewotfQotCi1jb25zdCBzdGF0aWMgaW50IGNQaXhlbFNpemUgPSA0OwotY29uc3Qgc3Rh
dGljIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ZmYpOwotCi1B
TFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwTGVmdFBpeGVsVmFs
dWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAt
IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp1cFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnVwUmlnaHRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6bGVmdFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6Y2VudGVyUGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0UGl4ZWxWYWx1ZSgpCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpkb3duTGVmdFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlT
X0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duUGl4ZWxWYWx1ZSgpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1
ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsg
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoTGln
aHRpbmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
Ci0gICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5vcm1hbFgs
IGZsb2F0IGZhY3RvclksIGludCBub3JtYWxZKQotewotICAgIG1fbGlnaHRTb3VyY2UtPnVwZGF0
ZVBhaW50aW5nRGF0YShwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBzdGF0aWNfY2FzdDxm
bG9hdD4oZGF0YS5waXhlbHMtPmdldChkYXRhLm9mZnNldCArIDMpKSAqIGRhdGEuc3VyZmFjZVNj
YWxlKTsKLQotICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0
PGZsb2F0Pihub3JtYWxYKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICBkYXRhLm5vcm1hbFZl
Y3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWSkgKiBkYXRhLnN1
cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WigxLjBmKTsKLSAgICBkYXRh
Lm5vcm1hbFZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBG
RUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9
IG1fZGlmZnVzZUNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0
b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0
WihoYWxmd2F5VmVjdG9yLnooKSArIDEuMGYpOwotICAgICAgICBoYWxmd2F5VmVjdG9yLm5vcm1h
bGl6ZSgpOwotICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCi0gICAgICAg
ICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAoZGF0YS5ub3Jt
YWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0
YS5saWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihkYXRhLm5vcm1hbFZl
Y3RvciAqIGhhbGZ3YXlWZWN0b3IsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAgfQotCi0gICAg
aWYgKGRhdGEubGlnaHRTdHJlbmd0aCA+IDEuMGYpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0
aCA9IDEuMGY7Ci0gICAgaWYgKGRhdGEubGlnaHRTdHJlbmd0aCA8IDAuMGYpCi0gICAgICAgIGRh
dGEubGlnaHRTdHJlbmd0aCA9IDAuMGY7Ci0KLSAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zm
c2V0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWlu
dGluZ0RhdGEuY29sb3JWZWN0b3IueCgpKSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9m
ZnNldCArIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAq
IHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci55KCkpKTsKLSAgICBkYXRhLnBpeGVscy0+c2V0KGRh
dGEub2Zmc2V0ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVu
Z3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOwotfQotCi1ib29sIEZFTGlnaHRp
bmc6OmRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKLXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
LSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIGlmICghbV9saWdodFNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBv
ciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNwZWMgZG9lcyBu
b3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgotICAgIGlm
ICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBkYXRhLnBpeGVscyA9IHBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFj
ZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3
aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGgg
LSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotICAgIHBh
aW50aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChtX2xpZ2h0aW5nQ29sb3IucmVk
KCksIG1fbGlnaHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3IuYmx1ZSgpKTsKLSAg
ICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7Ci0KLSAgICAv
LyBUb3AvTGVmdCBjb3JuZXIKLSAgICBkYXRhLm9mZnNldCA9IDA7Ci0gICAgc2V0UGl4ZWwoZGF0
YSwgcGFpbnRpbmdEYXRhLCAwLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5j
ZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93
blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4w
ZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxW
YWx1ZSgpKTsKLQotICAgIC8vIFRvcC9SaWdodCBwaXhlbAotICAgIGRhdGEub2Zmc2V0ID0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwo
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsCi0gICAgICAg
IC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50
ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4
ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLmxlZnRQaXhlbFZhbHVlKCkg
LSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSk7Ci0KLSAgICAvLyBCb3R0b20vTGVmdCBwaXhl
bAotICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRh
LCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC1k
YXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEu
Y2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAg
IC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4
ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVs
VmFsdWUoKSk7Ci0KLSAgICAvLyBCb3R0b20vUmlnaHQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9
IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwot
ICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRh
LnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0
UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4w
ZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1
ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgp
KTsKLQotICAgIGlmICh3aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCBsaW5lCi0gICAgICAg
IGRhdGEub2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBk
YXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkg
ewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLAotICAgICAg
ICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICog
ZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRh
LmRvd25SaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1k
YXRhLmxlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRh
LnJpZ2h0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gQm90dG9tIGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQ
aXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwK
LSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAr
IGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAy
ICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYs
IC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0
YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEu
Y2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gTGVmdCBsaW5lCi0g
ICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ks
IGRhdGEub2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKLSAgICAg
ICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwKLSAgICAgICAgICAgICAg
ICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxW
YWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhl
bFZhbHVlKCkgLSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFs
dWUoKSwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS51cFBpeGVsVmFs
dWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVl
KCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
UmlnaHQgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyAr
K3ksIGRhdGEub2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKLSAg
ICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lLCB5LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4
ZWxWYWx1ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVl
KCkgKyBkYXRhLmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBm
LCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRh
dGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0g
ICAgICAgIC8vIEludGVyaW9yIHBpeGVscwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSkgewotICAgICAgICAgICAgZGF0YS5vZmZzZXQg
PSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4
LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICAgICAgc2V0UGl4ZWwo
ZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LAotICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQu
MGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAt
IDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAt
IGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVl
KCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsg
ZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaW50IHRvdGFsU2l6ZSA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykg
ewotICAgICAgICBmb3IgKGludCBpID0gMzsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KQotICAgICAg
ICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxTaXplOyBpICs9IDQpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgYTEgPSBkYXRhLnBpeGVscy0+Z2V0KGkpOwotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBhMiA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDEpOwotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBhMyA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDIpOwotICAgICAgICAgICAg
Ly8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEu
cGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIg
Pj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0g
ICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFl
ZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShm
YWxzZSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKLSAgICBDYW52YXNQaXhl
bEFycmF5KiBzcmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKLQotICAgIC8vIEZJ
WE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1
ZSBoZXJlIGlzIHRoYXQgdGhlIFczCi0gICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBm
b3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCi0g
ICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qg
c3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KLSAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXgg
c2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0gICAgaWYgKGRyYXdMaWdodGlu
ZyhzcmNQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpLCBlZmZlY3REcmF3aW5n
UmVjdC5oZWlnaHQoKSkpCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UoKS0+c2l6ZSgpKSwgSW50UG9pbnQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTM1
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgU1ZHRkVMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFTGlnaHRpbmdfaAot
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJTVkdMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KLQotLy8g
Q29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1bGFyTGln
aHRpbmcKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYW52YXNQaXhlbEFycmF5Owot
Ci1jbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBMaWdo
dGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGln
aHRpbmcKLSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIEZsb2F0
UG9pbnQzRCBub3JtYWxWZWN0b3I7Ci0gICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHBpeGVsczsK
LSAgICAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxl
OwotICAgICAgICBpbnQgb2Zmc2V0OwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVp
Z2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBMZWZ0UGl4
ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cFBpeGVsVmFsdWUoKTsKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBSaWdodFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxX
QVlTX0lOTElORSBpbnQgbGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQgY2VudGVyUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCByaWdodFBp
eGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93bkxlZnRQaXhlbFZhbHVl
KCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25QaXhlbFZhbHVlKCk7Ci0gICAgICAg
IEFMV0FZU19JTkxJTkUgaW50IGRvd25SaWdodFBpeGVsVmFsdWUoKTsKLSAgICB9OwotCi0gICAg
RkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotCi0gICAg
Ym9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSosIGludCwgaW50KTsKLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYsCi0gICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3Rvclgs
IGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFsWSk7Ci0KLSAgICBMaWdodGlu
Z1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmUHRyPExpZ2h0U291cmNlPiBtX2xpZ2h0U291
cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOwotICAgIGZsb2F0IG1fc3VyZmFjZVNj
YWxlOwotICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwotICAgIGZsb2F0IG1fc3BlY3VsYXJD
b25zdGFudDsKLSAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgZmxvYXQgbV9rZXJu
ZWxVbml0TGVuZ3RoWDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRUxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU1lcmdl
LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRU1lcmdlOjpGRU1lcmdlKCkgCi0gICAgOiBGaWx0
ZXJFZmZlY3QoKQotewotfQotCi1QYXNzUmVmUHRyPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZSgp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1lcmdlKTsKLX0KLQotdm9pZCBGRU1lcmdl
OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KGkpOwotICAgICAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICAgICAgaWYgKCFpbi0+
cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0
ZXJDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Ci0gICAgfQotfQotCi12b2lkIEZFTWVyZ2U6
OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVNZXJnZSI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOwotICAgIHRzIDw8ICIgbWVyZ2VO
b2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4iOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIGlucHV0RWZmZWN0KGkpLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmgJKHJldmlzaW9uIDY3
OTM1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZH
RkVNZXJnZV9oCi0jZGVmaW5lIFNWR0ZFTWVyZ2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGRU1lcmdlPiBjcmVhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShG
aWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBGRU1lcmdlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2Vu
ZGlmIC8vIFNWR0ZFTWVyZ2VfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU1vcnBob2xv
Z3kuaCIKLQotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
dXNpbmcgc3RkOjptaW47Ci11c2luZyBzdGQ6Om1heDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAg
ICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAgICAsIG1fcmFkaXVz
WShyYWRpdXNZKQotewotfQotCi1QYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5
OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9h
dCByYWRpdXNZKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5KHR5cGUs
IHJhZGl1c1gsIHJhZGl1c1kpKTsKLX0KLQotTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBGRU1vcnBo
b2xvZ3k6Om1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHlwZTsK
LX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotZmxvYXQgRkVN
b3JwaG9sb2d5OjpyYWRpdXNYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yYWRpdXNYOwotfQot
Ci12b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRpdXNYKQotewotICAgIG1f
cmFkaXVzWCA9IHJhZGl1c1g7Ci19Ci0KLWZsb2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcmFkaXVzWTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1koZmxvYXQgcmFkaXVzWSkKLXsKLSAgICBtX3JhZGl1c1kgPSByYWRpdXNZOwotfQot
Ci12b2lkIEZFTW9ycGhvbG9neTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAg
IGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZWZm
ZWN0Q29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4t
PmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIGludCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50Piht
X3JhZGl1c1ggKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpKTsKLSAgICBpbnQg
cmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNZICogZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIGlmIChyYWRpdXNYIDw9IDAgfHwgcmFkaXVzWSA8PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKLSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShp
bi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5n
UmVjdCktPmRhdGEoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogNDsKLSAgICAK
LSAgICAvLyBMaW1pdCB0aGUgcmFkaXVzIHNpemUgdG8gZWZmZWN0IGRpbWVuc2lvbnMKLSAgICBy
YWRpdXNYID0gbWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXNYKTsKLSAg
ICByYWRpdXNZID0gbWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzWSk7
Ci0gICAgCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGV4dHJlbWE7Ci0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGlu
dCBzdGFydFkgPSBtYXgoMCwgeSAtIHJhZGl1c1kpOwotICAgICAgICBpbnQgZW5kWSA9IG1pbihl
ZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHkgKyByYWRpdXNZKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAg
ICAgICAgLy8gRmlsbCB0aGUga2VybmVsCi0gICAgICAgICAgICBleHRyZW1hLmNsZWFyKCk7Ci0g
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSByYWRpdXNYOyArK2opIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbHVtbkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQo
c3RhcnRZICogZWZmZWN0V2lkdGggKyA0ICogaiArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSBzdGFydFk7IGkgPD0gZW5kWTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWwgPSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdp
ZHRoICsgNCAqIGogKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEp
IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9ESUxBVEUgJiYgcGl4ZWwgPj0gY29sdW1uRXh0cmVtYSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2x1bW5FeHRyZW1hID0gcGl4ZWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbWEpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVt
YSBvZiBuZXh0IGNvbHVtbiAKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0
RHJhd2luZ1JlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZW5k
WCA9IG1pbih4ICsgcmFkaXVzWCwgZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEpOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sdW1uRXh0cmVtYSA9IHNyY1BpeGVsQXJyYXkt
PmdldChzdGFydFkgKiBlZmZlY3RXaWR0aCArIGVuZFggKiA0ICsgY2hhbm5lbCk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0WTsgaSA8PSBlbmRZOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbCA9IHNyY1BpeGVsQXJyYXktPmdldChpICog
ZWZmZWN0V2lkdGggKyBlbmRYICogNCArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYgcGl4ZWwgPD0gY29s
dW1uRXh0cmVtYSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBwaXhlbCA+PSBjb2x1bW5FeHRyZW1hKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbkV4dHJlbWEgPSBwaXhlbDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHggLSByYWRpdXNYID49IDApCi0gICAgICAgICAgICAg
ICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotICAgICAgICAgICAgICAgIGlmICh4ICsgcmFkaXVz
WCA8PSBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICBleHRy
ZW1hLmFwcGVuZChjb2x1bW5FeHRyZW1hKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGVudGlyZUV4dHJlbWEgPSBleHRyZW1hWzBdOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQga2VybmVsSW5kZXggPSAwOyBrZXJuZWxJbmRleCA8IGV4dHJlbWEuc2l6ZSgpOyArK2tlcm5l
bEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSAmJiBleHRyZW1hW2tlcm5lbEluZGV4XSA8PSBlbnRpcmVFeHRyZW1h
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BF
UkFUT1JfRElMQVRFICYmIGV4dHJlbWFba2VybmVsSW5kZXhdID49IGVudGlyZUV4dHJlbWEpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFba2VybmVsSW5k
ZXhdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEo
KS0+c2V0KHkgKiBlZmZlY3RXaWR0aCArIDQgKiB4ICsgY2hhbm5lbCwgZW50aXJlRXh0cmVtYSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9p
bnQoKSk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpkdW1wKCkKLXsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwgIlVOS05PV04iOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERToKLSAgICAgICAg
dHMgPDwgIkVST0RFIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BF
UkFUT1JfRElMQVRFOgotICAgICAgICB0cyA8PCAiRElMQVRFIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewot
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVNb3JwaG9sb2d5IjsK
LSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8
ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCi0gICAgICAg
PDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1c
biI7ICAgIAotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBp
bmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCShyZXZpc2lvbiA2
NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgU1ZHRkVNb3JwaG9sb2d5X2gKLSNkZWZpbmUgU1ZHRkVNb3JwaG9sb2d5X2gKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB7Ci0gICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAw
LAotICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEsCi0gICAgRkVNT1JQSE9MT0dZ
X09QRVJBVE9SX0RJTEFURSA9IDIKLX07Ci0KLWNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9n
eT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpOyAgCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3Io
KSBjb25zdDsKLSAgICB2b2lkIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlKTsKLQotICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdDsKLSAgICB2b2lkIHNldFJhZGl1
c1goZmxvYXQpOwotCi0gICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmFk
aXVzWShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOwotICAgIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90eXBl
OwotICAgIGZsb2F0IG1fcmFkaXVzWDsKLSAgICBmbG9hdCBtX3JhZGl1c1k7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFTW9ycGhvbG9neV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFT2Zm
c2V0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgs
IGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fZHgoZHgpCi0gICAgLCBt
X2R5KGR5KQotewotfQotCi1QYXNzUmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZs
b2F0IGR4LCBmbG9hdCBkeSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFT2Zmc2V0KGR4
LCBkeSkpOwotfQotCi1mbG9hdCBGRU9mZnNldDo6ZHgoKSBjb25zdAotewotICAgIHJldHVybiBt
X2R4OwotfQotCi12b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKLXsKLSAgICBtX2R4ID0g
ZHg7Ci19Ci0KLWZsb2F0IEZFT2Zmc2V0OjpkeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHk7
Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBkeTsK
LX0KLQotdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAg
IGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRl
ckNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCA9IGZpbHRlci0+
c291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgc291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdo
dCgpKTsKLQotICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAg
ICAgIG1fZHggKj0gc291cmNlSW1hZ2VSZWN0LndpZHRoKCk7Ci0gICAgICAgIG1fZHkgKj0gc291
cmNlSW1hZ2VSZWN0LmhlaWdodCgpOwotICAgIH0KLSAgICBtX2R4ICo9IGZpbHRlci0+ZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCk7Ci0gICAgbV9keSAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKS5oZWlnaHQoKTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gRmxvYXRSZWN0KG1fZHgg
KyBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2R5ICsgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkud2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS5oZWlnaHQoKSk7Ci0KLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwotfQotCi12
b2lkIEZFT2Zmc2V0OjpkdW1wKCkKLXsKLX0KLQotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZU9mZnNldCI7IAotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBk
eD1cIiIgPDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLSAgICBpbnB1
dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFT2Zmc2V0X2gKLSNkZWZpbmUgU1ZH
RkVPZmZzZXRfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRkVPZmZzZXQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBk
eSk7Ci0KLSAgICBmbG9hdCBkeCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RHgoZmxvYXQpOwotCi0g
ICAgZmxvYXQgZHkoKSBjb25zdDsKLSAgICB2b2lkIHNldER5KGZsb2F0KTsKLQotICAgIHZpcnR1
YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGRU9mZnNldChmbG9hdCBkeCwg
ZmxvYXQgZHkpOwotCi0gICAgZmxvYXQgbV9keDsKLSAgICBmbG9hdCBtX2R5OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRU9mZnNldF9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZp
c2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgotCi0jaW5jbHVk
ZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GRVNwZWN1bGFy
TGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLAotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLAotICAgIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6
IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3Ro
WCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQotewotfQotCi1QYXNzUmVmUHRyPEZF
U3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGln
aHRTb3VyY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVNwZWN1bGFyTGlnaHRpbmco
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4
cG9uZW50LAotICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxp
Z2h0U291cmNlKSk7Ci19Ci0KLUZFU3BlY3VsYXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGlu
ZygpCi17Ci19Ci0KLUNvbG9yIEZFU3BlY3VsYXJMaWdodGluZzo6bGlnaHRpbmdDb2xvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsKLX0KLQotdm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCi17
Ci0gICAgbV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsKLX0KLQotZmxvYXQgRkVTcGVj
dWxhckxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3N1cmZh
Y2VTY2FsZTsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShm
bG9hdCBzdXJmYWNlU2NhbGUpCi17Ci0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7
Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsKLX0KLQotdm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsK
LSAgICBtX3NwZWN1bGFyQ29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotfQotCi1mbG9hdCBG
RVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAotewotICAgIHJldHVy
biBtX3NwZWN1bGFyRXhwb25lbnQ7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRT
cGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCi17Ci0gICAgbV9zcGVjdWxh
ckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0
aW5nOjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5p
dExlbmd0aFg7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVu
Z3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhY
ID0ga2VybmVsVW5pdExlbmd0aFg7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6a2Vy
bmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZ
OwotfQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxv
YXQga2VybmVsVW5pdExlbmd0aFkpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotfQotCi1jb25zdCBMaWdodFNvdXJjZSogRkVTcGVjdWxhckxpZ2h0aW5n
OjpsaWdodFNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7
Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRy
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLXsKLSAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRT
b3VyY2U7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpkdW1wKCkKLXsKLX0KLQotVGV4
dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQpOwotICAgIHRzIDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwi
IiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgotICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9
XCIiIDw8IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgotICAgICAgIDw8ICJzcGVjdWxhckV4
cG9uZW50PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5MzUpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19o
Ci0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxp
Z2h0aW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVTcGVjdWxhckxpZ2h0
aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAot
ICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Ci0g
ICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7Ci0KLSAgICBDb2xvciBsaWdodGluZ0Nv
bG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7Ci0K
LSAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN1cmZhY2VTY2Fs
ZShmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQoKSBjb25zdDsKLSAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOwotCi0gICAg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5lbFVuaXRM
ZW5ndGhYKGZsb2F0KTsKLQotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7Ci0KLSAgICBjb25zdCBMaWdodFNv
dXJjZSogbGlnaHRTb3VyY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldExpZ2h0U291cmNlKFBhc3NS
ZWZQdHI8TGlnaHRTb3VyY2U+KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0
cjxMaWdodFNvdXJjZT4pOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRVNwZWN1
bGFyTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVU
aWxlLmNwcAkocmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCi0jaW5jbHVkZSAiU1ZHRkVUaWxlLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQYXR0ZXJuLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVUaWxlOjpGRVRp
bGUoKQotICAgIDogRmlsdGVyRWZmZWN0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRVRpbGU+IEZF
VGlsZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVGlsZSk7Ci19Ci0K
LUZsb2F0UmVjdCBGRVRpbGU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0
ZXIqIGZpbHRlcikKLXsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGZpbHRlcik7Ci0KLSAgICBmaWx0ZXItPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbih0aGlzLCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpKTsKLSAgICByZXR1cm4g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci19Ci0KLXZvaWQgRkVUaWxlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0g
ICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0
Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhh
cyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXpl
IG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVj
aWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgaWYgKGluLT5pc1NvdXJjZUlucHV0KCkp
IHsKLSAgICAgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9u
KCk7Ci0gICAgICAgIGZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgICAg
IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZWdpb24pOwotICAgIH0KLQotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxl
UmVjdC5zaXplKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRp
bGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7Ci0gICAg
UmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLT5jb3B5
SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwotICAg
IG1hdHJpeC50cmFuc2xhdGUoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgp
IC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksCi0gICAgICAgICAgICAgICAg
ICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLnkoKSk7Ci0gICAgcGF0dGVybi5nZXQoKS0+c2V0UGF0dGVy
blNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7Ci0KLSAgICBmaWx0ZXJDb250ZXh0LT5zZXRGaWxsUGF0
dGVybihwYXR0ZXJuKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnNpemUoKSkpOwotfQot
Ci12b2lkIEZFVGlsZTo6ZHVtcCgpCi17Ci19Ci0KLVRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlVGlsZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiXVxuIjsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsg
MSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRVRpbGVfaAotI2RlZmlu
ZSBTVkdGRVRpbGVfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLSAgICAKLWNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFVGlsZT4gY3JlYXRlKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwg
aW50IGluZGVudGlvbikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7Ci0gICAgCi1wcml2YXRlOgotICAgIEZF
VGlsZSgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRVRpbGVfaApJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gNjc5MzUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVy
YnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6
ZWdlZC5odT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVUdXJidWxlbmNlLmgiCi0KLSNpbmNsdWRlICJDYW52
YXNQaXhlbEFycmF5LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0u
IEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxp
dHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0
ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBu
by4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91
bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2Vu
ZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25z
dCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhp
bXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFt
cGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29u
c3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZFIgPSAyODM2OyAvLyBtICUgYQotCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJidWxh
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmls
dGVyRWZmZWN0KCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9iYXNlRnJlcXVlbmN5WChi
YXNlRnJlcXVlbmN5WCkKLSAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCi0g
ICAgLCBtX251bU9jdGF2ZXMobnVtT2N0YXZlcykKLSAgICAsIG1fc2VlZChzZWVkKQotICAgICwg
bV9zdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcykKLXsKLX0KLQotUGFzc1JlZlB0cjxGRVR1cmJ1bGVu
Y2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNl
ZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVR1cmJ1
bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBz
ZWVkLCBzdGl0Y2hUaWxlcykpOwotfQotCi1UdXJidWxhbmNlVHlwZSBGRVR1cmJ1bGVuY2U6OnR5
cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGU7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNl
OjpzZXRUeXBlKFR1cmJ1bGFuY2VUeXBlIHR5cGUpCi17Ci0gICAgbV90eXBlID0gdHlwZTsKLX0K
LQotZmxvYXQgRkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fYmFzZUZyZXF1ZW5jeVk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJl
cXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLXsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZID0g
YmFzZUZyZXF1ZW5jeVk7Ci19Ci0KLWZsb2F0IEZFVHVyYnVsZW5jZTo6YmFzZUZyZXF1ZW5jeVgo
KSBjb25zdAotewotICAgIHJldHVybiBtX2Jhc2VGcmVxdWVuY3lYOwotfQotCi12b2lkIEZFVHVy
YnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCi17Ci0gICAg
ICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotfQotCi1mbG9hdCBGRVR1cmJ1
bGVuY2U6OnNlZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NlZWQ7IAotfQotCi12b2lkIEZF
VHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQotewotICAgIG1fc2VlZCA9IHNlZWQ7Ci19
Ci0KLWludCBGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMoKSBjb25zdAotewotICAgIHJldHVybiBt
X251bU9jdGF2ZXM7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKGJvb2wg
bnVtT2N0YXZlcykKLXsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotfQotCi1ib29s
IEZFVHVyYnVsZW5jZTo6c3RpdGNoVGlsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0aXRj
aFRpbGVzOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLX0KLQotLy8gVGhlIHR1cmJ1bGVu
Y2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJz
IGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9T
VkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLUZFVHVyYnVsZW5jZTo6UGFpbnRpbmdE
YXRhOjpQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50
aW5nU2l6ZSkKLSAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICwgd2lkdGgoMCkKLSAgICAs
IGhlaWdodCgwKQotICAgICwgd3JhcFgoMCkKLSAgICAsIHdyYXBZKDApCi0gICAgLCBjaGFubmVs
KDApCi0gICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLXsKLX0KLQotLy8gQ29tcHV0ZSBw
c2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdE
YXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNl
ZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1
bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJl
c3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUo
ZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKLX0KLQotaW5saW5l
IGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsK
LSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwotfQotCi1pbmxpbmUgdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZs
b2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9j
a1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19j
YXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0g
c19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICBub3JtYWxpemF0aW9uRmFj
dG9yID0gc3FydGYoZ3JhZGllbnRbMF0gKiBncmFkaWVudFswXSArIGdyYWRpZW50WzFdICogZ3Jh
ZGllbnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3Rv
cjsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUg
KyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2Nr
U2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9y
IChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAg
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAgICAgcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2
b2lkIGNoZWNrTm9pc2UoaW50JiBub2lzZVZhbHVlLCBpbnQgbGltaXRWYWx1ZSwgaW50IG5ld1Zh
bHVlKQotewotICAgIGlmIChub2lzZVZhbHVlID49IGxpbWl0VmFsdWUpCi0gICAgICAgIG5vaXNl
VmFsdWUgLT0gbmV3VmFsdWU7Ci0gICAgaWYgKG5vaXNlVmFsdWUgPj0gbGltaXRWYWx1ZSAtIDEp
Ci0gICAgICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOwotfQotCi1mbG9hdCBGRVR1cmJ1
bGVuY2U6Om5vaXNlMkQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9p
bnQmIG5vaXNlVmVjdG9yKQotewotICAgIHN0cnVjdCBOb2lzZSB7Ci0gICAgICAgIGludCBub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlOwotICAgICAgICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rp
b25WYWx1ZTsKLQotICAgICAgICBOb2lzZShmbG9hdCBjb21wb25lbnQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAg
ICAgICAgICAgIG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKLSAgICAgICAgICAgIG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gcG9zaXRp
b24gLSBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IE5vaXNlIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOwotICAgIE5vaXNlIG5vaXNlWShub2lzZVZl
Y3Rvci55KCkpOwotICAgIGZsb2F0KiBxOwotICAgIGZsb2F0IHN4LCBzeSwgYSwgYiwgdSwgdjsK
LQotICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5
LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIGNoZWNrTm9pc2Uobm9pc2VYLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUsIHBhaW50aW5nRGF0YS53cmFwWCwgcGFpbnRpbmdEYXRh
LndpZHRoKTsKLSAgICAgICAgY2hlY2tOb2lzZShub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZSwgcGFpbnRpbmdEYXRhLndyYXBZLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKLSAgICB9Ci0K
LSAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKLSAg
ICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKLSAgICBp
bnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0gICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yWyhub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZSArIDEpICYgc19ibG9ja01hc2tdOwotCi0gICAgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVgubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOwotICAgIHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLm5v
aXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKLQotICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50LgotICAgIGludCB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0g
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07
Ci0gICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyBub2lz
ZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzFdOwotICAgIHRlbXAgPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZV07Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGlu
Z0RhdGEuY2hhbm5lbF1bdGVtcF07Ci0gICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUg
KiBxWzFdOwotICAgIGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLSAgICB0ZW1w
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwotICAgIHUgPSBub2lzZVgubm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAtIDEpICogcVsxXTsKLSAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAx
XTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0
ZW1wXTsKLSAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICog
cVswXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07Ci0g
ICAgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotICAgIHJldHVybiBsaW5lYXJJ
bnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLX0KLQotdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6
OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBmbG9hdCB0aWxlV2lkdGggPSBw
YWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpOwotICAgIEFTU0VSVCh0aWxlV2lkdGggPiAw
KTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUuaGVpZ2h0
KCk7Ci0gICAgQVNTRVJUKHRpbGVIZWlnaHQgPiAwKTsKLSAgICAvLyBBZGp1c3QgdGhlIGJhc2Ug
ZnJlcXVlbmNpZXMgaWYgbmVjZXNzYXJ5IGZvciBzdGl0Y2hpbmcuCi0gICAgaWYgKG1fc3RpdGNo
VGlsZXMpIHsKLSAgICAgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhl
IGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAgICAgLy8gc28gdGhhdCB0aGUgdGls
ZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5j
eVgpIHsKLSAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGgg
KiBtX2Jhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAgIGZsb2F0IGhpZ2hG
cmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBtX2Jhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0
aDsKLSAgICAgICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBh
Y2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5j
eVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gbV9iYXNlRnJlcXVlbmN5WCkKLSAg
ICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZKSB7Ci0gICAgICAgICAg
ICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5j
eVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICAg
ICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8g
bV9iYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZID0gbG93
RnJlcXVlbmN5OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1
ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OwotICAgICAgICB9Ci0gICAgICAgIC8vIFNldCB1cCBUdXJi
dWxlbmNlSW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgotICAgICAgICBwYWludGluZ0RhdGEud2lkdGgg
PSByb3VuZGYodGlsZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCk7Ci0gICAgICAgIHBhaW50aW5n
RGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAg
IHBhaW50aW5nRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5j
eVkpOwotICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRp
bmdEYXRhLmhlaWdodDsKLSAgICB9Ci0gICAgZmxvYXQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
ID0gMDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIG1fYmFzZUZyZXF1
ZW5jeVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlvID0g
MTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0
YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5P
SVNFKQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFp
bnRpbmdEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IGZhYnNmKG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBub2lzZVZlY3RvcikpIC8gcmF0aW87Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VW
ZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgp
ICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJs
aW5Ob2lzZW9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAgIC8v
IGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgot
ICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndpZHRoICo9IDI7Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEud3JhcFggPSAyICogcGFpbnRpbmdEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAg
ICAgICAgICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS53cmFwWSA9IDIgKiBwYWludGluZ0RhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkg
LyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZ
UEVfRlJBQ1RBTE5PSVNFKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLSAgICAvLyBDbGFtcCByZXN1bHQK
LSAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBzdGQ6Om1heChzdGQ6Om1pbih0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQsIDEuZiksIDAuZik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSk7Ci19Ci0KLXZvaWQg
RkVUdXJidWxlbmNlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAoIWVmZmVjdENv
bnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBpZiAoIWltYWdlUmVjdC5zaXplKCku
d2lkdGgoKSB8fCAhaW1hZ2VSZWN0LnNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YShtX3NlZWQsIGltYWdlUmVjdC5zaXplKCkpOwotICAgIGluaXRQYWludChwYWlu
dGluZ0RhdGEpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVy
UmVnaW9uKCk7Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICBwb2ludC5zZXRZKGZpbHRlclJl
Z2lvbi55KCkpOwotICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNl
dFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgewot
ICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIGZvciAo
cGFpbnRpbmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFp
bnRpbmdEYXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKLSAgICAgICAgICAgICAg
ICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGluZGV4T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgcG9pbnQpKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VE
YXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEZFVHVyYnVsZW5j
ZTo6ZHVtcCgpCi17Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBUdXJidWxhbmNlVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBFX1VOS05PV046Ci0gICAgICAgIHRzIDw8ICJV
TktOT1dOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJC
VUxFTkNFOgotICAgICAgICB0cyA8PCAiVFVSQlVMQU5DRSI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFOgotICAgICAgICB0cyA8PCAiTk9J
U0UiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3Ry
ZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAg
dHMgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKLSAg
ICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8
IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKLSAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgp
IDw8ICJcIiAiCi0gICAgICAgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAi
XCIgIgotICAgICAgIDw8ICJzdGl0Y2hUaWxlcz1cIiIgPDwgc3RpdGNoVGlsZXMoKSA8PCAiXCJd
XG4iOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDY3OTM1KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNW
R0ZFVHVyYnVsZW5jZV9oCi0jZGVmaW5lIFNWR0ZFVHVyYnVsZW5jZV9oCi0KLSNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIFR1cmJ1bGFuY2VU
eXBlIHsKLSAgICBGRVRVUkJVTEVOQ0VfVFlQRV9VTktOT1dOID0gMCwKLSAgICBGRVRVUkJVTEVO
Q0VfVFlQRV9GUkFDVEFMTk9JU0UgPSAxLAotICAgIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVO
Q0UgPSAyCi19OwotCi1jbGFzcyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJi
dWxhbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKLQotICAgIFR1cmJ1
bGFuY2VUeXBlIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoVHVyYnVsYW5jZVR5cGUp
OwotCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkoKSBjb25zdDsKLSAgICB2b2lkIHNldEJhc2VG
cmVxdWVuY3lZKGZsb2F0KTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzZWVkKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTZWVkKGZsb2F0KTsKLQotICAgIGludCBudW1PY3RhdmVzKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXROdW1PY3RhdmVzKGJvb2wpOwotCi0gICAgYm9vbCBzdGl0Y2hUaWxl
cygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3RpdGNoVGlsZXMoYm9vbCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZp
cnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50
IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Js
b2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9j
a1NpemUgLSAxOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGxvbmcgc2Vl
ZDsKLSAgICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKLSAg
ICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07Ci0gICAgICAg
IGludCB3aWR0aDsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5n
LgotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBpbnQgd3JhcFg7IC8vIE1pbmltdW0gdmFs
dWUgdG8gd3JhcC4KLSAgICAgICAgaW50IHdyYXBZOwotICAgICAgICBpbnQgY2hhbm5lbDsKLSAg
ICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotCi0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBh
aW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKLSAgICAgICAgaW5saW5l
IGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIEZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlw
ZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKLQotICAgIGlubGluZSB2b2lkIGlu
aXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBmbG9hdCBub2lzZTJEKFBhaW50aW5nRGF0YSYs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAg
IFR1cmJ1bGFuY2VUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwotICAg
IGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgaW50IG1fbnVtT2N0YXZlczsKLSAgICBmbG9h
dCBtX3NlZWQ7Ci0gICAgYm9vbCBtX3N0aXRjaFRpbGVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNl
bmRpZiAvLyBTVkdGRVR1cmJ1bGVuY2VfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdMaWdodFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdM
aWdodFNvdXJjZS5oIgotCi0jaW5jbHVkZSAiU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiCi0jaW5j
bHVkZSAiU1ZHUG9pbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1Rl
eHQuaCIKLSNpbmNsdWRlICJTVkdTcG90TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgUG9pbnRMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKQotewotfQotCi12b2lkIFBvaW50TGln
aHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHgsIGludCB5LCBmbG9hdCB6KQotewotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5z
ZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNl
dFkobV9wb3NpdGlvbi55KCkgLSB5KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0
WihtX3Bvc2l0aW9uLnooKSAtIHopOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5ub3Jt
YWxpemUoKTsKLX0KLQotLy8gc3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFu
IGFic29sdXRlIHRyZXNob2xkCi0vLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQg
cmVncmVzc2lvbiB0ZXN0cwotc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0g
MC4wMTZmOwotCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVj
dG9yID0gcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rp
b25WZWN0b3Iuc2V0WChtX2RpcmVjdGlvbi54KCkgLSBtX3Bvc2l0aW9uLngoKSk7Ci0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5zZXRZKG1fZGlyZWN0aW9uLnkoKSAtIG1fcG9zaXRp
b24ueSgpKTsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFoobV9kaXJlY3Rp
b24ueigpIC0gbV9wb3NpdGlvbi56KCkpOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0
b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5n
RGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAg
ICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5n
Q29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25l
QW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0g
ICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBm
IC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0g
ICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2
YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9
PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAg
ZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAyOwotfQotCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6dXBkYXRl
UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZs
b2F0IHopCi17Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54
KCkgLSB4KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnko
KSAtIHkpOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigp
IC0geik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOwotCi0gICAg
ZmxvYXQgY29zaW5lT2ZBbmdsZSA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvciAqIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3I7Ci0gICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0Rh
dGEuY29uZUN1dE9mZkxpbWl0KSB7Ci0gICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1Y2VkLCBz
Y2FubGluZXMgYXJlIG5vdCB1cGRhdGVkCi0gICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rv
ci5zZXRYKDAuMGYpOwotICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WSgwLjBm
KTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFooMC4wZik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAotICAg
IGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCkgewotICAgIGNhc2UgMDoKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8v
IC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAxCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBe
IDEgPT0gLWNvc2luZU9mQW5nbGUKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFp
bnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEu
Y29uZUN1dE9mZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOwotCi0gICAgaWYg
KGxpZ2h0U3RyZW5ndGggPiAxLjBmKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKLQot
ICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRYKHBhaW50aW5nRGF0YS5wcml2YXRlQ29s
b3JWZWN0b3IueCgpICogbGlnaHRTdHJlbmd0aCk7Ci0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVj
dG9yLnNldFkocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci55KCkgKiBsaWdodFN0cmVu
Z3RoKTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WihwYWludGluZ0RhdGEucHJp
dmF0ZUNvbG9yVmVjdG9yLnooKSAqIGxpZ2h0U3RyZW5ndGgpOwotfQotCi12b2lkIERpc3RhbnRM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
LXsKLSAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwotICAgIGZsb2F0IGVs
ZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci5zZXRYKGNvc2YoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikpOwotICAgIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci5zZXRZKHNpbmYoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikpOwot
ICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKHNpbmYoZWxldmF0aW9uKSk7Ci19Ci0K
LXZvaWQgRGlzdGFudExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRh
JiwgaW50LCBpbnQsIGZsb2F0KQotewotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludDNEJiBwKQotewotICAgIHRzIDw8ICJ4
PSIgPDwgcC54KCkgPDwgIiB5PSIgPDwgcC55KCkgPDwgIiB6PSIgPDwgcC56KCk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJbdHlwZT1QT0lO
VC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJc
Il0iOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgU3BvdExpZ2h0U291cmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8
ICJbdHlwZT1TUE9ULUxJR0hUXSAiOwotICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0
aW9uKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltkaXJlY3Rpb249XCIiIDw8IGRpcmVjdGlvbigp
IDw8ICJcIl0iOwotICAgIHRzIDw8ICJbc3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgc3BlY3VsYXJF
eHBvbmVudCgpIDw8ICJcIl0iOwotICAgIHRzIDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8
IGxpbWl0aW5nQ29uZUFuZ2xlKCkgPDwgIlwiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0
U3RyZWFtJiBEaXN0YW50TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7Ci0g
ICAgdHMgPDwgIlthemltdXRoPVwiIiA8PCBhemltdXRoKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwg
IltlbGV2YXRpb249XCIiIDw8IGVsZXZhdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xp
Z2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3Vp
bmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpv
bHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0xpZ2h0U291cmNl
X2gKLSNkZWZpbmUgU1ZHTGlnaHRTb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWVudW0gTGlnaHRUeXBlIHsKLSAgICBMU19ESVNUQU5ULAotICAgIExTX1BPSU5ULAot
ICAgIExTX1NQT1QKLX07Ci0KLWNsYXNzIFRleHRTdHJlYW07Ci0KLWNsYXNzIExpZ2h0U291cmNl
IDogcHVibGljIFJlZkNvdW50ZWQ8TGlnaHRTb3VyY2U+IHsKLXB1YmxpYzoKLQotICAgIC8vIExp
Z2h0IHZlY3RvcnMgbXVzdCBiZSBjYWxjdWxhdGVkIGZvciBldmVyeSBwaXhlbCBkdXJpbmcKLSAg
ICAvLyBwYWludGluZy4gSXQgaXMgZXhwZW5zaXZlIHRvIHBhc3MgYWxsIHRoZXNlIGFyZ3VtZW50
cyB0bwotICAgIC8vIGEgZnJlcXVlbnRseSBjYWxsZWQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgYmVj
YXVzZSBub3QgYWxsCi0gICAgLy8gbGlnaHQgc291cmNlcyByZXF1aXJlIGFsbCBvZiB0aGVtLiBJ
bnN0ZWFkLCB3ZSBqdXN0IHBhc3MKLSAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93aW5n
IHN0cnVjdHVyZQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICAvLyBTVkdGRUxp
Z2h0aW5nIGFsc28gdXNlIHRoZW0KLSAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwot
ICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7Ci0gICAgICAgIC8vIFByaXZhdGUgbWVt
YmVycwotICAgICAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOwotICAgICAgICBGbG9h
dFBvaW50M0QgcHJpdmF0ZUNvbG9yVmVjdG9yOwotICAgICAgICBmbG9hdCBjb25lQ3V0T2ZmTGlt
aXQ7Ci0gICAgICAgIGZsb2F0IGNvbmVGdWxsTGlnaHQ7Ci0gICAgICAgIGludCBzcGVjdWxhckV4
cG9uZW50OwotICAgIH07Ci0KLSAgICBMaWdodFNvdXJjZShMaWdodFR5cGUgdHlwZSkKLSAgICAg
ICAgOiBtX3R5cGUodHlwZSkKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgfkxpZ2h0U291cmNlKCkg
eyB9Ci0KLSAgICBMaWdodFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikg
Y29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdE
YXRhJikgPSAwOwotICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBh
bHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCi0gICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2Nh
bGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgeikgPSAwOwotCi1wcml2YXRlOgotICAgIExpZ2h0VHlwZSBtX3R5cGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0xpZ2h0U291cmNlX2gKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5o
CShyZXZpc2lvbiA2NzkzNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9p
bnRMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCi0jZGVm
aW5lIFNWR1BvaW50TGlnaHRTb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBQb2ludExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUG9pbnRMaWdodFNvdXJjZShwb3NpdGlvbikpOwotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0
UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgeik7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFBvaW50TGlnaHRTb3VyY2UoY29u
c3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbikKLSAgICAgICAgOiBMaWdodFNvdXJjZShMU19QT0lO
VCkKLSAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBG
bG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZH
UG9pbnRMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R1Nwb3RMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHU3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTM1KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNW
R1Nwb3RMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR1Nwb3RMaWdodFNvdXJjZV9oCi0KLSNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1Ymxp
YyBMaWdodFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3BvdExpZ2h0
U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwKLSAgICAgICAgY29u
c3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
cG90TGlnaHRTb3VyY2UocG9zaXRpb24sIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCwgbGlt
aXRpbmdDb25lQW5nbGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQz
RCYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KLQotICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0K
LSAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdD
b25lQW5nbGU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5n
RGF0YSYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
U3BvdExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0
UG9pbnQzRCYgZGlyZWN0aW9uLAotICAgICAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBsaW1pdGluZ0NvbmVBbmdsZSkKLSAgICAgICAgOiBMaWdodFNvdXJjZShMU19TUE9UKQotICAg
ICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQotICAgICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQotICAg
ICAgICAsIG1fbGltaXRpbmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpCi0gICAgewotICAg
IH0KLQotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2Rp
cmVjdGlvbjsKLQotICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKLSAgICBmbG9hdCBtX2xp
bWl0aW5nQ29uZUFuZ2xlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdTcG90TGln
aHRTb3VyY2VfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68239</attachid>
            <date>2010-09-21 07:33:03 -0700</date>
            <delta_ts>2010-09-21 23:47:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46177-20100921163257.patch</filename>
            <type>text/plain</type>
            <size>350196</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMTAtMDktMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IEZpbHRlckVmZmVjdHMgaW5kZXBlbmRlbnQgb2YgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE3NworCisgICAgICAgIE1vdmluZyBhbGwgRmls
dGVyRWZmZWN0cyBmcm9tIHN2Zy9ncmFwaGljcy9maWx0ZXJzIHRvIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMsIG5vdyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIFNWRy4g
UmVtb3ZlZCB0aGUgU1ZHIHByZWZpeCBvZiB0aGUgZmlsZXMgYW5kIHVwZGF0ZWQgdGhlIGhlYWRl
cnMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRM
aWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlzcGxhY2VtZW50TWFwLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDogQ29waWVkIGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJp
eC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVy
YnVsZW5jZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0xpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorCiAyMDEwLTA5LTIx
ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvQW5kcm9p
ZC5tawkod29ya2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMywxOCBAQCBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwK
IAlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIFwKLQlw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorCXBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgXAor
CXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgXAorCXBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIFwKKwlw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgXAorCXBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCiBlbmRpZgogCiBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKQEAgLTk1NiwyMCArOTY3LDkgQEAgTE9DQUxfU1JDX0ZJ
TEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCXN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAgXAogCVwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBc
Ci0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKLQlzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgXAotCXN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwIFwKIAlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAgXAotCXN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFT2Zmc2V0LmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCBcCi0J
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcCBcCiAJc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAor
CXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCiBlbmRpZgogCiBMT0NB
TF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
Njc5NDkpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjU3
LDkgKzEyNTcsMjEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmls
dGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiAKQEAgLTE4MTIsMjEgKzE4MjQs
OSBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRh
aW5lci5jcHAKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKICAgICAg
ICAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
Rmxvb2QuY3BwCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCi0g
ICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCi0gICAgICAgIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNw
cAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCiAgICAg
ICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKICAgICAgICAgc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwCiAgICAgKQogRU5ESUYoKQogCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMjA4NSw2ICsyMDg1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JT
cGFjZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKQEAgLTIwOTMsMTcgKzIwOTQsNDMg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuaCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggXAorCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKQEAgLTI4
NTYsMzkgKzI4ODMsMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9Db2xv
ckRpc3RhbmNlLmggXAogCVdlYkNvcmUvc3ZnL0VsZW1lbnRUaW1lQ29udHJvbC5oIFwKIAlXZWJD
b3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0ZXMuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdEaXN0YW50TGlnaHRTb3VyY2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVGbG9vZC5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVG
bG9vZC5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIFwK
IAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBcCi0JV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNZXJnZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNZXJnZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9n
eS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmgg
XAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwIFwKLQlXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmggXAotCVdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBcCi0JV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCBcCi0JV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFVGlsZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VHVyYnVsZW5jZS5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJi
dWxlbmNlLmggXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5jcHAgXAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5o
IFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgXAogCVdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0xpZ2h0U291cmNlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHUG9pbnRMaWdodFNvdXJjZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R1Nwb3RMaWdodFNvdXJjZS5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAg
XAogCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmggXAogCVdlYkNvcmUvc3ZnL0xpbmVh
ckdyYWRpZW50QXR0cmlidXRlcy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUzLDYgKzIzNTMsNyBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0
YW50TGlnaHRTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAnLApAQCAtMjM2MSw4ICsyMzYyLDM0IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRT
b3VyY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0
U291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nw
b3RMaWdodFNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgnLApAQCAtMzc3MiwzOSArMzc5OSwxMiBAQAogICAgICAgICAgICAgJ3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFu
dExpZ2h0U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
Q29udm9sdmVNYXRyaXguY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUNvbnZvbHZlTWF0cml4LmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oJywKLSAgICAgICAgICAgICdzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxp
Z2h0aW5nLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdo
dGluZy5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNw
cCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oJywKLSAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwJywKLSAg
ICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaCcsCi0gICAg
ICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwJywKLSAgICAgICAg
ICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oJywKLSAgICAgICAgICAgICdz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwJywKLSAgICAgICAg
ICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCcsCi0gICAg
ICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCcsCi0gICAgICAgICAg
ICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgnLAotICAgICAgICAgICAgJ3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oJywKICAgICAgICAgICAgICdzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdMaWdodFNvdXJjZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQ
b2ludExpZ2h0U291cmNlLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R1Nwb3RMaWdodFNvdXJjZS5oJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCcsCiAgICAgICAgICAg
ICAnc3ZnL0NvbG9yRGlzdGFuY2UuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgxLDggKzE5ODEsMjAgQEAgSEVB
REVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXApA
QCAtMjI3NCwyMSArMjI4Niw5IEBAIEhFQURFUlMgKz0gXAogICAgIHN2Zy9hbmltYXRpb24vU01J
TFRpbWUuaCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIFwKICAgICBzdmcv
Q29sb3JEaXN0YW5jZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZl
TWF0cml4LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmggXAot
ICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaCBcCiAgICAgc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxp
Z2h0aW5nLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaCBcCi0gICAg
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmggXAotICAgIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
U3BlY3VsYXJMaWdodGluZy5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUu
aCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmggXAogICAgIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBcCiAgICAgc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmggXAotICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0
U291cmNlLmggXAogICAgIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIFwKICAgICBzdmcvU1ZHQUVs
ZW1lbnQuaCBcCiAgICAgc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5oIFwKQEAgLTMxMDYsOCArMzEw
NiwyMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMVEVSUz0xKSB7CiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIFwKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgXAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogfQpAQCAt
MzM3NiwyMSArMzM4OCw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAg
ICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0
cml4LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50
TWFwLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwIFwK
ICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgXAotICAgICAgICBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVNb3JwaG9sb2d5LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFT2Zmc2V0LmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUu
Y3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcCBc
CiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgXAogICAgICAgICBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBcCi0gICAgICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5j
cHAgXAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAgXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2OTQ3LDYgKzI2
OTQ3LDk4IEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xEaXN0YW50TGlnaHRTb3Vy
Y2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUNvbnZvbHZlTWF0cml4LmNw
cCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUNvbnZvbHZlTWF0cml4LmgiDQor
CQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVEaWZmdXNlTGlnaHRpbmcuY3BwIg0KKwkJ
CQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFRGlmZnVzZUxpZ2h0aW5nLmgiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVEaXNwbGFjZW1lbnRNYXAuY3BwIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFRGlzcGxhY2VtZW50TWFwLmgiDQorCQkJCQkJPg0KKwkJ
CQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGZpbHRlcnNcRkVGbG9vZC5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcRkVGbG9vZC5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQor
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTGlnaHRp
bmcuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFTGlnaHRpbmcuaCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU1lcmdlLmNwcCINCisJCQkJCQk+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZmlsdGVyc1xGRU1lcmdlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRl
cnNcRkVNb3JwaG9sb2d5LmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8Rmls
ZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU1v
cnBob2xvZ3kuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU9mZnNldC5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVPZmZzZXQuaCINCisJCQkJCQk+DQor
CQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIg0KKwkJCQkJCT4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xmaWx0ZXJzXEZFU3BlY3VsYXJMaWdodGluZy5oIg0KKwkJCQkJCT4NCisJCQkJ
CTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xmaWx0ZXJzXEZFVGlsZS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRl
cnNcRkVUaWxlLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVUdXJidWxlbmNl
LmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRVR1cmJ1bGVuY2UuaCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGaWx0ZXIuaCINCiAJCQkJCQk+DQogCQkJCQk8
L0ZpbGU+DQpAQCAtMjY5NjcsNiArMjcwNTksMTggQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4N
CiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXExpZ2h0U291cmNlLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8
RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xM
aWdodFNvdXJjZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFBvaW50TGlnaHRT
b3VyY2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xTb3VyY2VBbHBoYS5jcHAi
DQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KQEAgLTI2OTgyLDYgKzI3MDg2LDEwIEBACiAJCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcU291cmNlR3JhcGhp
Yy5oIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFNwb3RMaWdodFNvdXJjZS5oIg0K
KwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCiAJCQkJPC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQog
CQkJPEZpbHRlcg0KQEAgLTUxMTQzLDQyICs1MTI1MSw2IEBACiAJCQkJCU5hbWU9ImZpbHRlcnMi
DQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBo
aWNzXGZpbHRlcnNcU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9G
aWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xm
aWx0ZXJzXFNWR0ZFQ29udm9sdmVNYXRyaXguY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4N
Ci0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVy
c1xTVkdGRUNvbnZvbHZlTWF0cml4LmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJ
PEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZF
RGlmZnVzZUxpZ2h0aW5nLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8Rmls
ZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVEaWZm
dXNlTGlnaHRpbmcuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVEaXNwbGFjZW1l
bnRNYXAuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRURpc3BsYWNlbWVudE1h
cC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUZsb29kLmNwcCINCi0JCQkJCQk+
DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Zn
XGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVGbG9vZC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4N
Ci0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVy
c1xTVkdGRUltYWdlLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtNTExODcsNjIg
KzUxMjU5LDYgQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRUxpZ2h0aW5nLmNwcCIN
Ci0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVMaWdodGluZy5oIg0KLQkJCQkJCT4NCi0J
CQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3Jh
cGhpY3NcZmlsdGVyc1xTVkdGRU1lcmdlLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHRkVNZXJnZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1vcnBob2xvZ3ku
Y3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRU1vcnBob2xvZ3kuaCINCi0JCQkJ
CQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVPZmZzZXQuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwv
RmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3Nc
ZmlsdGVyc1xTVkdGRU9mZnNldC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxG
aWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRVNwZWN1
bGFyTGlnaHRpbmcuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVUaWxlLmNwcCIN
Ci0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVUaWxlLmgiDQotCQkJCQkJPg0KLQkJCQkJ
PC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGlj
c1xmaWx0ZXJzXFNWR0ZFVHVyYnVsZW5jZS5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0K
LQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJz
XFNWR0ZFVHVyYnVsZW5jZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGaWx0ZXIu
Y3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC01MTI1OCwyMiArNTEyNzQsNiBAQAog
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGaWx0ZXJCdWls
ZGVyLmgiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0xpZ2h0U291cmNlLmNwcCINCi0J
CQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHTGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJ
CQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBo
aWNzXGZpbHRlcnNcU1ZHUG9pbnRMaWdodFNvdXJjZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmls
ZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmls
dGVyc1xTVkdTcG90TGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQogCQkJ
CTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY3OTQ5KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE0NzksNiArMTQ3OSwzMyBAQAogCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJG
NzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi87IH07CiAJCTg0NUU3MkZCMEZEMjYyMzkw
MEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAg
Ki87IH07CiAJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZEMjYyMzkw
MEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKKwkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5
IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNv
dXJjZS5oICovOyB9OworCQk4NDczMEQ3ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1h
dHJpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDczMEQ1QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5jcHAgKi87IH07CisJ
CTg0NzMwRDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBE
M0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovOyB9OworCQk4NDczMEQ3QTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcCAqLzsgfTsKKwkJODQ3MzBEN0IxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlm
ZnVzZUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ1RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCAqLzsg
fTsKKwkJODQ3MzBEN0MxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVGMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgKi87IH07CisJCTg0NzMwRDdE
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjAxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFRGlzcGxhY2VtZW50TWFwLmggKi87IH07CisJCTg0NzMwRDdFMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRUZsb29kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDYxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmNwcCAqLzsgfTsKKwkJODQ3
MzBEN0YxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRmxvb2QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYyMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZs
b29kLmggKi87IH07CisJCTg0NzMwRDgwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYz
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmNwcCAqLzsgfTsKKwkJODQ3MzBEODExMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5n
LmggKi87IH07CisJCTg0NzMwRDgyMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY1MTI0OEYw
QjMwMEQzQTlDOSAvKiBGRU1lcmdlLmNwcCAqLzsgfTsKKwkJODQ3MzBEODMxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFTWVyZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDY2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggKi87IH07CisJCTg0
NzMwRDg0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjcxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFTW9ycGhvbG9neS5jcHAgKi87IH07CisJCTg0NzMwRDg1MTI0OEYwQjMwMEQzQTlDOSAv
KiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDY4MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCAqLzsgfTsK
KwkJODQ3MzBEODYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY5MTI0OEYwQjMwMEQzQTlD
OSAvKiBGRU9mZnNldC5jcHAgKi87IH07CisJCTg0NzMwRDg3MTI0OEYwQjMwMEQzQTlDOSAvKiBG
RU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07CisJCTg0NzMwRDg4
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFU3BlY3VsYXJMaWdodGluZy5jcHAgKi87IH07CisJCTg0NzMwRDg5MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFy
TGlnaHRpbmcuaCAqLzsgfTsKKwkJODQ3MzBEOEExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2
RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmNwcCAqLzsgfTsKKwkJODQ3MzBEOEIxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9Owor
CQk4NDczMEQ4QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZGMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVR1cmJ1bGVuY2UuY3BwICovOyB9OworCQk4NDczMEQ4RDEyNDhGMEIzMDBEM0E5
QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi87
IH07CisJCTg0NzMwRDkwMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MzEyNDhGMEIz
MDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwICovOyB9OworCQk4NDczMEQ5MTEyNDhGMEIzMDBE
M0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0NzMwRDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oICov
OyB9OworCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzUxMjQ4
RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLzsgfTsKKwkJODQ3MzBEOTMxMjQ4
RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RM
aWdodFNvdXJjZS5oICovOyB9OwogCQk4NDc2QzlFNTExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0
aFNlZ0xpc3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NzZDOUUzMTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXIuY3BwICovOyB9OwogCQk4NDc2QzlFNjExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDc2QzlFNDExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggKi87
IH07CiAJCTg0NzZDOUVBMTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2QzlFNzExREY2
QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1aWxkZXIuY3BwICovOyB9OwpAQCAtMjkwOCw3ICsyOTM1
LDYgQEAKIAkJQTdEMjBGNjIxMDdGNDA2OTAwQTgwMzkyIC8qIEpTV2ViR0xBY3RpdmVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDIwRjYw
MTA3RjQwNjkwMEE4MDM5MiAvKiBKU1dlYkdMQWN0aXZlSW5mby5jcHAgKi87IH07CiAJCUE3RDIw
RjYzMTA3RjQwNjkwMEE4MDM5MiAvKiBKU1dlYkdMQWN0aXZlSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjBGNjExMDdGNDA2OTAwQTgwMzky
IC8qIEpTV2ViR0xBY3RpdmVJbmZvLmggKi87IH07CiAJCUE3RDIwRjZEMTA3RjQzOEIwMEE4MDM5
MiAvKiBXZWJHTEFjdGl2ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RDIwRjZCMTA3RjQzOEIwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8u
aCAqLzsgfTsKLQkJQTdEMjdGQzQwRTBBNTk5RjAwNzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QyN0ZDMzBFMEE1
OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAqLzsgfTsKIAkJQTdEM0M1MjQwQjU3NkI0QjAw
MkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJk
SGVscGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdENkIzNDkwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDcwRjYxMTA0
NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovOyB9OwogCQlBN0Q2QjM0QTBGNjEx
MDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXIuY3BwICovOyB9OwpAQCAtNDA0OCwzMiArNDA3NCw4IEBACiAJCUIy
MzdDOEE4MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8q
IFNWR0ZvbnREYXRhLmggKi87IH07CiAJCUIyNDA1NTY1MEI1QkU2NDAwMDJBMjhDMCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI0MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUludGVybmFsLmggKi87IH07CiAJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBE
T01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCAqLzsgfTsKLQkJQjI1NTk5NzEwRDAw
RDhCQTAwQkI4MjVDIC8qIFNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RDcwRDAwRDhCOTAwQkI4MjVDIC8q
IFNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwotCQlCMjU1OTk3QTBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252
b2x2ZU1hdHJpeC5jcHAgKi87IH07Ci0JCUIyNTU5OTdCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdG
RUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OThFMTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5o
ICovOyB9OwotCQlCMjU1OTk3QzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk4RTIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCAqLzsgfTsK
LQkJQjI1NTk5N0QwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFMzBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCAqLzsgfTsKLQkJQjI1NTk5N0Uw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEU0MEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgKi87IH07Ci0JCUIyNTU5OTdGMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZF
RGlzcGxhY2VtZW50TWFwLmggKi87IH07Ci0JCUIyNTU5OTgwMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdGRUZsb29kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5OEU2MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUZsb29kLmNwcCAqLzsgfTsKLQkJ
QjI1NTk5ODEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRmxvb2QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1QyAv
KiBTVkdGRUZsb29kLmggKi87IH07CiAJCUIyNTU5OTg0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLzsgfTsKIAkJQjI1
NTk5ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBT
VkdGRUltYWdlLmggKi87IH07Ci0JCUIyNTU5OTg2MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1l
cmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NTU5OEVDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmNwcCAqLzsgfTsKLQkJQjI1NTk5
ODcwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFTWVyZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVEMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RU1lcmdlLmggKi87IH07Ci0JCUIyNTU5OTg4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBo
b2xvZ3kuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk4RUUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5jcHAgKi87IH07Ci0J
CUIyNTU5OTg5MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVGMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCAqLzsgfTsKLQkJQjI1NTk5OEEwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR0ZFT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNTU5OEYwMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU9mZnNldC5jcHAg
Ki87IH07Ci0JCUIyNTU5OThCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU9mZnNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmggKi87IH07Ci0JCUIyNTU5OThDMEQwMEQ4QkEwMEJC
ODI1QyAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAgKi87IH07Ci0JCUIyNTU5OThEMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNTU5OEYzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaCAqLzsgfTsKLQkJQjI1NTk5OEUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFVGls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4
RjQwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFVGlsZS5oICovOyB9OwotCQlCMjU1OTk4RjBEMDBE
OEJBMDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEY1MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RVR1cmJ1bGVuY2UuY3BwICovOyB9OwotCQlCMjU1OTk5MDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZH
RkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmggKi87IH07
Ci0JCUIyNTU5OTkzMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGOTBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuY3BwICovOyB9OwotCQlCMjU1OTk5NDBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEZBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNv
dXJjZS5oICovOyB9OwotCQlCMjU1OTk5NTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHUG9pbnRMaWdo
dFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3VyY2UuaCAqLzsgfTsK
LQkJQjI1NTk5OTYwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Nwb3RMaWdodFNvdXJjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RkMwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR1Nwb3RMaWdodFNvdXJjZS5oICovOyB9OwogCQlCMjU1OTlBMzBEMDBE
OEJBMDBCQjgyNUMgLyogU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmNw
cCAqLzsgfTsKIAkJQjI1NTk5QTQwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkwQzBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCAqLzsgfTsKIAkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVD
IC8qIEVtcHR5Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovOyB9
OwpAQCAtNTI5MSw4ICs1MjkzLDYgQEAKIAkJRTFGRjU3QTYwRjAxMjU2QjAwODkxRUJCIC8qIFRo
cmVhZEdsb2JhbERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFGRjU3QTUwRjAxMjU2QjAwODkxRUJCIC8qIFRocmVhZEdsb2JhbERhdGEuY3Bw
ICovOyB9OwogCQlFNDE1RjE2OTBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250
cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1
RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJ
CUU0MTVGMTg0MEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTgzMEQ5QTFBODMw
MDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKLQkJRTQ0MEEyRDUxMTkxQTUw
QjAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MEEyRDQxMTkxQTUwQjAwMDgyMEIwIC8qIFNWR0ZFTGln
aHRpbmcuY3BwICovOyB9OwotCQlFNDQwQTJENzExOTFBNTIzMDAwODIwQjAgLyogU1ZHRkVMaWdo
dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0
MEEyRDYxMTkxQTUyMzAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuaCAqLzsgfTsKIAkJRTQ0NjEz
QTEwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1
IC8qIEhUTUxBdWRpb0VsZW1lbnQuY3BwICovOyB9OwogCQlFNDQ2MTNBMjBDRDYzMzEwMDBGQURB
NzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ0NjEzOTAwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1l
bnQuaCAqLzsgfTsKIAkJRTQ0NjEzQTQwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0
NjEzOTIwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuY3BwICovOyB9OwpAQCAt
NzQ0Miw2ICs3NDQyLDMzIEBACiAJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyLmg7IHBhdGggPSBmaWx0
ZXJzL0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDVFNzJGOTBGRDI2
MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0
NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzdGFudExpZ2h0U291cmNlLmg7IHBhdGggPSBm
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NDczMEQ1QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGRUNvbnZvbHZlTWF0cml4LmNwcDsgcGF0
aCA9IGZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg0NzMwRDVDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFQ29udm9sdmVNYXRyaXguaDsgcGF0aCA9
IGZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NDczMEQ1RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVEaWZmdXNlTGlnaHRpbmcuY3BwOyBw
YXRoID0gZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg0NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGRURpZmZ1c2VMaWdodGluZy5oOyBw
YXRoID0gZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NDczMEQ1RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwOyBwYXRoID0gZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVu
dE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGRURpc3BsYWNlbWVudE1h
cC5oOyBwYXRoID0gZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NDczMEQ2MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGRUZsb29kLmNwcDsgcGF0aCA9IGZp
bHRlcnMvRkVGbG9vZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDYy
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZFRmxvb2QuaDsgcGF0aCA9IGZpbHRlcnMvRkVGbG9vZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4NDczMEQ2MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGRUxpZ2h0aW5nLmNwcDsg
cGF0aCA9IGZpbHRlcnMvRkVMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg0NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFTGlnaHRpbmcuaDsgcGF0aCA9IGZpbHRlcnMvRkVMaWdo
dGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2NTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVNZXJnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGRU1lcmdlLmNwcDsgcGF0aCA9IGZpbHRlcnMvRkVNZXJnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg0NzMwRDY2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFTWVyZ2UuaDsgcGF0aCA9IGZpbHRlcnMv
RkVNZXJnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2NzEyNDhGMEIz
MDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZFTW9ycGhvbG9neS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDY4MTI0OEYwQjMwMEQzQTlD
OSAvKiBGRU1vcnBob2xvZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRkVN
b3JwaG9sb2d5Lmg7IHBhdGggPSBmaWx0ZXJzL0ZFTW9ycGhvbG9neS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4NDczMEQ2OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVPZmZzZXQuY3BwOyBwYXRo
ID0gZmlsdGVycy9GRU9mZnNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0
NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGRU9mZnNldC5oOyBwYXRoID0gZmlsdGVycy9GRU9mZnNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVT
cGVjdWxhckxpZ2h0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZFU3BlY3VsYXJMaWdodGluZy5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDZDMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRkVTcGVjdWxhckxpZ2h0aW5nLmg7IHBhdGggPSBmaWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2RDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZFVGlsZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFVGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRkVUaWxlLmg7IHBhdGggPSBmaWx0ZXJzL0ZFVGls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2RjEyNDhGMEIzMDBEM0E5
QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZFVHVyYnVsZW5jZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDcwMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RVR1cmJ1bGVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRkVUdXJidWxl
bmNlLmg7IHBhdGggPSBmaWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NDczMEQ3MzEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGlnaHRTb3VyY2UuY3BwOyBwYXRo
ID0gZmlsdGVycy9MaWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg0NzMwRDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBMaWdodFNvdXJjZS5oOyBwYXRoID0gZmlsdGVycy9MaWdodFNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ3NTEyNDhGMEIzMDBE
M0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQb2ludExpZ2h0U291cmNlLmg7IHBhdGggPSBmaWx0ZXJzL1BvaW50TGlnaHRTb3VyY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5
IC8qIFNwb3RMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
cG90TGlnaHRTb3VyY2UuaDsgcGF0aCA9IGZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzZDOUUzMTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODQ3NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NkM5RTcxMURGNkEyOTAwNTU1QjAyIC8q
IFNWR1BhdGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR1BhdGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4MTcs
NyArODg0NCw2IEBACiAJCUE3RDIwRjYwMTA3RjQwNjkwMEE4MDM5MiAvKiBKU1dlYkdMQWN0aXZl
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQWN0
aXZlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDIwRjYxMTA3RjQw
NjkwMEE4MDM5MiAvKiBKU1dlYkdMQWN0aXZlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dlYkdMQWN0aXZlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMQWN0aXZlSW5mby5oOyBwYXRoID0gY2Fu
dmFzL1dlYkdMQWN0aXZlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0Qy
N0ZDMzBFMEE1OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRIZWxwZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtl
clNjcmlwdExvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJT
Y3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4NDQsMzIgKzk4NzAsOCBAQAog
CQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyNDA1NTYzMEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxl
bWVudEluc3RhbmNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI0
MDU1NjQwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEQ3
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252
b2x2ZU1hdHJpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
RkVDb252b2x2ZU1hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5
OEUxMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUNvbnZvbHZlTWF0cml4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEUyMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpZmZ1
c2VMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
RkVEaWZmdXNlTGlnaHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1
OThFMzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEU0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURp
c3BsYWNlbWVudE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
MjU1OThFNTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFRGlzcGxhY2VtZW50TWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEU2MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RUZsb29kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRUZs
b29kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RTcwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR0ZFRmxvb2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ZFRmxvb2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4RUEwRDAw
RDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZFSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjU1OThFQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVNZXJnZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEVEMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1l
cmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRU1lcmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEVFMEQwMEQ4QjkwMEJCODI1QyAvKiBT
VkdGRU1vcnBob2xvZ3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZFTW9ycGhvbG9neS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5
OEVGMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFTW9ycGhvbG9neS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMjU1OThGMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVPZmZzZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFT2Zmc2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RjEwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ZFT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRU9mZnNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGMjBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMjU1OThGMzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RjQwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFVGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRkVUaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEY1MEQw
MEQ4QjkwMEJCODI1QyAvKiBTVkdGRVR1cmJ1bGVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVHVyYnVsZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyNTU5OEY2MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVR1cmJ1bGVuY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFVHVyYnVsZW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGOTBEMDBEOEI5MDBCQjgyNUMgLyog
U1ZHTGlnaHRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0xpZ2h0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4
RkEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0xpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjU1OThGQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHUG9pbnRMaWdodFNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnRMaWdodFNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGQzBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHU3BvdExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdTcG90TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1
NTk5MEIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNTU5OTBDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlDbGllbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTE1OSw4ICsxMTE2MSw2IEBACiAJCUU0MTVGMTgzMEQ5QTFB
ODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRWxlbWVudFRpbWVDb250cm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0MUVBMDM4MTE5ODM2REIwMDcxMEJDNSAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TmFtZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUg
LyogQ1NTVmFsdWVLZXl3b3Jkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NWYWx1ZUtleXdvcmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RTQ0MEEyRDQxMTkxQTUwQjAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUU0NDBBMkQ2MTE5MUE1MjMwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFTGlnaHRpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1IC8q
IEhUTUxBdWRpb0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTEF1ZGlvRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ0NjEzOTEwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1l
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1NjUsNiArMTQ1NjUsMzMgQEAKIAkJQTc1RThC
N0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50
TGlnaHRTb3VyY2UuaCAqLywKKwkJCQk4NDczMEQ1QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252
b2x2ZU1hdHJpeC5jcHAgKi8sCisJCQkJODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29u
dm9sdmVNYXRyaXguaCAqLywKKwkJCQk4NDczMEQ1RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZm
dXNlTGlnaHRpbmcuY3BwICovLAorCQkJCTg0NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURp
ZmZ1c2VMaWdodGluZy5oICovLAorCQkJCTg0NzMwRDVGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURp
c3BsYWNlbWVudE1hcC5jcHAgKi8sCisJCQkJODQ3MzBENjAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
RGlzcGxhY2VtZW50TWFwLmggKi8sCisJCQkJODQ3MzBENjExMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
Rmxvb2QuY3BwICovLAorCQkJCTg0NzMwRDYyMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmgg
Ki8sCisJCQkJODQ3MzBENjMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuY3BwICovLAor
CQkJCTg0NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi8sCisJCQkJODQ3
MzBENjUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuY3BwICovLAorCQkJCTg0NzMwRDY2MTI0
OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggKi8sCisJCQkJODQ3MzBENjcxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFTW9ycGhvbG9neS5jcHAgKi8sCisJCQkJODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFTW9ycGhvbG9neS5oICovLAorCQkJCTg0NzMwRDY5MTI0OEYwQjMwMEQzQTlDOSAvKiBG
RU9mZnNldC5jcHAgKi8sCisJCQkJODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0
LmggKi8sCisJCQkJODQ3MzBENkIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAgKi8sCisJCQkJODQ3MzBENkMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdo
dGluZy5oICovLAorCQkJCTg0NzMwRDZEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuY3BwICov
LAorCQkJCTg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLywKKwkJCQk4NDcz
MEQ2RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKKwkJCQk4NDczMEQ3
MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCisJCQkJODQ3MzBENzMxMjQ4
RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmNwcCAqLywKKwkJCQk4NDczMEQ3NDEyNDhGMEIz
MDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKKwkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5
QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oICovLAorCQkJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlD
OSAvKiBTcG90TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEg
LyogRkVCbGVuZC5jcHAgKi8sCiAJCQkJQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxl
bmQuaCAqLywKIAkJCQlBNzVFOEI4MjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5j
cHAgKi8sCkBAIC0xNTg1NywzOSArMTU4ODQsMTIgQEAKIAkJQjI1NTk4OUMwRDAwRDhCODAwQkI4
MjVDIC8qIGZpbHRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUIyNTU5OEQ3MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdEaXN0YW50TGlnaHRTb3VyY2Uu
aCAqLywKLQkJCQlCMjU1OThFMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252b2x2ZU1hdHJp
eC5jcHAgKi8sCi0JCQkJQjI1NTk4RTEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVN
YXRyaXguaCAqLywKLQkJCQlCMjU1OThFMjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuY3BwICovLAotCQkJCUIyNTU5OEUzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURp
ZmZ1c2VMaWdodGluZy5oICovLAotCQkJCUIyNTU5OEU0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcC5jcHAgKi8sCi0JCQkJQjI1NTk4RTUwRDAwRDhCOTAwQkI4MjVDIC8q
IFNWR0ZFRGlzcGxhY2VtZW50TWFwLmggKi8sCi0JCQkJQjI1NTk4RTYwRDAwRDhCOTAwQkI4MjVD
IC8qIFNWR0ZFRmxvb2QuY3BwICovLAotCQkJCUIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1QyAvKiBT
VkdGRUZsb29kLmggKi8sCiAJCQkJQjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1h
Z2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmgg
Ki8sCi0JCQkJRTQ0MEEyRDQxMTkxQTUwQjAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuY3BwICov
LAotCQkJCUU0NDBBMkQ2MTE5MUE1MjMwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmggKi8sCi0J
CQkJQjI1NTk4RUMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTWVyZ2UuY3BwICovLAotCQkJCUIy
NTU5OEVEMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmggKi8sCi0JCQkJQjI1NTk4RUUw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5jcHAgKi8sCi0JCQkJQjI1NTk4RUYw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTW9ycGhvbG9neS5oICovLAotCQkJCUIyNTU5OEYwMEQw
MEQ4QjkwMEJCODI1QyAvKiBTVkdGRU9mZnNldC5jcHAgKi8sCi0JCQkJQjI1NTk4RjEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmggKi8sCi0JCQkJQjI1NTk4RjIwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgKi8sCi0JCQkJQjI1NTk4RjMwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZy5oICovLAotCQkJCUE3RDI3RkMzMEUw
QTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwICovLAotCQkJCUIyNTU5OEY0MEQwMEQ4Qjkw
MEJCODI1QyAvKiBTVkdGRVRpbGUuaCAqLywKLQkJCQlCMjU1OThGNTBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHRkVUdXJidWxlbmNlLmNwcCAqLywKLQkJCQlCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHRkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5jcHAgKi8sCiAJCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oICovLAogCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLywKIAkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oICovLAotCQkJCUIyNTU5OEY5MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJj
ZS5jcHAgKi8sCi0JCQkJQjI1NTk4RkEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0xpZ2h0U291cmNl
LmggKi8sCi0JCQkJQjI1NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3Vy
Y2UuaCAqLywKLQkJCQlCMjU1OThGQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHU3BvdExpZ2h0U291
cmNlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjAxODQsNyArMjAxODQsNiBAQAogCQkJCUIyMjI3OUE4MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBRTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVmc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3OUIxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZXNjRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjI1NTk5NzEwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0Rpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5QjQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3Vt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlCNzBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDE5OSwxNCArMjAx
OTgsMTAgQEAKIAkJCQlCMjIyNzlDQjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUNFMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
Mjc5RDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjI1NTk5N0IwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRy
aXguaCBpbiBIZWFkZXJzICovLAogCQkJCTE5MjEzMjc1MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5N0QwRDAw
RDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyNzlENDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk3RjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVE
aXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUQ3MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OURBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCUIyNTU5OTgxMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUZsb29k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlERDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVG
bG9vZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUUwMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdGRUZ1bmNBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RTMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZFRnVuY0JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIw
MjE2LDIxICsyMDIxMSwxNCBAQAogCQkJCUIyNTU5OTg1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlFRjBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRkVJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUYyMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRUxpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ0MEEy
RDcxMTkxQTUyMzAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUIyNTU5OTg3MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyNzlGNDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJnZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3OUY3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OTg5MEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MjI0MTk0MTA3RTc4QTcw
MDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlC
MjU1OTk4QjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OUZBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRU9mZnNldEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3OUZEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVBvaW50TGln
aHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk4RDBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMDBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExpZ2h0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5OEUwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R0ZFVGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OTkwMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdGRVR1cmJ1bGVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMDI1OSw3ICsyMDI0Nyw2IEBACiAJCQkJQjIyMjdBMzAwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0xhbmdTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdB
MzMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBMzYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xlbmd0aExpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCUIyNTU5OTk0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjdBMzkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBM0MwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0xpbmVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EzRTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDMwMyw3ICsyMDI5MCw2IEBA
CiAJCQkJODQzMDBCRDYxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0QzVCMkZCMTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E4ODBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5
OTk1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyN0E4QzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9pbnRMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0E4RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTkxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5
Z29uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDMyNCw3ICsyMDMxMCw2IEBACiAJCQkJ
QjIyMjdBQTYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1NldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4REFCOUMzMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUZEMDEwMERBRjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlM
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5OTYwRDAwRDhCQTAwQkI4MjVDIC8q
IFNWR1Nwb3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQTkwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FB
QzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjdBQUYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N0eWxhYmxlLmggaW4gSGVhZGVycyAqLywK
QEAgLTIwNTgyLDYgKzIwNTY3LDIxIEBACiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8q
IFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZE
RjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ3
NzEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODQ3MzBEN0IxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ3RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVE
aXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDdGMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRUZsb29kLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ4MTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEODMxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDg1MTI0OEYw
QjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDg3
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBE
ODkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODQ3MzBEOEQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNw
b3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMjcyNCwxNCArMjI3MjQsMTAgQEAK
IAkJCQlCMjIyNzlDQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5Q0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUQw
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjI1NTk5N0EwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRyaXgu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTkyMTMyNzQxMUMwRTZCQjAwNDU2MjM4IC8qIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTdDMEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyNzlEMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTdFMEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlENjBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3OUQ5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5ODAwRDAwRDhCQTAwQkI4MjVDIC8q
IFNWR0ZFRmxvb2QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5REMwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZFRmxvb2RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OURG
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyNzlFMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVGdW5jQkVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yMjc0MSwyMSArMjI3MzcsMTQgQEAKIAkJCQlCMjU1OTk4NDBEMDBE
OEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlF
RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjc5RjEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTGlnaHRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUU0NDBBMkQ1MTE5MUE1MEIwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0
aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTg2MEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdGRU1lcmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUYzMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdGRU1lcmdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlGNjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUIyNTU5OTg4MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODQyMjQxOTMxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEEwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR0ZFT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUY5MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRU9mZnNldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5RkMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlGRjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyN0EwMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMDUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
VGlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI1NTk5OEYwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR0ZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0EwODBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA4MUVCRjNBMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjI3ODQsNyArMjI3NzMsNiBAQAogCQkJCUIyMjI3QTJG
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMYW5nU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBMzIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xlbmd0aC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyN0EzNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTGVuZ3RoTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlCMjU1OTk5MzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMzgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0EzQjBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHTGluZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBNDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xvY2F0YWJsZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTIzMDYxLDYgKzIzMDQ5LDE4IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8q
IFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENG
NkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODQ3MzBENzgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEN0ExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxp
Z2h0aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0NzMwRDdDMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDczMEQ3RTEyNDhG
MEIzMDBEM0E5QzkgLyogRkVGbG9vZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDczMEQ4MDEy
NDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDcz
MEQ4MjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4
NDczMEQ4NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTg0NzMwRDg2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4NDczMEQ4ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5n
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0NzMwRDhBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEOEMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
VHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5
QzkgLyogTGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCShy
ZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0
YW50TGlnaHRTb3VyY2UuaDo2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3Vp
bmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0Rpc3RhbnRMaWdodFNv
dXJjZV9oCisjZGVmaW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpc3RhbnRMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdo
dFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzdGFudExpZ2h0U291
cmNlPiBjcmVhdGUoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0aW9uKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aCwgZWxldmF0
aW9uKSk7CisgICAgfQorCisgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXpp
bXV0aDsgfQorICAgIGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxldmF0aW9u
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgeik7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIERpc3RhbnRM
aWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCisgICAgICAgIDogTGln
aHRTb3VyY2UoTFNfRElTVEFOVCkKKyAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkKKyAgICAg
ICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCisgICAgeworICAgIH0KKworICAgIGZsb2F0IG1f
YXppbXV0aDsKKyAgICBmbG9hdCBtX2VsZXZhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5k
aWYgLy8gU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgJKHJldmlzaW9u
IDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdo
dFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTEgQEAKICAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRGlzdGFudExpZ2h0U291cmNl
X2gKLSNkZWZpbmUgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKKyNpZm5kZWYgRGlzdGFudExpZ2h0
U291cmNlX2gKKyNkZWZpbmUgRGlzdGFudExpZ2h0U291cmNlX2gKIAotI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaWYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01Nyw2ICs1Nyw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8v
IEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKKyNl
bmRpZiAvLyBEaXN0YW50TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24g
Njc5NDkpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1h
dHJpeC5jcHA6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3pl
Z0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisKKyNpbmNs
dWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVDb252b2x2ZU1hdHJpeDo6
RkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAorICAgIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSwKKyAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBi
b29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAg
ICA6IEZpbHRlckVmZmVjdCgpCisgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKKyAgICAs
IG1fZGl2aXNvcihkaXZpc29yKQorICAgICwgbV9iaWFzKGJpYXMpCisgICAgLCBtX3RhcmdldE9m
ZnNldCh0YXJnZXRPZmZzZXQpCisgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQorICAgICwgbV9r
ZXJuZWxVbml0TGVuZ3RoKGtlcm5lbFVuaXRMZW5ndGgpCisgICAgLCBtX3ByZXNlcnZlQWxwaGEo
cHJlc2VydmVBbHBoYSkKKyAgICAsIG1fa2VybmVsTWF0cml4KGtlcm5lbE1hdHJpeCkKK3sKK30K
KworUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKKyAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCisg
ICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdl
dE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgICAgIHByZXNlcnZlQWxw
aGEsIGtlcm5lbE1hdHJpeCkpOworfQorCisKK0ludFNpemUgRkVDb252b2x2ZU1hdHJpeDo6a2Vy
bmVsU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsU2l6ZTsKK30KKwordm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKEludFNpemUga2VybmVsU2l6ZSkKK3sKKyAg
ICBtX2tlcm5lbFNpemUgPSBrZXJuZWxTaXplOyAKK30KKworY29uc3QgVmVjdG9yPGZsb2F0PiYg
RkVDb252b2x2ZU1hdHJpeDo6a2VybmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxN
YXRyaXg7IAorfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbChjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBrZXJuZWwpCit7CisgICAgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IAorfQor
CitmbG9hdCBGRUNvbnZvbHZlTWF0cml4OjpkaXZpc29yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kaXZpc29yOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0
IGRpdmlzb3IpCit7CisgICAgbV9kaXZpc29yID0gZGl2aXNvcjsgCit9CisKK2Zsb2F0IEZFQ29u
dm9sdmVNYXRyaXg6OmJpYXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpYXM7IAorfQorCit2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMoZmxvYXQgYmlhcykKK3sKKyAgICBtX2JpYXMg
PSBiaWFzOyAKK30KKworSW50UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6dGFyZ2V0T2Zmc2V0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQ7IAorfQorCit2b2lkIEZFQ29udm9s
dmVNYXRyaXg6OnNldFRhcmdldE9mZnNldChJbnRQb2ludCB0YXJnZXRPZmZzZXQpCit7CisgICAg
bV90YXJnZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7IAorfQorCitFZGdlTW9kZVR5cGUgRkVDb252
b2x2ZU1hdHJpeDo6ZWRnZU1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2VkZ2VNb2RlOyAK
K30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCit7CisgICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyAKK30KKworRmxvYXRQb2ludCBG
RUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9rZXJuZWxVbml0TGVuZ3RoOyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJu
ZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQga2VybmVsVW5pdExlbmd0aCkKK3sKKyAgICBtX2tlcm5l
bFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyAKK30KKworYm9vbCBGRUNvbnZvbHZlTWF0
cml4OjpwcmVzZXJ2ZUFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVzZXJ2ZUFscGhh
OyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJl
c2VydmVBbHBoYSkKK3sKKyAgICBtX3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyAKK30K
KworLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKKworICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKKyAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8CisgICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KyAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKworCisgICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcworICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgorCisgICBFeGFtcGxlOgorICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCisKKyAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKKyAgICAgIFRhcmdldDogeDoxLCB5OjMKKworICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6CisKKyAg
ICAgICAgLi4uCisgICAgICAgIC4uLgorICAgICAgICAuLi4KKyAgICAgICAgLlguCisKKyAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKKyAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgor
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgorICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgorCisgICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCisgICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCisg
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCisgICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAorICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCisKKyAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAorICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCisgICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCisgICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgorICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcworICAgZnVuY3Rpb24uCisKKyAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKKyAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCisgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgor
Ki8KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK3sKKyAgICBpZiAoY2hhbm5l
bCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCisgICAg
ICAgIHJldHVybiBtYXg7CisgICAgcmV0dXJuIGNoYW5uZWw7Cit9CisKK3RlbXBsYXRlPGJvb2wg
cHJlc2VydmVBbHBoYVZhbHVlcz4KK0FMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBp
eGVscyhDYW52YXNQaXhlbEFycmF5KiBpbWFnZSwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgQ2FudmFzUGl4ZWxBcnJheSogc3JjKQoreworICAg
IHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xh
bXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpbWFnZS0+c2V0KHBpeGVsKyssIGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworCisgICAgaWYgKHBy
ZXNlcnZlQWxwaGFWYWx1ZXMpIHsKKyAgICAgICAgaW1hZ2UtPnNldChwaXhlbCwgc3JjLT5nZXQo
cGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVsc2UKKyAgICAgICAgaW1hZ2UtPnNl
dChwaXhlbCsrLCBtYXhBbHBoYSk7Cit9CisKKy8vIE9ubHkgZm9yIHJlZ2lvbiBDCit0ZW1wbGF0
ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CitBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSkKK3sKKyAgICAvLyBlZGdlIG1vZGUgZG9l
cyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscworICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNl
dC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKKyAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbCA9IDA7CisgICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xp
cFJpZ2h0ICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0g
MSkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAg
ICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKworICAg
IC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5z
dXJlcyB0aGlzCisgICAgQVNTRVJUKG1fZGl2aXNvcik7CisKKyAgICBmb3IgKGludCB5ID0gY2xp
cEJvdHRvbSArIDE7IHkgPiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdo
dCArIDE7IHggPiAwOyAtLXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1fa2Vy
bmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFy
dEtlcm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRo
KCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMV0g
PSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIGlmICghcHJlc2Vy
dmVBbHBoYVZhbHVlcykKKyAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAgICAg
ICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIHRvdGFsc1sw
XSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAg
ICAgICAgdG90YWxzWzFdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKysp
KTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQo
a2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVl
cykKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IG1fa2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+
Z2V0KGtlcm5lbFBpeGVsKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKKyAgICAg
ICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkg
eworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKKyAg
ICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4
ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhl
bCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSk7CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAg
IH0KKyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVs
ICs9IHhJbmNyZWFzZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVN
YXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBp
bnQgeSkKK3sKKyAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeCA+
PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICByZXR1cm4gKHkgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworCisgICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Cisg
ICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2Fz
ZSBFREdFTU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHgg
PSAwOworICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAg
ICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisgICAg
ICAgICAgICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0
KQorICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1
cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVf
V1JBUDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGluZ0Rh
dGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3aGls
ZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAg
IHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdE
YXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRo
YW4gQwordGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgordm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwor
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBtX3RhcmdldE9mZnNldC54KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5L
ZXJuZWxQaXhlbFg7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9m
ZnNldC55KCk7CisgICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0
aCkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAg
ICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKworICAg
IC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5z
dXJlcyB0aGlzCisgICAgQVNTRVJUKG1fZGl2aXNvcik7CisKKyAgICBmb3IgKGludCB5ID0gaGVp
Z2h0OyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0t
eCkgeworICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gbV9rZXJuZWxNYXRyaXguc2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsK
KyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsKKyAgICAg
ICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAgICAgICB0
b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAgICAgIHRv
dGFsc1syXSA9IDA7CisgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAg
ICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZh
bHVlID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFs
dWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7CisgICAgICAgICAg
ICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICB0b3RhbHNb
MF0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMV0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCAr
IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS0+Z2V0KHBpeGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCisgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1szXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbElu
ZGV4ICsgMykpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOworICAgICAgICAgICAg
ICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAg
ICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgg
PSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+
KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBh
aW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7CisgICAgICAgICAg
ICArK3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJbmNy
ZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAg
ICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pCit7CisgICAgLy8gTXVzdCBi
ZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5F
CisgICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUg
YXMgd2VsbAorICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIGZhc3RTZXRJbnRlcmlv
clBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7CisgICAg
ZWxzZQorICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBjbGlwQm90dG9tKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9s
dmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisgICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5j
dGlvbiBjYW4gYmUgbW92ZWQgdG8gdGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQor
ICAgIC8vIGJlY2F1c2Ugc2V0SW50ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJl
CisgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKKyAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRy
dWU+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGVsc2UKKyAgICAgICAgZmFz
dFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKK30K
Kwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7
CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFlZmZlY3RDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBz
cmNQaXhlbEFycmF5OworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIHNyY1BpeGVs
QXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVj
dERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9
IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdp
bmdSZWN0KS0+ZGF0YSgpOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisK
KyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGltYWdl
UmVjdC53aWR0aCgpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBpbWFnZVJlY3QuaGVpZ2h0
KCk7CisgICAgcGFpbnRpbmdEYXRhLmJpYXMgPSBtX2JpYXMgKiAyNTU7CisKKyAgICAvLyBEcmF3
aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCisgICAgaW50IGNsaXBSaWdodCA9IGltYWdlUmVjdC53
aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgaW50IGNsaXBCb3R0b20gPSBpbWFn
ZVJlY3QuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7CisKKyAgICBpZiAoY2xpcFJp
Z2h0ID49IDAgJiYgY2xpcEJvdHRvbSA+PSAwKSB7CisgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tKTsKKworICAgICAgICBjbGlwUmln
aHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsKKyAgICAgICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOworICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkK
KyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0
LndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CisgICAgICAgIGlmIChjbGlwQm90dG9tIDwg
aW1hZ2VSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdE
YXRhLCAwLCBjbGlwQm90dG9tLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCisgICAgICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRP
ZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKKyAgICAgICAgaWYgKGNsaXBSaWdodCA8IGltYWdlUmVj
dC53aWR0aCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlw
UmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGNsaXBCb3R0b20p
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemll
ZCBmb3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBp
bWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpZiAo
bV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIGVs
c2UKKyAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBFREdFTU9ERV9VTktOT1dOOgorICAgICAgICB0cyA8PCAiVU5LTk9X
TiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgorICAgICAg
ICB0cyA8PCAiRFVQTElDQVRFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFREdFTU9ERV9X
UkFQOgorICAgICAgICB0cyA8PCAiV1JBUCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRURH
RU1PREVfTk9ORToKKyAgICAgICAgdHMgPDwgIk5PTkUiOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAorewor
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVDb252b2x2ZU1hdHJp
eCI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0
cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwgIlwiICIKKyAgICAgICA8PCAia2Vy
bmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwgIlwiICIKKyAgICAgICA8PCAiZGl2
aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCisgICAgICAgPDwgImJpYXM9XCIiIDw8IG1f
YmlhcyA8PCAiXCIgIgorICAgICAgIDw8ICJ0YXJnZXQ9XCIiIDw8IG1fdGFyZ2V0T2Zmc2V0IDw8
ICJcIiAiCisgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2RlIDw8ICJcIiAiCisg
ICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aCA8PCAi
XCIgIgorICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNlcnZlQWxwaGEgPDwg
IlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLSNpbmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisjaWYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiQ2FudmFzUGl4
ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtNDY4LDQgKzQ2OCw0IEBAIFRleHRT
dHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmUKIAogfTsgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCShyZXZpc2lvbiA2Nzk0OSkJKGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4Lmg6Njc5NDkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBTVkdGRUNvbnZvbHZlTWF0cml4X2gKKyNkZWZpbmUgU1ZHRkVDb252b2x2ZU1hdHJp
eF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVk
Z2VNb2RlVHlwZSB7CisgICAgRURHRU1PREVfVU5LTk9XTiAgID0gMCwKKyAgICBFREdFTU9ERV9E
VVBMSUNBVEUgPSAxLAorICAgIEVER0VNT0RFX1dSQVAgICAgICA9IDIsCisgICAgRURHRU1PREVf
Tk9ORSAgICAgID0gMworfTsKKworY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKKworY2xhc3MgRkVD
b252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwKKyAg
ICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmLAorICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYp
OworCisgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxT
aXplKEludFNpemUpOworCisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgZmxvYXQg
ZGl2aXNvcigpIGNvbnN0OworICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCk7CisKKyAgICBmbG9h
dCBiaWFzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCaWFzKGZsb2F0KTsKKworICAgIEludFBvaW50
IHRhcmdldE9mZnNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50
KTsKKworICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RWRn
ZU1vZGUoRWRnZU1vZGVUeXBlKTsKKworICAgIEZsb2F0UG9pbnQga2VybmVsVW5pdExlbmd0aCgp
IGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KTsKKworICAg
IGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0OworICAgIHZvaWQgc2V0UHJlc2VydmVBbHBoYShi
b29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBG
RUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCisgICAgICAgICAg
ICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2ws
IGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAg
ICAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5OworICAgICAgICBDYW52YXNQaXhl
bEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBo
ZWlnaHQ7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgfTsKKworICAgIHRlbXBsYXRlPGJvb2wg
cHJlc2VydmVBbHBoYVZhbHVlcz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVy
aW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKTsK
KworICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5KTsKKworICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KKyAg
ICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwg
aW50IHgyLCBpbnQgeTIpOworCisgICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkx
LCBpbnQgeDIsIGludCB5Mik7CisKKyAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKKyAgICBmbG9h
dCBtX2Rpdmlzb3I7CisgICAgZmxvYXQgbV9iaWFzOworICAgIEludFBvaW50IG1fdGFyZ2V0T2Zm
c2V0OworICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOworICAgIEZsb2F0UG9pbnQgbV9rZXJu
ZWxVbml0TGVuZ3RoOworICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOworICAgIFZlY3RvcjxmbG9h
dD4gbV9rZXJuZWxNYXRyaXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFQ29u
dm9sdmVNYXRyaXhfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDEwICsyMCwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBTVkdGRUNvbnZvbHZlTWF0cml4X2gKLSNkZWZpbmUgU1ZHRkVDb252b2x2
ZU1hdHJpeF9oCisjaWZuZGVmIEZFQ29udm9sdmVNYXRyaXhfaAorI2RlZmluZSBGRUNvbnZvbHZl
TWF0cml4X2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lmIEVOQUJM
RShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKQEAgLTExMyw2ICsxMTMsNiBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNW
R0ZFQ29udm9sdmVNYXRyaXhfaAorI2VuZGlmIC8vIEZFQ29udm9sdmVNYXRyaXhfaApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHA6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVE
aWZmdXNlTGlnaHRpbmcuaCIKKworI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCisgICAgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQorICAgIDogRkVM
aWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IGxpZ2h0U291cmNlKQoreworfQorCitQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURp
ZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAorICAgIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1c2VM
aWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOworfQorCitG
RURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkKK3sKK30KKworQ29sb3IgRkVE
aWZmdXNlTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2xp
Z2h0aW5nQ29sb3I7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29s
b3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCit7CisgICAgbV9saWdodGluZ0NvbG9yID0g
bGlnaHRpbmdDb2xvcjsKK30KKworZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6OnN1cmZhY2VTY2Fs
ZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3N1cmZhY2VTY2FsZTsKK30KKwordm9pZCBGRURp
ZmZ1c2VMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sKKyAg
ICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKK30KKworZmxvYXQgRkVEaWZmdXNlTGln
aHRpbmc6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlmZnVzZUNv
bnN0YW50OworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQgZGlmZnVzZUNvbnN0YW50KQoreworICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVz
ZUNvbnN0YW50OworfQorCitmbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExlbmd0
aFgoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOworfQorCit2b2lk
IEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKK3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7
Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Cit9CisKK3ZvaWQgRkVEaWZmdXNl
TGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQor
eworICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKK30KKworY29u
c3QgTGlnaHRTb3VyY2UqIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodFNvdXJjZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Cit9CisKK3ZvaWQgRkVEaWZmdXNlTGln
aHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KQoreyAgICAKKyAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7Cit9CisKK3ZvaWQgRkVE
aWZmdXNlTGlnaHRpbmc6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdo
dGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlRGlm
ZnVzZUxpZ2h0aW5nIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOworICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAi
XCIgIgorICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50
IDw8ICJcIiAiCisgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5p
dExlbmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7CisgICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwor
ICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAJKHJldmlz
aW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEwIEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2lu
Y2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5j
bHVkZSAiRkVEaWZmdXNlTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgi
CisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0x
MjMsNCArMTIzLDQgQEAgVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCShy
ZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURp
ZmZ1c2VMaWdodGluZy5oOjY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVEaWZmdXNlTGlnaHRpbmdfaAorI2RlZmlu
ZSBTVkdGRURpZmZ1c2VMaWdodGluZ19oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTGlnaHRTb3VyY2U7CisKK2NsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGlj
IEZFTGlnaHRpbmcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVzZUxp
Z2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgICAgIGZsb2F0
LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworICAgIHZpcnR1YWwgfkZFRGlmZnVz
ZUxpZ2h0aW5nKCk7CisKKyAgICBDb2xvciBsaWdodGluZ0NvbG9yKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisKKyAgICBmbG9hdCBzdXJmYWNlU2Nh
bGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisKKyAgICBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldERpZmZ1c2VDb25zdGFudChm
bG9hdCk7CisKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OworICAgIHZvaWQg
c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOworCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKKworICAg
IGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0TGln
aHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworCisgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVEaWZm
dXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFz
c1JlZlB0cjxMaWdodFNvdXJjZT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdG
RURpZmZ1c2VMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaWZmdXNlTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5NDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKLSNkZWZpbmUgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdfaAorI2lmbmRlZiBGRURpZmZ1c2VMaWdodGluZ19oCisjZGVmaW5l
IEZFRGlmZnVzZUxpZ2h0aW5nX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNs
dWRlICJGRUxpZ2h0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsNiArNjMs
NiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAot
I2VuZGlmIC8vIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRURpZmZ1c2VMaWdo
dGluZ19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDo2Nzk0OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNs
dWRlICJTVkdGRURpc3BsYWNlbWVudE1hcC5oIgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJh
eS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFRGlzcGxh
Y2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2Nh
bGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFu
bmVsU2VsZWN0b3IpCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikK
KyAgICAsIG1fc2NhbGUoc2NhbGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRN
YXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5l
bFNlbGVjdG9yLAorICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQgc2NhbGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpc3BsYWNlbWVudE1hcCh4
Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOworfQorCitDaGFubmVs
U2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOworfQorCit2b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeENo
YW5uZWxTZWxlY3RvcikKK3sKKyAgICBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNlbGVj
dG9yOworfQorCitDaGFubmVsU2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp5Q2hhbm5l
bFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yOworfQor
Cit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5u
ZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikKK3sKKyAgICBtX3lDaGFubmVsU2VsZWN0
b3IgPSB5Q2hhbm5lbFNlbGVjdG9yOworfQorCitmbG9hdCBGRURpc3BsYWNlbWVudE1hcDo6c2Nh
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlOworfQorCit2b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3NjYWxlID0gc2NhbGU7Cit9
CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZpbHRlciogZmlsdGVyKQoreworICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGluMi0+YXBw
bHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdElt
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0g
Q0hBTk5FTF9VTktOT1dOIHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwor
ICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1h
Z2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRh
KCkpOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0SW1hZ2VEYXRhKGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Cisg
ICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKGluMi0+cmVzdWx0SW1h
Z2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEo
KSk7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5z
aXplKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworCisgICAgQVNTRVJU
KHNyY1BpeGVsQXJyYXlBLT5sZW5ndGgoKSA9PSBzcmNQaXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwor
CisgICAgZmxvYXQgc2NhbGVYID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkud2lkdGgoKTsKKyAgICBmbG9hdCBzY2FsZVkgPSBtX3NjYWxlIC8gMjU1LmYgKiBm
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKTsKKyAgICBmbG9hdCBzY2FsZUFkanVz
dG1lbnRYID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKS53aWR0aCgpOworICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFkgPSAoMC41ZiAtIDAuNWYg
KiBtX3NjYWxlKSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOworICAgIGlu
dCBzdHJpZGUgPSBpbWFnZVJlY3Qud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBpbWFnZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJp
ZGU7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkg
eworICAgICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZSArIHggKiA0OworICAgICAgICAgICAg
aW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVggKiBzcmNQaXhlbEFycmF5Qi0+
Z2V0KGRzdEluZGV4ICsgbV94Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1lbnRY
KTsKKyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVZICog
c3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feUNoYW5uZWxTZWxlY3RvciAtIDEpICsg
c2NhbGVBZGp1c3RtZW50WSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAw
OyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gaW1hZ2VSZWN0LndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBpbWFn
ZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5z
ZXQoZHN0SW5kZXggKyBjaGFubmVsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
cGl4ZWxWYWx1ZSA9IHNyY1BpeGVsQXJyYXlBLT5nZXQoc3JjWSAqIHN0cmlkZSArIHNyY1ggKiA0
ICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQo
ZHN0SW5kZXggKyBjaGFubmVsLCBwaXhlbFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgp
KTsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ0hBTk5FTF9V
TktOT1dOOgorICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0hBTk5FTF9SOgorICAgICAgICB0cyA8PCAiUkVEIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDSEFOTkVMX0c6CisgICAgICAgIHRzIDw8ICJHUkVFTiI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ0hBTk5FTF9COgorICAgICAgICB0cyA8PCAiQkxVRSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0hBTk5FTF9BOgorICAgICAgICB0cyA8PCAiQUxQSEEiOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRURpc3BsYWNl
bWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2Zl
RGlzcGxhY2VtZW50TWFwIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUgPDwgIlwiICIKKyAgICAg
ICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIiAi
CisgICAgICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNoYW5uZWxTZWxlY3RvciA8
PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwLmgiCisjaWYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAogI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTE2OCw0ICsxNjgs
NCBAQCBUZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHJldmlzaW9uIDY3
OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50
TWFwLmg6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBTVkdGRURpc3BsYWNlbWVudE1hcF9oCisjZGVmaW5lIFNWR0ZFRGlz
cGxhY2VtZW50TWFwX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5j
bHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHsKKyAgICBDSEFOTkVMX1VOS05PV04gPSAwLAorICAgIENIQU5ORUxfUiA9IDEs
CisgICAgQ0hBTk5FTF9HID0gMiwKKyAgICBDSEFOTkVMX0IgPSAzLAorICAgIENIQU5ORUxfQSA9
IDQKK307CisKK2NsYXNzIEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0
ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4
Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNv
bnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0
IENoYW5uZWxTZWxlY3RvclR5cGUpOworCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKKyAgICB2
b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQpOworCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7Cisg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CisgICAgZmxvYXQgbV9z
Y2FsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVEaXNwbGFjZW1lbnRNYXBf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmgJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBTVkdGRURpc3BsYWNlbWVudE1hcF9oCi0jZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFw
X2gKKyNpZm5kZWYgRkVEaXNwbGFjZW1lbnRNYXBfaAorI2RlZmluZSBGRURpc3BsYWNlbWVudE1h
cF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklM
VEVSUykKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFRGlz
cGxhY2VtZW50TWFwX2gKKyNlbmRpZiAvLyBGRURpc3BsYWNlbWVudE1hcF9oCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA2
Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcDo2
Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVk
ZSAiU1ZHRkVGbG9vZC5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVGbG9vZDo6RkVGbG9vZChj
b25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmlsdGVy
RWZmZWN0KCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9vZE9w
YWNpdHkoZmxvb2RPcGFjaXR5KQoreworfQorCitQYXNzUmVmUHRyPEZFRmxvb2Q+IEZFRmxvb2Q6
OmNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkp
KTsKK30KKworQ29sb3IgRkVGbG9vZDo6Zmxvb2RDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZmxvb2RDb2xvcjsKK30KKwordm9pZCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK3sKKyAgICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKK30KKworZmxvYXQgRkVG
bG9vZDo6Zmxvb2RPcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mbG9vZE9wYWNpdHk7
Cit9CisKK3ZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K3sKKyAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsKK30KKwordm9pZCBGRUZsb29k
OjphcHBseShGaWx0ZXIqKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9
IGVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9y
KCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnNp
emUoKSksIGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKK30KKwordm9pZCBGRUZsb29kOjpkdW1w
KCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlRmxvb2QiOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwgZmxv
b2RDb2xvcigpLm5hbWUoKSA8PCAiXCIgIgorICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8
PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4iOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRUZsb29kLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVGbG9v
ZC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CkBAIC04OCw0ICs4OCw0IEBAIFRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50
YXQKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHJldmlzaW9uIDY3OTQ5KQko
ZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaDo2Nzk0OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVGbG9v
ZF9oCisjZGVmaW5lIFNWR0ZFRmxvb2RfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUZsb29k
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQpOworCisgICAgQ29sb3IgZmxvb2RD
b2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsKKwor
ICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5
KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBGRUZsb29kKGNvbnN0IENvbG9yJiwgZmxvYXQpOworCisgICAgQ29sb3IgbV9mbG9vZENvbG9y
OworICAgIGZsb2F0IG1fZmxvb2RPcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAv
LyBTVkdGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVGbG9vZF9o
Ci0jZGVmaW5lIFNWR0ZFRmxvb2RfaAorI2lmbmRlZiBGRUZsb29kX2gKKyNkZWZpbmUgRkVGbG9v
ZF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklM
VEVSUykKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgpAQCAtNTMsNiArNTMsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFRmxvb2RfaAorI2Vu
ZGlmIC8vIEZFRmxvb2RfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5NDkpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6Njc5NDkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5Lmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlw
ZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3Vy
Y2UpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdU
eXBlKQorICAgICwgbV9saWdodFNvdXJjZShsaWdodFNvdXJjZSkKKyAgICAsIG1fbGlnaHRpbmdD
b2xvcihsaWdodGluZ0NvbG9yKQorICAgICwgbV9zdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKQor
ICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQorICAgICwgbV9zcGVjdWxh
ckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQpCisgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQoc3Bl
Y3VsYXJFeHBvbmVudCkKKyAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2VybmVsVW5pdExlbmd0
aFgpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5ndGhZKQoreworfQor
Citjb25zdCBzdGF0aWMgaW50IGNQaXhlbFNpemUgPSA0OworY29uc3Qgc3RhdGljIGludCBjQWxw
aGFDaGFubmVsT2Zmc2V0ID0gMzsKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNPcGFxdWVB
bHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ZmYpOworCitBTFdBWVNfSU5MSU5F
IGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwTGVmdFBpeGVsVmFsdWUoKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30K
KworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFBpeGVsVmFs
dWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAt
IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQor
CitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwUmlnaHRQaXhl
bFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6bGVmdFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9
CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Y2VudGVyUGl4
ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0UGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpkb3duTGVmdFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duUGl4ZWxWYWx1ZSgpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1ZSgpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiBk
YXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsCisgICAgaW50IGxp
Z2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5vcm1hbFgsIGZsb2F0IGZhY3Rv
clksIGludCBub3JtYWxZKQoreworICAgIG1fbGlnaHRTb3VyY2UtPnVwZGF0ZVBhaW50aW5nRGF0
YShwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YS5w
aXhlbHMtPmdldChkYXRhLm9mZnNldCArIDMpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKworICAg
IGRhdGEubm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3Jt
YWxYKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKyAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRZKGZh
Y3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7
CisgICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WigxLjBmKTsKKyAgICBkYXRhLm5vcm1hbFZlY3Rv
ci5ub3JtYWxpemUoKTsKKworICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpE
aWZmdXNlTGlnaHRpbmcpCisgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNv
bnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVj
dG9yLnooKSArIDEuMGYpOworICAgICAgICBoYWxmd2F5VmVjdG9yLm5vcm1hbGl6ZSgpOworICAg
ICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisgICAgICAgICAgICBkYXRhLmxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAoZGF0YS5ub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5saWdodFN0cmVu
Z3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihkYXRhLm5vcm1hbFZlY3RvciAqIGhhbGZ3
YXlWZWN0b3IsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKGRhdGEubGln
aHRTdHJlbmd0aCA+IDEuMGYpCisgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IDEuMGY7Cisg
ICAgaWYgKGRhdGEubGlnaHRTdHJlbmd0aCA8IDAuMGYpCisgICAgICAgIGRhdGEubGlnaHRTdHJl
bmd0aCA9IDAuMGY7CisKKyAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3IueCgpKSk7CisgICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDEsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0
YS5jb2xvclZlY3Rvci55KCkpKTsKKyAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0ICsg
Miwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRp
bmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOworfQorCitib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KyAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBMaWdodGlu
Z0RhdGEgZGF0YTsKKworICAgIGlmICghbV9saWdodFNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9y
IGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRo
aXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlmICh3aWR0aCA8PSAy
IHx8IGhlaWdodCA8PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhLnBpeGVs
cyA9IHBpeGVsczsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1
LjBmOworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhl
bFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOworICAgIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOworICAgIHBhaW50aW5nRGF0YS5j
b2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChtX2xpZ2h0aW5nQ29sb3IucmVkKCksIG1fbGlnaHRp
bmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3IuYmx1ZSgpKTsKKyAgICBtX2xpZ2h0U291
cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7CisKKyAgICAvLyBUb3AvTGVmdCBj
b3JuZXIKKyAgICBkYXRhLm9mZnNldCA9IDA7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCAwLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQaXhlbFZh
bHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFsdWUo
KSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC0y
ICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpICsgMiAq
IGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKwor
ICAgIC8vIFRvcC9SaWdodCBwaXhlbAorICAgIGRhdGEub2Zmc2V0ID0gZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRp
bmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsCisgICAgICAgIC0yLjBmIC8gMy4w
ZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVl
KCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxWYWx1ZSgpLAor
ICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLmxlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5j
ZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEu
ZG93blBpeGVsVmFsdWUoKSk7CisKKyAgICAvLyBCb3R0b20vTGVmdCBwaXhlbAorICAgIGRhdGEu
b2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLnVwUGl4ZWxW
YWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgIC0yLjBmIC8gMy4w
ZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsg
MiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7CisK
KyAgICAvLyBCb3R0b20vUmlnaHQgcGl4ZWwKKyAgICBkYXRhLm9mZnNldCA9IGhlaWdodCAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVs
KGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVs
VmFsdWUoKSArIGRhdGEudXBQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC1k
YXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS5s
ZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpKTsKKworICAgIGlm
ICh3aWR0aCA+PSAzKSB7CisgICAgICAgIC8vIFRvcCBsaW5lCisgICAgICAgIGRhdGEub2Zmc2V0
ID0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAg
ICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLAorICAgICAgICAgICAgICAgIC0x
LjBmIC8gMy4wZiwgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBp
eGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBp
eGVsVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLmxlZnRQaXhl
bFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZh
bHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQm90dG9tIGxpbmUKKyAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNldFBpeGVsKGRhdGEs
IHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKKyAgICAgICAgICAg
ICAgICAtMS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdo
dFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVm
dFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4
ZWxWYWx1ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxW
YWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoaGVpZ2h0ID49IDMpIHsKKyAgICAgICAgLy8gTGVmdCBsaW5lCisgICAgICAgIGRhdGEu
b2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRhdGEub2Zmc2V0
ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNldFBp
eGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwKKyAgICAgICAgICAgICAgICAtMS4wZiAvIDIu
MGYsIC1kYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAq
IGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBk
YXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEu
dXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRv
d25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmlnaHQgbGluZQor
ICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9y
IChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRhdGEub2Zm
c2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LAor
ICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsg
ZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRv
d25QaXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51cExl
ZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7CisgICAgICAgIC8vIElu
dGVyaW9yIHBpeGVscworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmU7ICsreSkgeworICAgICAgICAgICAgZGF0YS5vZmZzZXQgPSB5ICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRp
bmdEYXRhLCB4LCB5LAorICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQuMGYsIC1kYXRhLnVw
TGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxl
ZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxl
ZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0
YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxl
ZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmln
aHRQaXhlbFZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aW50IHRvdGFsU2l6ZSA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7
CisgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykgeworICAgICAgICBm
b3IgKGludCBpID0gMzsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KQorICAgICAgICAgICAgZGF0YS5w
aXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdG90YWxTaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYTEgPSBkYXRhLnBpeGVscy0+Z2V0KGkpOworICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBhMiA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDEpOworICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBhMyA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDIpOworICAgICAgICAgICAgLy8gYWxwaGEgc2V0
IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKKyAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQo
aSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6
IGEzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBG
RUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+
cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZmZlY3RDb250ZXh0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisKKyAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPElt
YWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKKyAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQ
aXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0
IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRo
YXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5k
IG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8gb3V0cHV0
IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFy
ZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28g
dXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgaWYgKGRyYXdMaWdodGluZyhzcmNQaXhlbEFy
cmF5LCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpLCBlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQo
KSkpCisgICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShzcmNJ
bWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgp
KSwgSW50UG9pbnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5NDkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5n
LmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCiAjaW5j
bHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yNjcsNCArMjY3LDQgQEAgdm9pZCBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXIqIGZpbHRlcikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmgJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTGlnaHRpbmcuaDo2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU1ZHRkVMaWdodGluZ19oCisjZGVm
aW5lIFNWR0ZFTGlnaHRpbmdfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9B
bHdheXNJbmxpbmUuaD4KKworLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0
aW5nIGFuZCBGRVNwZWN1bGFyTGlnaHRpbmcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDYW52YXNQaXhlbEFycmF5OworCitjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworCitwcm90
ZWN0ZWQ6CisgICAgZW51bSBMaWdodGluZ1R5cGUgeworICAgICAgICBEaWZmdXNlTGlnaHRpbmcs
CisgICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKKyAgICB9OworCisgICAgc3RydWN0IExpZ2h0aW5n
RGF0YSB7CisgICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgICAgICAgIENhbnZh
c1BpeGVsQXJyYXkqIHBpeGVsczsKKyAgICAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICBpbnQg
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5
T25lOworICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7CisKKyAgICAgICAgQUxXQVlT
X0lOTElORSBpbnQgdXBMZWZ0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGlu
dCB1cFBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBSaWdodFBpeGVs
VmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgbGVmdFBpeGVsVmFsdWUoKTsKKyAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQgY2VudGVyUGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdB
WVNfSU5MSU5FIGludCByaWdodFBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQgZG93bkxlZnRQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25Q
aXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25SaWdodFBpeGVsVmFs
dWUoKTsKKyAgICB9OworCisgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9y
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxM
aWdodFNvdXJjZT4pOworCisgICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSos
IGludCwgaW50KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRh
JiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCisgICAgICAgIGludCBsaWdodFgsIGludCBs
aWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9y
bWFsWSk7CisKKyAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7CisgICAgUmVmUHRyPExp
Z2h0U291cmNlPiBtX2xpZ2h0U291cmNlOworCisgICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOwor
ICAgIGZsb2F0IG1fc3VyZmFjZVNjYWxlOworICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50Owor
ICAgIGZsb2F0IG1fc3BlY3VsYXJDb25zdGFudDsKKyAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25l
bnQ7CisgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBmbG9hdCBtX2tlcm5lbFVu
aXRMZW5ndGhZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRUxpZ2h0aW5nX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgU1ZHRkVMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFTGln
aHRpbmdfaAorI2lmbmRlZiBGRUxpZ2h0aW5nX2gKKyNkZWZpbmUgRkVMaWdodGluZ19oCiAKLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRTb3Vy
Y2UuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKIC8vIENvbW1vbiBiYXNlIGNs
YXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCkBAIC05MSw2
ICs5MSw2IEBAIHByb3RlY3RlZDoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCiAKLSNlbmRpZiAvLyBTVkdGRUxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRUxpZ2h0aW5nX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJ
KHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TWVyZ2UuY3BwOjY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJTVkdGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRU1l
cmdlOjpGRU1lcmdlKCkgCisgICAgOiBGaWx0ZXJFZmZlY3QoKQoreworfQorCitQYXNzUmVmUHRy
PEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
RU1lcmdlKTsKK30KKwordm9pZCBGRU1lcmdlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAg
ICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBBU1NFUlQoc2l6
ZSA+IDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOworICAgICAgICBpbi0+YXBwbHko
ZmlsdGVyKTsKKyAgICAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZl
Y3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7
CisgICAgfQorfQorCit2b2lkIEZFTWVyZ2U6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBG
RU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50
KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVN
ZXJnZSI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAg
ICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBBU1NFUlQoc2l6
ZSA+IDApOworICAgIHRzIDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4iOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGlucHV0RWZm
ZWN0KGkpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDgg
KzIxLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorI2lmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkZFTWVyZ2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNzksNCArNzksNCBAQCBUZXh0U3RyZWFtJiBGRU1lcmdl
OjpleHRlcm5hbFJlcHJlc2VudGF0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5o
CShyZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU1lcmdlLmg6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFNWR0ZFTWVyZ2VfaAorI2RlZmluZSBTVkdGRU1lcmdlX2gKKworI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZp
cnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50
IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVNZXJnZSgpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRU1lcmdlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNp
Zm5kZWYgU1ZHRkVNZXJnZV9oCi0jZGVmaW5lIFNWR0ZFTWVyZ2VfaAorI2lmbmRlZiBGRU1lcmdl
X2gKKyNkZWZpbmUgRU1lcmdlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ0LDYgKzQ0LDYgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRp
ZiAvLyBTVkdGRU1lcmdlX2gKKyNlbmRpZiAvLyBGRU1lcmdlX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lv
biA2Nzk0OSkJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xv
Z3kuY3BwOjY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJTVkdGRU1vcnBob2xvZ3kuaCIKKworI2luY2x1ZGUgIkNhbnZhc1Bp
eGVsQXJyYXkuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgc3RkOjptaW47Cit1c2luZyBzdGQ6
Om1heDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9n
eShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3Jh
ZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQoreworfQorCitQYXNzUmVm
UHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5KHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKK30KKwor
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBGRU1vcnBob2xvZ3k6Om1vcnBob2xvZ3lPcGVyYXRvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OnNl
dE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCit7CisgICAg
bV90eXBlID0gdHlwZTsKK30KKworZmxvYXQgRkVNb3JwaG9sb2d5OjpyYWRpdXNYKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yYWRpdXNYOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFk
aXVzWChmbG9hdCByYWRpdXNYKQoreworICAgIG1fcmFkaXVzWCA9IHJhZGl1c1g7Cit9CisKK2Zs
b2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmFkaXVz
WTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkKK3sK
KyAgICBtX3JhZGl1c1kgPSByYWRpdXNZOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIGlu
dCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50PihtX3JhZGl1c1ggKiBmaWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpKTsKKyAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4o
bV9yYWRpdXNZICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworICAgIGlm
IChyYWRpdXNYIDw9IDAgfHwgcmFkaXVzWSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOworICAg
IEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2Fu
dmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRo
KCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpICogNDsKKyAgICAKKyAgICAvLyBMaW1pdCB0aGUgcmFkaXVzIHNp
emUgdG8gZWZmZWN0IGRpbWVuc2lvbnMKKyAgICByYWRpdXNYID0gbWluKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgLSAxLCByYWRpdXNYKTsKKyAgICByYWRpdXNZID0gbWluKGVmZmVjdERyYXdp
bmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzWSk7CisgICAgCisgICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+IGV4dHJlbWE7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3REcmF3aW5nUmVj
dC5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGludCBzdGFydFkgPSBtYXgoMCwgeSAtIHJhZGl1
c1kpOworICAgICAgICBpbnQgZW5kWSA9IG1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAt
IDEsIHkgKyByYWRpdXNZKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsCisg
ICAgICAgICAgICBleHRyZW1hLmNsZWFyKCk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8PSByYWRpdXNYOyArK2opIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbHVt
bkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3RhcnRZICogZWZmZWN0V2lkdGggKyA0ICog
aiArIGNoYW5uZWwpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydFk7IGkgPD0g
ZW5kWTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWwgPSBz
cmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdpZHRoICsgNCAqIGogKyBjaGFubmVsKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgJiYgcGl4ZWwgPj0gY29s
dW1uRXh0cmVtYSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5FeHRyZW1hID0gcGl4
ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNv
bHVtbkV4dHJlbWEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbiAKKyAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsgKyt4KSB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kWCA9IG1pbih4ICsgcmFkaXVzWCwgZWZmZWN0
RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
Y29sdW1uRXh0cmVtYSA9IHNyY1BpeGVsQXJyYXktPmdldChzdGFydFkgKiBlZmZlY3RXaWR0aCAr
IGVuZFggKiA0ICsgY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0
WTsgaSA8PSBlbmRZOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBw
aXhlbCA9IHNyY1BpeGVsQXJyYXktPmdldChpICogZWZmZWN0V2lkdGggKyBlbmRYICogNCArIGNo
YW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUgJiYgcGl4ZWwgPD0gY29sdW1uRXh0cmVtYSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBw
aXhlbCA+PSBjb2x1bW5FeHRyZW1hKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkV4
dHJlbWEgPSBwaXhlbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHgg
LSByYWRpdXNYID49IDApCisgICAgICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwor
ICAgICAgICAgICAgICAgIGlmICh4ICsgcmFkaXVzWCA8PSBlZmZlY3REcmF3aW5nUmVjdC53aWR0
aCgpKQorICAgICAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW1hKTsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVudGlyZUV4dHJlbWEgPSBleHRyZW1hWzBd
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQga2VybmVsSW5kZXggPSAwOyBrZXJuZWxJ
bmRleCA8IGV4dHJlbWEuc2l6ZSgpOyArK2tlcm5lbEluZGV4KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAmJiBleHRyZW1h
W2tlcm5lbEluZGV4XSA8PSBlbnRpcmVFeHRyZW1hKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIGV4dHJlbWFba2Vy
bmVsSW5kZXhdID49IGVudGlyZUV4dHJlbWEpKQorICAgICAgICAgICAgICAgICAgICAgICAgZW50
aXJlRXh0cmVtYSA9IGV4dHJlbWFba2VybmVsSW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KHkgKiBlZmZlY3RXaWR0aCArIDQg
KiB4ICsgY2hhbm5lbCwgZW50aXJlRXh0cmVtYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVNb3JwaG9s
b2d5OjpkdW1wKCkKK3sKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKKyAg
ICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERToKKyAgICAgICAgdHMgPDwgIkVST0RFIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOgorICAgICAgICB0cyA8
PCAiRElMQVRFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKwor
VGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQp
OworICAgIHRzIDw8ICJbZmVNb3JwaG9sb2d5IjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xv
Z3lPcGVyYXRvcigpIDw8ICJcIiAiCisgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgp
IDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7ICAgIAorICAgIGlucHV0RWZmZWN0KDAp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisjaWYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKICNpbmNsdWRlICJD
YW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC0xODUsNCArMTg1LDQg
QEAgVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlcwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
KyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oOjY3OTQ5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZF
TW9ycGhvbG9neV9oCisjZGVmaW5lIFNWR0ZFTW9ycGhvbG9neV9oCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgeworICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKKyAgICBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgPSAxLAorICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9ESUxBVEUgPSAyCit9OworCitjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IGNyZWF0
ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsg
IAorICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7
CisKKyAgICBmbG9hdCByYWRpdXNYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSYWRpdXNYKGZsb2F0
KTsKKworICAgIGZsb2F0IHJhZGl1c1koKSBjb25zdDsKKyAgICB2b2lkIHNldFJhZGl1c1koZmxv
YXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZF
TW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKKyAgICAKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKKyAgICBm
bG9hdCBtX3JhZGl1c1g7CisgICAgZmxvYXQgbV9yYWRpdXNZOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisK
KyNlbmRpZiAvLyBTVkdGRU1vcnBob2xvZ3lfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAkocmV2aXNpb24gNjc5NDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTVkdGRU1vcnBob2xvZ3lfaAotI2RlZmluZSBTVkdGRU1vcnBob2xv
Z3lfaAorI2lmbmRlZiBGRU1vcnBob2xvZ3lfaAorI2RlZmluZSBGRU1vcnBob2xvZ3lfaAogCi0j
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTYxLDYg
KzYxLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMp
CiAKLSNlbmRpZiAvLyBTVkdGRU1vcnBob2xvZ3lfaAorI2VuZGlmIC8vIEZFTW9ycGhvbG9neV9o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5j
cHAJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFT2Zmc2V0LmNwcDo2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVj
dCgpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShkeSkKK3sKK30KKworUGFzc1JlZlB0cjxG
RU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGRU9mZnNldChkeCwgZHkpKTsKK30KKworZmxvYXQgRkVPZmZzZXQ6
OmR4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keDsKK30KKwordm9pZCBGRU9mZnNldDo6c2V0
RHgoZmxvYXQgZHgpCit7CisgICAgbV9keCA9IGR4OworfQorCitmbG9hdCBGRU9mZnNldDo6ZHko
KSBjb25zdAoreworICAgIHJldHVybiBtX2R5OworfQorCit2b2lkIEZFT2Zmc2V0OjpzZXREeShm
bG9hdCBkeSkKK3sKKyAgICBtX2R5ID0gZHk7Cit9CisKK3ZvaWQgRkVPZmZzZXQ6OmFwcGx5KEZp
bHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
KyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZl
Y3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIEZsb2F0UmVj
dCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOworICAgIHNvdXJj
ZUltYWdlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0
ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CisKKyAgICBpZiAoZmlsdGVyLT5lZmZl
Y3RCb3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBtX2R4ICo9IHNvdXJjZUltYWdlUmVjdC53
aWR0aCgpOworICAgICAgICBtX2R5ICo9IHNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKTsKKyAgICB9
CisgICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOworICAgIG1f
ZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CisKKyAgICBGbG9hdFJl
Y3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkueCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9keSArIGluLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0KCkpOworCisgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBkc3RSZWN0KTsKK30KKwordm9pZCBGRU9mZnNldDo6ZHVtcCgpCit7Cit9CisK
K1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwor
ICAgIHRzIDw8ICJbZmVPZmZzZXQiOyAKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwiIGR5PVwiIiA8
PCBkeSgpIDw8ICJcIl1cbiI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAJ
KHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRl
ICJTVkdGRU9mZnNldC5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFT2Zmc2V0
LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
QEAgLTEwOSw0ICsxMDksNCBAQCBUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNl
bnRhCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHJldmlzaW9uIDY3OTQ5
KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6Njc5NDkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdG
RU9mZnNldF9oCisjZGVmaW5lIFNWR0ZFT2Zmc2V0X2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVPZmZzZXQ+IGNy
ZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOworCisgICAgZmxvYXQgZHgoKSBjb25zdDsKKyAgICB2
b2lkIHNldER4KGZsb2F0KTsKKworICAgIGZsb2F0IGR5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRE
eShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVh
bCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKKworICAgIGZsb2F0IG1fZHg7CisgICAg
ZmxvYXQgbV9keTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVPZmZzZXRfaApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHJl
dmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRU9mZnNldF9oCi0jZGVmaW5lIFNW
R0ZFT2Zmc2V0X2gKKyNpZm5kZWYgRkVPZmZzZXRfaAorI2RlZmluZSBGRU9mZnNldF9oCiAKLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKIApAQCAtNTIsNiAr
NTIsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykK
IAotI2VuZGlmIC8vIFNWR0ZFT2Zmc2V0X2gKKyNlbmRpZiAvLyBGRU9mZnNldF9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5NDkpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDo2Nzk0OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0
aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCisgICAg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8
TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0
aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNw
ZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGln
aHRTb3VyY2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKKyAgICBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2Nh
bGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsCisgICAgICAgIGtlcm5lbFVu
aXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKK30KKworRkVTcGVj
dWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkKK3sKK30KKworQ29sb3IgRkVTcGVj
dWxhckxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saWdo
dGluZ0NvbG9yOworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xv
cihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKK3sKKyAgICBtX2xpZ2h0aW5nQ29sb3IgPSBs
aWdodGluZ0NvbG9yOworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6OnN1cmZhY2VTY2Fs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOworfQorCit2b2lkIEZFU3Bl
Y3VsYXJMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sKKyAg
ICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKK30KKworZmxvYXQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckNvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcGVjdWxh
ckNvbnN0YW50OworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQoreworICAgIG1fc3BlY3VsYXJDb25zdGFudCA9
IHNwZWN1bGFyQ29uc3RhbnQ7Cit9CisKK2Zsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3Vs
YXJFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsKK30K
Kwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCkKK3sKKyAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9u
ZW50OworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKK30KKwordm9pZCBGRVNw
ZWN1bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYKQoreworICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKK30K
KworZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKK3sK
KyAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5pdExlbmd0aFk7Cit9CisKK2NvbnN0
IExpZ2h0U291cmNlKiBGRVNwZWN1bGFyTGlnaHRpbmc6OmxpZ2h0U291cmNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsKK30KKwordm9pZCBGRVNwZWN1bGFyTGln
aHRpbmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KQoreworICAgIG1fbGlnaHRTb3VyY2UgPSBsaWdodFNvdXJjZTsKK30KKwordm9pZCBGRVNwZWN1
bGFyTGlnaHRpbmc6OmR1bXAoKQoreworfQorCitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRp
bmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZVNwZWN1
bGFyTGlnaHRpbmciOworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7CisgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJc
IiAiCisgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50
IDw8ICJcIiAiCisgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJF
eHBvbmVudCA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEwICsyMSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmcu
aCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIK
IAotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzUsNCArMTM1LDQgQEAgVGV4dFN0cmVhbSYg
RkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFC
TEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oOjY3OTQ5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCisjZGVmaW5lIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z19oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdG
RUxpZ2h0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVTcGVjdWxhckxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0
LAorICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7
CisgICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisKKyAgICBDb2xvciBsaWdodGlu
Z0NvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7
CisKKyAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1cmZhY2VT
Y2FsZShmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKKworICAgIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworCisg
ICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAgICB2b2lkIHNldEtlcm5lbFVu
aXRMZW5ndGhYKGZsb2F0KTsKKworICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CisKKyAgICBjb25zdCBMaWdo
dFNvdXJjZSogbGlnaHRTb3VyY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldExpZ2h0U291cmNlKFBh
c3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAg
ICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYs
IGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdodGlu
Zyhjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1Jl
ZlB0cjxMaWdodFNvdXJjZT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAkocmV2aXNpb24gNjc5NDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAotI2RlZmluZSBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdfaAorI2lmbmRlZiBGRVNwZWN1bGFyTGlnaHRpbmdfaAorI2Rl
ZmluZSBGRVNwZWN1bGFyTGlnaHRpbmdfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKQor
I2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NCw2
ICs2NCw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJT
KQogCi0jZW5kaWYgLy8gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKKyNlbmRpZiAvLyBGRVNwZWN1
bGFyTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFVGlsZS5jcHA6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJTVkdGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRVRpbGU6
OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQoreworfQorCitQYXNzUmVmUHRyPEZFVGls
ZT4gRkVUaWxlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUaWxlKTsK
K30KKworRmxvYXRSZWN0IEZFVGlsZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KEZpbHRlciogZmlsdGVyKQoreworICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKworICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkpOworICAgIHJl
dHVybiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKK30KKwordm9pZCBGRVRpbGU6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBl
ZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIEludFJl
Y3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKworICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4g
SXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorICAgIC8v
IHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhl
IHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KKyAgICBpZiAoaW4tPmlzU291cmNlSW5w
dXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKTsKKyAgICAgICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKKyAg
ICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgfQor
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRpbGVSZWN0LnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0
ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsK
KyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2Ut
PmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7
CisgICAgbWF0cml4LnRyYW5zbGF0ZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSwKKyAgICAgICAgICAg
ICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsKKyAgICBwYXR0ZXJuLmdldCgpLT5zZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIGZpbHRlckNvbnRleHQtPnNldEZp
bGxQYXR0ZXJuKHBhdHRlcm4pOworICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgpKSk7
Cit9CisKK3ZvaWQgRkVUaWxlOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVUaWxlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAor
eworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVUaWxlIjsKKyAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICJd
XG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRl
bnQgKyAxKTsKKworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiA2Nzk0
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgor
I2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFVGlsZS5oIgogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC0xMDIsNSArMTAyLDUgQEAg
VGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaAkocmV2aXNpb24gNjc5NDkpCShmcm9tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmg6Njc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVUaWxlX2gKKyNkZWZpbmUgU1ZHRkVUaWxl
X2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24pIGNvbnN0OworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKEZpbHRlciopOworICAgIAorcHJpdmF0ZToKKyAgICBGRVRpbGUoKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgJKHJldmlzaW9uIDY3OTQ5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LSNpZm5kZWYgU1ZHRkVUaWxlX2gKLSNkZWZpbmUgU1ZHRkVUaWxlX2gKKyNpZm5kZWYgRkVUaWxl
X2gKKyNkZWZpbmUgRkVUaWxlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgogCkBAIC00NSw2ICs0NSw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQor
I2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHRkVUaWxlX2gKKyNlbmRp
ZiAvLyBGRVRpbGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHA6Njc5NDkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdG
RVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK0ZF
VHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNl
ZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgICwgbV90eXBl
KHR5cGUpCisgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQorICAgICwgbV9i
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKKyAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3Rh
dmVzKQorICAgICwgbV9zZWVkKHNlZWQpCisgICAgLCBtX3N0aXRjaFRpbGVzKHN0aXRjaFRpbGVz
KQoreworfQorCitQYXNzUmVmUHRyPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
VHVyYnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVx
dWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5
WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cit9CisK
K1R1cmJ1bGFuY2VUeXBlIEZFVHVyYnVsZW5jZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdHlwZTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsYW5jZVR5cGUg
dHlwZSkKK3sKKyAgICBtX3R5cGUgPSB0eXBlOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6OmJh
c2VGcmVxdWVuY3lZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WTsKK30K
Kwordm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVu
Y3lZKQoreworICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKK30KKworZmxv
YXQgRkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YmFzZUZyZXF1ZW5jeVg7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKK3sKKyAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFz
ZUZyZXF1ZW5jeVg7Cit9CisKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6c2VlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VlZDsgCit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0
IHNlZWQpCit7CisgICAgbV9zZWVkID0gc2VlZDsKK30KKworaW50IEZFVHVyYnVsZW5jZTo6bnVt
T2N0YXZlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVtT2N0YXZlczsKK30KKwordm9pZCBG
RVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMoYm9vbCBudW1PY3RhdmVzKQoreworICAgIG1fbnVt
T2N0YXZlcyA9IG51bU9jdGF2ZXM7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RpdGNoVGlsZXM7Cit9CisKK3ZvaWQgRkVUdXJi
dWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKK3sKKyAgICBtX3N0aXRjaFRpbGVz
ID0gc3RpdGNoOworfQorCisvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFu
IGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNh
dGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2UKKworRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YShsb25nIHBh
aW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKQorICAgIDogc2VlZChwYWlu
dGluZ1NlZWQpCisgICAgLCB3aWR0aCgwKQorICAgICwgaGVpZ2h0KDApCisgICAgLCB3cmFwWCgw
KQorICAgICwgd3JhcFkoMCkKKyAgICAsIGNoYW5uZWwoMCkKKyAgICAsIGZpbHRlclNpemUocGFp
bnRpbmdTaXplKQoreworfQorCisvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgoraW5s
aW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCit7CisgICAgbG9u
ZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAq
IChzZWVkIC8gc19yYW5kUSk7CisgICAgaWYgKHJlc3VsdCA8PSAwKQorICAgICAgICByZXN1bHQg
Kz0gc19yYW5kTWF4aW11bTsKKyAgICBzZWVkID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQoreworICAgIHJldHVybiB0
ICogdCAqICgzIC0gMiAqIHQpOworfQorCitpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlv
bihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhICsgdCAqIChiIC0g
YSk7Cit9CisKK2lubGluZSB2b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKQoreworICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7CisKKyAg
ICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0g
LSAxXS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAx
OworICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQorICAgICAg
ICBwYWludGluZ0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOworCisgICAgZmxvYXQqIGdy
YWRpZW50OworICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVs
KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgeworICAg
ICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7CisgICAgICAgICAg
ICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKKyAgICAgICAg
ICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAg
ICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEu
cmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6
ZTsKKyAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzcXJ0ZihncmFkaWVudFswXSAq
IGdyYWRpZW50WzBdICsgZ3JhZGllbnRbMV0gKiBncmFkaWVudFsxXSk7CisgICAgICAgICAgICBn
cmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAgICAgICAgZ3JhZGllbnRb
MV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGlu
dCBpID0gc19ibG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGludCBrID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgaW50IGogPSBwYWludGluZ0Rh
dGEucmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgQVNTRVJUKGogPj0gMCk7CisgICAg
ICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7CisgICAgICAgIHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwor
ICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKKyAgICB9CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5l
bCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2No
YW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19i
bG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsK
KyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIHZvaWQgY2hlY2tOb2lzZShpbnQmIG5vaXNl
VmFsdWUsIGludCBsaW1pdFZhbHVlLCBpbnQgbmV3VmFsdWUpCit7CisgICAgaWYgKG5vaXNlVmFs
dWUgPj0gbGltaXRWYWx1ZSkKKyAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZTsKKyAgICBp
ZiAobm9pc2VWYWx1ZSA+PSBsaW1pdFZhbHVlIC0gMSkKKyAgICAgICAgbm9pc2VWYWx1ZSAtPSBu
ZXdWYWx1ZSAtIDE7Cit9CisKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCit7CisgICAg
c3RydWN0IE5vaXNlIHsKKyAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Cisg
ICAgICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlOworCisgICAgICAgIE5vaXNl
KGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24g
PSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgbm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOworICAgICAgICAgICAgbm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSBwb3NpdGlvbiAtIG5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgTm9pc2Ugbm9pc2VYKG5vaXNlVmVjdG9y
LngoKSk7CisgICAgTm9pc2Ugbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisgICAgZmxvYXQqIHE7
CisgICAgZmxvYXQgc3gsIHN5LCBhLCBiLCB1LCB2OworCisgICAgLy8gSWYgc3RpdGNoaW5nLCBh
ZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCisgICAgaWYgKG1fc3RpdGNoVGlsZXMp
IHsKKyAgICAgICAgY2hlY2tOb2lzZShub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSwg
cGFpbnRpbmdEYXRhLndyYXBYLCBwYWludGluZ0RhdGEud2lkdGgpOworICAgICAgICBjaGVja05v
aXNlKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlLCBwYWludGluZ0RhdGEud3JhcFks
IHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIH0KKworICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50
ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsK
KyAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
KG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107CisK
KyAgICBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7
CisgICAgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUp
OworCisgICAgLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCisgICAgaW50
IHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAqIHFbMV07CisgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4
dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBx
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAg
ICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CisgICAgYSA9IGxpbmVhcklu
dGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsg
MV07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1b
dGVtcF07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0g
KyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOworICAgIHRl
bXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lz
ZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOworICAgIHEgPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHYgPSAobm9pc2VYLm5v
aXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0
aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKKyAgICBiID0gbGluZWFySW50ZXJwb2xhdGlv
bihzeCwgdSwgdik7CisgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwor
fQorCit1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQoreworICAgIGZsb2F0IHRpbGVXaWR0aCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLndp
ZHRoKCk7CisgICAgQVNTRVJUKHRpbGVXaWR0aCA+IDApOworICAgIGZsb2F0IHRpbGVIZWlnaHQg
PSBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKTsKKyAgICBBU1NFUlQodGlsZUhlaWdo
dCA+IDApOworICAgIC8vIEFkanVzdCB0aGUgYmFzZSBmcmVxdWVuY2llcyBpZiBuZWNlc3Nhcnkg
Zm9yIHN0aXRjaGluZy4KKyAgICBpZiAobV9zdGl0Y2hUaWxlcykgeworICAgICAgICAvLyBXaGVu
IHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1
c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51
b3VzLgorICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCkgeworICAgICAgICAgICAgZmxvYXQg
bG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0
aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgLy8gQmFzZUZy
ZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQu
CisgICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hG
cmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9iYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1fYmFzZUZyZXF1ZW5jeVkpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZs
b29yZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAg
ICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVx
dWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WSAv
IGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lZKQorICAgICAg
ICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gU2V0IHVwIFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2YWx1
ZXMuCisgICAgICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBtX2Jh
c2VGcmVxdWVuY3lYKTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lz
ZSArIHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSk7CisgICAgICAgIHBhaW50aW5nRGF0
YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgIH0KKyAg
ICBmbG9hdCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAwOworICAgIEZsb2F0UG9pbnQgbm9p
c2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNl
RnJlcXVlbmN5WSk7CisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9
IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCisgICAgICAgICAgICB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAv
IHJhdGlvOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKz0gZmFic2Yobm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsK
KyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAg
bm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0g
MjsKKyAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBz
dGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11
bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1w
bGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBwYWludGluZ0RhdGEu
d2lkdGggKj0gMjsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWCA9IDIgKiBwYWludGlu
Z0RhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmhl
aWdodCAqPSAyOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBZID0gMiAqIHBhaW50aW5n
RGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAg
Ly8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisg
ICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCisgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAu
NWYgKyAwLjVmOworICAgIC8vIENsYW1wIHJlc3VsdAorICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCA9IHN0ZDo6bWF4KHN0ZDo6bWluKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMS5mKSwg
MC5mKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQoreworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXpl
KCkpOworICAgIGlmICghaW1hZ2VSZWN0LnNpemUoKS53aWR0aCgpIHx8ICFpbWFnZVJlY3Quc2l6
ZSgpLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0
LmhlaWdodCgpKTsKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgaW1hZ2VS
ZWN0LnNpemUoKSk7CisgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CisKKyAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKKyAgICBGbG9hdFBvaW50
IHBvaW50OworICAgIHBvaW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7CisgICAgaW50IGluZGV4
T2ZQaXhlbENoYW5uZWwgPSAwOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0Lmhl
aWdodCgpOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKKyAgICAg
ICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICBwb2ludC5zZXRYKHBv
aW50LngoKSArIDEpOworICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7
IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRl
eE9mUGl4ZWxDaGFubmVsKQorICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQo
aW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFp
bnRpbmdEYXRhLCBwb2ludCkpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdEltYWdlKCkt
PnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50
UG9pbnQoKSk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKK3sKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFR1cmJ1bGFuY2VU
eXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRkVUVVJCVUxFTkNF
X1RZUEVfVU5LTk9XTjoKKyAgICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0U6CisgICAgICAgIHRzIDw8ICJU
VVJCVUxBTkNFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9G
UkFDVEFMTk9JU0U6CisgICAgICAgIHRzIDw8ICJOT0lTRSI7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlVHVyYnVsZW5jZSI7Cisg
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAi
IHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgorICAgICAgIDw8ICJiYXNlRnJlcXVlbmN5PVwi
IiA8PCBiYXNlRnJlcXVlbmN5WCgpIDw8ICIsICIgPDwgYmFzZUZyZXF1ZW5jeVkoKSA8PCAiXCIg
IgorICAgICAgIDw8ICJzZWVkPVwiIiA8PCBzZWVkKCkgPDwgIlwiICIKKyAgICAgICA8PCAibnVt
T2N0YXZlcz1cIiIgPDwgbnVtT2N0YXZlcygpIDw8ICJcIiAiCisgICAgICAgPDwgInN0aXRjaFRp
bGVzPVwiIiA8PCBzdGl0Y2hUaWxlcygpIDw8ICJcIl1cbiI7CisgICAgcmV0dXJuIHRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVHVyYnVsZW5jZS5oIgorI2lmIEVOQUJM
RShGSUxURVJTKQorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiQ2FudmFz
UGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtMzgzLDQgKzM4Myw0IEBAIFRl
eHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXMKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5k
aWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaDo2Nzk0OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFVHVy
YnVsZW5jZV9oCisjZGVmaW5lIFNWR0ZFVHVyYnVsZW5jZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFR1cmJ1bGFuY2VUeXBlIHsK
KyAgICBGRVRVUkJVTEVOQ0VfVFlQRV9VTktOT1dOID0gMCwKKyAgICBGRVRVUkJVTEVOQ0VfVFlQ
RV9GUkFDVEFMTk9JU0UgPSAxLAorICAgIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0UgPSAy
Cit9OworCitjbGFzcyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxhbmNl
VHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKworICAgIFR1cmJ1bGFuY2VU
eXBlIHR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGUoVHVyYnVsYW5jZVR5cGUpOworCisg
ICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkoKSBjb25zdDsKKyAgICB2b2lkIHNldEJhc2VGcmVxdWVu
Y3lZKGZsb2F0KTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7CisKKyAgICBmbG9hdCBzZWVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTZWVkKGZsb2F0KTsKKworICAgIGludCBudW1PY3RhdmVzKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXROdW1PY3RhdmVzKGJvb2wpOworCisgICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNv
bnN0OworICAgIHZvaWQgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVu
dGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6
ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUg
LSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIGxvbmcgc2VlZDsKKyAg
ICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKKyAgICAgICAg
ZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07CisgICAgICAgIGludCB3
aWR0aDsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAg
ICAgICBpbnQgaGVpZ2h0OworICAgICAgICBpbnQgd3JhcFg7IC8vIE1pbmltdW0gdmFsdWUgdG8g
d3JhcC4KKyAgICAgICAgaW50IHdyYXBZOworICAgICAgICBpbnQgY2hhbm5lbDsKKyAgICAgICAg
SW50U2l6ZSBmaWx0ZXJTaXplOworCisgICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5n
U2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKKyAgICAgICAgaW5saW5lIGxvbmcg
cmFuZG9tKCk7CisgICAgfTsKKworICAgIEZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlwZSwgZmxv
YXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKworICAgIGlubGluZSB2b2lkIGluaXRQYWlu
dChQYWludGluZ0RhdGEmKTsKKyAgICBmbG9hdCBub2lzZTJEKFBhaW50aW5nRGF0YSYsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1
ZUZvclBvaW50KFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIFR1cmJ1
bGFuY2VUeXBlIG1fdHlwZTsKKyAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOworICAgIGZsb2F0
IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgaW50IG1fbnVtT2N0YXZlczsKKyAgICBmbG9hdCBtX3Nl
ZWQ7CisgICAgYm9vbCBtX3N0aXRjaFRpbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAv
LyBTVkdGRVR1cmJ1bGVuY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEwICsyMSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTVkdGRVR1cmJ1bGVuY2VfaAotI2RlZmluZSBTVkdGRVR1cmJ1bGVuY2VfaAorI2lm
bmRlZiBGRVR1cmJ1bGVuY2VfaAorI2RlZmluZSBGRVR1cmJ1bGVuY2VfaAogCi0jaWYgRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTk4LDYgKzk4LDYgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRp
ZiAvLyBTVkdGRVR1cmJ1bGVuY2VfaAorI2VuZGlmIC8vIEZFVHVyYnVsZW5jZV9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xp
Z2h0U291cmNlLmNwcDo2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9MaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCisjaW5jbHVk
ZSAiU1ZHRGlzdGFudExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaWdodFNvdXJj
ZS5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJTVkdTcG90
TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWlu
dGluZ0RhdGEmKQoreworfQorCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KQor
eworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7
CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5KTsK
KyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHopOwor
ICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5ub3JtYWxpemUoKTsKK30KKworLy8gc3BvdC1s
aWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xkCisvLyBh
Y2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cworc3RhdGlj
IGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOworCit2b2lkIFNwb3RMaWdo
dFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sK
KyAgICBwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yID0gcGFpbnRpbmdEYXRhLmNvbG9y
VmVjdG9yOworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WChtX2RpcmVjdGlv
bi54KCkgLSBtX3Bvc2l0aW9uLngoKSk7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5zZXRZKG1fZGlyZWN0aW9uLnkoKSAtIG1fcG9zaXRpb24ueSgpKTsKKyAgICBwYWludGluZ0Rh
dGEuZGlyZWN0aW9uVmVjdG9yLnNldFoobV9kaXJlY3Rpb24ueigpIC0gbV9wb3NpdGlvbi56KCkp
OworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7CisKKyAgICBp
ZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRP
ZmZMaW1pdCA9IDAuMGY7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFu
dGlBbGlhc1RyZXNob2xkOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGxpbWl0aW5nQ29u
ZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKKyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFu
Z2xlIDwgMC4wZikKKyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29u
ZUFuZ2xlOworICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKKyAgICAgICAg
ICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb25l
Q3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsK
KyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1
dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7CisgICAgfQorCisgICAgLy8gT3B0aW1pemF0
aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKKyAgICBpZiAoIW1fc3BlY3Vs
YXJFeHBvbmVudCkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwor
ICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQorICAgICAgICBwYWludGlu
Z0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7CisgICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAu
MGYgbm9yIDEuMGYKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOwor
fQorCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopCit7CisgICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKKyAgICBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOworICAgIHBhaW50aW5nRGF0
YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7CisgICAgcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOworCisgICAgZmxvYXQgY29zaW5lT2ZBbmdsZSA9IHBh
aW50aW5nRGF0YS5saWdodFZlY3RvciAqIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3I7Cisg
ICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0KSB7Cisg
ICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1Y2VkLCBzY2FubGluZXMgYXJlIG5vdCB1cGRhdGVk
CisgICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRYKDAuMGYpOworICAgICAgICBw
YWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WSgwLjBmKTsKKyAgICAgICAgcGFpbnRpbmdEYXRh
LmNvbG9yVmVjdG9yLnNldFooMC4wZik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAorICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Cisg
ICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkgeworICAgIGNhc2UgMDoK
KyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAx
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IC1j
b3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBvd2Yo
LWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQp
CisgICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnRp
bmdEYXRhLmNvbmVGdWxsTGlnaHQpOworCisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQor
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKKworICAgIHBhaW50aW5nRGF0YS5jb2xvclZl
Y3Rvci5zZXRYKHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueCgpICogbGlnaHRTdHJl
bmd0aCk7CisgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFkocGFpbnRpbmdEYXRhLnBy
aXZhdGVDb2xvclZlY3Rvci55KCkgKiBsaWdodFN0cmVuZ3RoKTsKKyAgICBwYWludGluZ0RhdGEu
Y29sb3JWZWN0b3Iuc2V0WihwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnooKSAqIGxp
Z2h0U3RyZW5ndGgpOworfQorCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBhemltdXRoID0g
ZGVnMnJhZChtX2F6aW11dGgpOworICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2
YXRpb24pOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRYKGNvc2YoYXppbXV0aCkg
KiBjb3NmKGVsZXZhdGlvbikpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKHNp
bmYoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci5zZXRaKHNpbmYoZWxldmF0aW9uKSk7Cit9CisKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNl
Ojp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQsIGZsb2F0KQorewor
fQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmxvYXRQb2ludDNEJiBwKQoreworICAgIHRzIDw8ICJ4PSIgPDwgcC54KCkgPDwgIiB5PSIgPDwg
cC55KCkgPDwgIiB6PSIgPDwgcC56KCk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFt
JiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
KSBjb25zdAoreworICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAi
W3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsKK30K
KworVGV4dFN0cmVhbSYgU3BvdExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICJbdHlwZT1TUE9ULUxJR0hUXSAiOwor
ICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0aW9uKCkgPDwgIlwiXSI7CisgICAgdHMg
PDwgIltkaXJlY3Rpb249XCIiIDw8IGRpcmVjdGlvbigpIDw8ICJcIl0iOworICAgIHRzIDw8ICJb
c3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgc3BlY3VsYXJFeHBvbmVudCgpIDw8ICJcIl0iOworICAg
IHRzIDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8IGxpbWl0aW5nQ29uZUFuZ2xlKCkgPDwg
IlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBEaXN0YW50TGlnaHRTb3Vy
Y2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAg
dHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7CisgICAgdHMgPDwgIlthemltdXRoPVwiIiA8
PCBhemltdXRoKCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8IGVsZXZh
dGlvbigpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xp
Z2h0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTMgKzIyLDEzIEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2lu
Y2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
TGlnaHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgotI2lu
Y2x1ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNU
ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiRGlzdGFu
dExpZ2h0U291cmNlLmgiCisjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNjYsNCAr
MTY2LDQgQEAgVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlOjpleHRlcm5hbAogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2Nzk0OSkJKGZy
b20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oOjY3OTQ5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4
IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTVkdMaWdodFNvdXJjZV9oCisjZGVmaW5lIFNWR0xpZ2h0U291cmNlX2gKKwor
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIExpZ2h0VHlwZSB7CisgICAgTFNf
RElTVEFOVCwKKyAgICBMU19QT0lOVCwKKyAgICBMU19TUE9UCit9OworCitjbGFzcyBUZXh0U3Ry
ZWFtOworCitjbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291cmNl
PiB7CitwdWJsaWM6CisKKyAgICAvLyBMaWdodCB2ZWN0b3JzIG11c3QgYmUgY2FsY3VsYXRlZCBm
b3IgZXZlcnkgcGl4ZWwgZHVyaW5nCisgICAgLy8gcGFpbnRpbmcuIEl0IGlzIGV4cGVuc2l2ZSB0
byBwYXNzIGFsbCB0aGVzZSBhcmd1bWVudHMgdG8KKyAgICAvLyBhIGZyZXF1ZW50bHkgY2FsbGVk
IGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGJlY2F1c2Ugbm90IGFsbAorICAgIC8vIGxpZ2h0IHNvdXJj
ZXMgcmVxdWlyZSBhbGwgb2YgdGhlbS4gSW5zdGVhZCwgd2UganVzdCBwYXNzCisgICAgLy8gYSBy
ZWZlcmVuY2UgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3QgUGFpbnRpbmdE
YXRhIHsKKyAgICAgICAgLy8gU1ZHRkVMaWdodGluZyBhbHNvIHVzZSB0aGVtCisgICAgICAgIEZs
b2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAgICAgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVjdG9y
OworICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMKKyAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVj
dGlvblZlY3RvcjsKKyAgICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsKKyAg
ICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OworICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0
OworICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKKyAgICB9OworCisgICAgTGlnaHRTb3Vy
Y2UoTGlnaHRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeyB9CisKKyAg
ICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpIHsgfQorCisgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpID0gMDsKKyAgICAvLyB6IGlzIGEgZmxvYXQg
bnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgorICAg
IC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8bnVt
YmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopID0gMDsKKworcHJpdmF0
ZToKKyAgICBMaWdodFR5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBT
VkdMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAg
KzIxLDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFNWR0xpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHTGlnaHRTb3VyY2VfaAorI2lmbmRlZiBMaWdo
dFNvdXJjZV9oCisjZGVmaW5lIExpZ2h0U291cmNlX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTc5LDYgKzc5LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8g
RU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdMaWdodFNvdXJjZV9oCisjZW5kaWYgLy8g
TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2Nzk0OSkJKGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmg6Njc5NDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxl
eCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCisjZGVmaW5lIFNWR1BvaW50TGlnaHRTb3Vy
Y2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZH
TGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQb2ludExpZ2h0
U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQb2ludExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRMaWdodFNvdXJjZShw
b3NpdGlvbikpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdE
YXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeik7CisKKyAgICB2aXJ0dWFs
IFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFBvaW50TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3Np
dGlvbikKKyAgICAgICAgOiBMaWdodFNvdXJjZShMU19QT0lOVCkKKyAgICAgICAgLCBtX3Bvc2l0
aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlv
bjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHUG9pbnRMaWdodFNvdXJjZV9oCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmgJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIw
LDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNW
R1BvaW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdQb2ludExpZ2h0U291cmNlX2gKKyNpZm5k
ZWYgUG9pbnRMaWdodFNvdXJjZV9oCisjZGVmaW5lIFBvaW50TGlnaHRTb3VyY2VfaAogCi0jaWYg
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2Uu
aCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU0LDYgKzU0LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdQb2ludExpZ2h0U291
cmNlX2gKKyNlbmRpZiAvLyBQb2ludExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9u
IDY3OTQ5KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNv
dXJjZS5oOjY3OTQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHU3BvdExpZ2h0U291cmNlX2gKKyNkZWZpbmUg
U1ZHU3BvdExpZ2h0U291cmNlX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU3BvdExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50M0QmIHBvc2l0aW9uLAorICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwb3RMaWdodFNvdXJjZShwb3NpdGlvbiwgZGly
ZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50LCBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgIH0KKwor
ICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2RpcmVjdGlvbjsgfQorCisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQorICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3QgeyByZXR1cm4gbV9saW1pdGluZ0NvbmVBbmdsZTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwor
CisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTcG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQ
b2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sCisgICAgICAg
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgICAg
ICA6IExpZ2h0U291cmNlKExTX1NQT1QpCisgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikK
KyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9zcGVjdWxhckV4
cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgICwgbV9saW1pdGluZ0NvbmVBbmdsZShs
aW1pdGluZ0NvbmVBbmdsZSkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludDNEIG1fcG9z
aXRpb247CisgICAgRmxvYXRQb2ludDNEIG1fZGlyZWN0aW9uOworCisgICAgZmxvYXQgbV9zcGVj
dWxhckV4cG9uZW50OworICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKworI2VuZGlmIC8vIFNWR1Nwb3RMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCShyZXZp
c2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGln
aHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDExIEBACiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR1Nwb3RMaWdodFNvdXJjZV9o
Ci0jZGVmaW5lIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisjaWZuZGVmIFNwb3RMaWdodFNvdXJjZV9o
CisjZGVmaW5lIFNwb3RMaWdodFNvdXJjZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjcsNiArNjcsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklM
VEVSUykKIAotI2VuZGlmIC8vIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisjZW5kaWYgLy8gU3BvdExp
Z2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
aAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIlNWR0ZFQ29udm9sdmVNYXRyaXguaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29y
ZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIkZFRGlmZnVzZUxpZ2h0aW5nLmgiCiAjaW5j
bHVkZSAiU1ZHQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgogI2lu
Y2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcC5oIgor
I2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc5NDkpCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw4IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykK
ICNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdEaXN0
YW50TGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgIkRpc3RhbnRMaWdodFNvdXJjZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkocmV2aXNp
b24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFRmxvb2RFbGVtZW50X2gKIAogI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRmxvb2QuaCIK
KyNpbmNsdWRlICJGRUZsb29kLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVMaWdo
dEVsZW1lbnQuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIFNWR0ZFTGln
aHRFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1
ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0xpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKICNkZWZpbmUgU1ZHRkVNZXJnZUVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorI2luY2x1ZGUgIkZFTWVy
Z2UuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdGRU1vcnBob2xvZ3kuaCIKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHJldmlzaW9uIDY3
OTQ5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNkZWZpbmUgU1ZHRkVPZmZzZXRFbGVtZW50X2gKIAogI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAi
U1ZHRkVPZmZzZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
OCBAQAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2UuaCIK
KworI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShyZXZp
c2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQot
I2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgorI2luY2x1ZGUgIkZFU3BlY3VsYXJM
aWdodGluZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwb3RM
aWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogCiAjaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3BvdExpZ2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJTcG90
TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2RlZmluZSBTVkdGRVRpbGVF
bGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUg
IkZFVGlsZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgotI2luY2x1ZGUgIlNWR0ZFVGlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlzaW9uIDY3OTQ5KQorKysg
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw3ICsyMiw3IEBACiAjZGVmaW5lIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnRfaAogCiAjaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVUdXJidWxlbmNlLmgi
CisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50TGlnaHRTb3VyY2Uu
aAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rp
c3RhbnRMaWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdt
YWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gK
LSNkZWZpbmUgU1ZHRGlzdGFudExpZ2h0U291cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXN0YW50TGlnaHRTb3VyY2U+IGNy
ZWF0ZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2YXRpb24pKTsK
LSAgICB9Ci0KLSAgICBmbG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoOyB9
Ci0gICAgZmxvYXQgZWxldmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5
LCBmbG9hdCB6KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRGlzdGFudExpZ2h0U291
cmNlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICAgICAgOiBMaWdodFNvdXJj
ZShMU19ESVNUQU5UKQotICAgICAgICAsIG1fYXppbXV0aChhemltdXRoKQotICAgICAgICAsIG1f
ZWxldmF0aW9uKGVsZXZhdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbV9hemltdXRo
OwotICAgIGZsb2F0IG1fZWxldmF0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBT
VkdEaXN0YW50TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCi0KLSNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNv
bnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0g
ICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKLSAgICAsIG1fZGl2aXNvcihkaXZpc29yKQot
ICAgICwgbV9iaWFzKGJpYXMpCi0gICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRPZmZzZXQpCi0g
ICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQotICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoKGtlcm5l
bFVuaXRMZW5ndGgpCi0gICAgLCBtX3ByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSkKLSAgICAs
IG1fa2VybmVsTWF0cml4KGtlcm5lbE1hdHJpeCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRUNvbnZv
bHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVs
U2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFy
Z2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYg
a2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0
cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtl
cm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOwot
fQotCi0KLUludFNpemUgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fa2VybmVsU2l6ZTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRL
ZXJuZWxTaXplKEludFNpemUga2VybmVsU2l6ZSkKLXsKLSAgICBtX2tlcm5lbFNpemUgPSBrZXJu
ZWxTaXplOyAKLX0KLQotY29uc3QgVmVjdG9yPGZsb2F0PiYgRkVDb252b2x2ZU1hdHJpeDo6a2Vy
bmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxNYXRyaXg7IAotfQotCi12b2lkIEZF
Q29udm9sdmVNYXRyaXg6OnNldEtlcm5lbChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWwpCi17
Ci0gICAgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IAotfQotCi1mbG9hdCBGRUNvbnZvbHZlTWF0
cml4OjpkaXZpc29yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kaXZpc29yOyAKLX0KLQotdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17Ci0gICAgbV9k
aXZpc29yID0gZGl2aXNvcjsgCi19Ci0KLWZsb2F0IEZFQ29udm9sdmVNYXRyaXg6OmJpYXMoKSBj
b25zdAotewotICAgIHJldHVybiBtX2JpYXM7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6
OnNldEJpYXMoZmxvYXQgYmlhcykKLXsKLSAgICBtX2JpYXMgPSBiaWFzOyAKLX0KLQotSW50UG9p
bnQgRkVDb252b2x2ZU1hdHJpeDo6dGFyZ2V0T2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV90YXJnZXRPZmZzZXQ7IAotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9m
ZnNldChJbnRQb2ludCB0YXJnZXRPZmZzZXQpCi17Ci0gICAgbV90YXJnZXRPZmZzZXQgPSB0YXJn
ZXRPZmZzZXQ7IAotfQotCi1FZGdlTW9kZVR5cGUgRkVDb252b2x2ZU1hdHJpeDo6ZWRnZU1vZGUo
KSBjb25zdAotewotICAgIHJldHVybiBtX2VkZ2VNb2RlOyAKLX0KLQotdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdl
TW9kZSA9IGVkZ2VNb2RlOyAKLX0KLQotRmxvYXRQb2ludCBGRUNvbnZvbHZlTWF0cml4OjprZXJu
ZWxVbml0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoOyAK
LX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9p
bnQga2VybmVsVW5pdExlbmd0aCkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJuZWxV
bml0TGVuZ3RoOyAKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwcmVzZXJ2ZUFscGhhKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyAKLX0KLQotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKLXsKLSAgICBt
X3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyAKLX0KLQotLyoKLSAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRh
dGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgVGhlIGlt
YWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQotICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8Ci0gICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwK
LSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAgICAgICAgICAgICB8
ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgRSAg
ICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBXaGVyZSByZWdp
b24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAgY2FuIGJlIGNhbGN1
bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgotCi0gICBF
eGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCi0KLSAgICAg
IE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKLSAgICAgIFRh
cmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRh
cmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4uCi0gICAgICAgIC4u
LgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25zIGluIHRoaXMgY2Fz
ZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAo
eDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90ZTogcm93IHgyIGFu
ZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAgICAgICAgb25seSB0
aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5Mgot
Ci0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCi0gICAgICBSZWdp
b24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdpb24gQzogeDE6IDEs
IHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4Mjog
MTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEw
IChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9z
dCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNh
bGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCi0gICBG
b3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxz
IGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdl
LiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIg
dGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcwotICAgZnVu
Y3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29t
bW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVt
LCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0gICBhbmQgd291bGQg
bWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotc3RhdGljIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25l
ZCBjaGFyIG1heCA9IDI1NSkKLXsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAg
cmV0dXJuIGNoYW5uZWw7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhDYW52YXNQaXhlbEFycmF5
KiBpbWFnZSwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgQ2FudmFzUGl4ZWxBcnJheSogc3JjKQotewotICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxw
aGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNd
IC8gZGl2aXNvciArIGJpYXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAg
ICAgICBpbWFnZS0+c2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlz
b3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsK
LSAgICAgICAgaW1hZ2UtPnNldChwaXhlbCwgc3JjLT5nZXQocGl4ZWwpKTsKLSAgICAgICAgKytw
aXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPnNldChwaXhlbCsrLCBtYXhBbHBoYSk7
Ci19Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQg
Y2xpcEJvdHRvbSkKLXsKLSAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBp
eGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEu
d2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bCA9IDA7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQg
eEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRh
aW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChw
cmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3Qg
YmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJU
KG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gY2xpcEJvdHRvbSArIDE7IHkgPiAwOyAt
LXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsK
LSAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1fa2VybmVsTWF0cml4LnNpemUoKSAtIDE7
Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAg
ICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAgICAgICAgIHRv
dGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAgICAgICAgdG90
YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAg
ICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFs
dWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBtX2tlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXktPmdldChrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IG1f
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0
b3RhbHNbMl0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwrKykpOwotICAg
ICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzNdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0
PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKSk7Ci0g
ICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZh
bHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1
ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7Ci0gICAgICAg
ICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0g
eEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9
Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoeCA+
PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeCA+PSAwICYmIHkgPCBwYWludGluZ0Rh
dGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8
PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAgZGVmYXVsdDogLy8gRURHRU1P
REVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6
Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICBlbHNlIGlm
ICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEu
d2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICB5ID0gMDsKLSAgICAg
ICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICAgICAgeSA9IHBh
aW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEu
d2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgd2hpbGUg
KHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHgg
JT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAoeSA8IDApCi0gICAgICAgICAg
ICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhl
aWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsK
LSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwotdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIs
IGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgyIC0g
eDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBtX3RhcmdldE9mZnNldC54KCk7
Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50
IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNldC55KCk7Ci0gICAgaW50IHhJ
bmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENvbnRh
aW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChw
cmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3Qg
YmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJU
KG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0g
ICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50
IGtlcm5lbFZhbHVlID0gbV9rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGlu
dCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgIGludCBrZXJu
ZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1f
a2VybmVsU2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAg
ICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNd
ID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAg
ICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJu
ZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXgg
Pj0gMCkgewotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gbV9rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5LT5nZXQocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
bV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXggKyAy
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBo
YVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sz
XSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAg
ICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5l
bFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheSk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxY
OwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRL
ZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBp
eGVsWTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdo
dCwgaW50IGNsaXBCb3R0b20pCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBz
aW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdo
aWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3By
ZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0
SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9t
KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4
ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBp
bnQgeTIpCi17Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8g
dGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0SW50
ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgeDEs
IHkxLCB4MiwgeTIpOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNl
PihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVzdWx0
SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlKCktPnNpemUoKSk7Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKLQotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwotICAgIGlm
IChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1h
Z2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgp
OwotICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOwotCi0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJh
eS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0
YSgpOwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGltYWdlUmVjdC53aWR0aCgpOwotICAgIHBh
aW50aW5nRGF0YS5oZWlnaHQgPSBpbWFnZVJlY3QuaGVpZ2h0KCk7Ci0gICAgcGFpbnRpbmdEYXRh
LmJpYXMgPSBtX2JpYXMgKiAyNTU7Ci0KLSAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4
ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IGltYWdlUmVjdC53aWR0aCgpIC0gbV9rZXJuZWxTaXpl
LndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBpbWFnZVJlY3QuaGVpZ2h0KCkgLSBtX2tl
cm5lbFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0ID49IDAgJiYgY2xpcEJvdHRv
bSA+PSAwKSB7Ci0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tKTsKLQotICAgICAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQu
eCgpICsgMTsKLSAgICAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwot
ICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIG1fdGFyZ2V0T2Zm
c2V0LnkoKSk7Ci0gICAgICAgIGlmIChjbGlwQm90dG9tIDwgaW1hZ2VSZWN0LmhlaWdodCgpKQot
ICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBp
bWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fdGFy
Z2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9t
KTsKLSAgICAgICAgaWYgKGNsaXBSaWdodCA8IGltYWdlUmVjdC53aWR0aCgpKQotICAgICAgICAg
ICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0
LnkoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGNsaXBCb3R0b20pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1h
Z2VSZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAg
ICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdl
dCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0SW1h
Z2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVj
dCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZHVtcCgpCi17Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFREdF
TU9ERV9VTktOT1dOOgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICB0cyA8PCAiRFVQTElDQVRFIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB0cyA8PCAi
V1JBUCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURHRU1PREVfTk9ORToKLSAgICAgICAg
dHMgPDwgIk5PTkUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci1UZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQpOwotICAgIHRzIDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBt
X2tlcm5lbFNpemUgPDwgIlwiICIKLSAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tl
cm5lbE1hdHJpeCAgPDwgIlwiICIKLSAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29y
IDw8ICJcIiAiCi0gICAgICAgPDwgImJpYXM9XCIiIDw8IG1fYmlhcyA8PCAiXCIgIgotICAgICAg
IDw8ICJ0YXJnZXQ9XCIiIDw8IG1fdGFyZ2V0T2Zmc2V0IDw8ICJcIiAiCi0gICAgICAgPDwgImVk
Z2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2RlIDw8ICJcIiAiCi0gICAgICAgPDwgImtlcm5lbFVuaXRM
ZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aCA8PCAiXCIgIgotICAgICAgIDw8ICJwcmVz
ZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNlcnZlQWxwaGEgPDwgIlwiXVxuIjsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi19OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gNjc5NDkpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
U1ZHRkVDb252b2x2ZU1hdHJpeF9oCi0jZGVmaW5lIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAotCi0j
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFZGdlTW9kZVR5
cGUgewotICAgIEVER0VNT0RFX1VOS05PV04gICA9IDAsCi0gICAgRURHRU1PREVfRFVQTElDQVRF
ID0gMSwKLSAgICBFREdFTU9ERV9XUkFQICAgICAgPSAyLAotICAgIEVER0VNT0RFX05PTkUgICAg
ICA9IDMKLX07Ci0KLWNsYXNzIENhbnZhc1BpeGVsQXJyYXk7Ci0KLWNsYXNzIEZFQ29udm9sdmVN
YXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAg
ICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAg
IEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsU2l6ZShJbnRT
aXplKTsKLQotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAgIGZsb2F0IGRpdmlzb3Io
KSBjb25zdDsKLSAgICB2b2lkIHNldERpdmlzb3IoZmxvYXQpOwotCi0gICAgZmxvYXQgYmlhcygp
IGNvbnN0OwotICAgIHZvaWQgc2V0QmlhcyhmbG9hdCk7Ci0KLSAgICBJbnRQb2ludCB0YXJnZXRP
ZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldE9mZnNldChJbnRQb2ludCk7Ci0KLSAg
ICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEVkZ2VNb2RlKEVk
Z2VNb2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdDsK
LSAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludCk7Ci0KLSAgICBib29sIHBy
ZXNlcnZlQWxwaGEoKSBjb25zdDsKLSAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAo
KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVDb252b2x2
ZU1hdHJpeChjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSog
ZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0Owot
ICAgICAgICBmbG9hdCBiaWFzOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZl
QWxwaGFWYWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVs
cyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7Ci0KLSAgICBB
TFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQg
eSk7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgdm9pZCBm
YXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xp
cFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE91dGVy
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgy
LCBpbnQgeTIpOwotCi0gICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7Ci0gICAgZmxvYXQgbV9kaXZp
c29yOwotICAgIGZsb2F0IG1fYmlhczsKLSAgICBJbnRQb2ludCBtX3RhcmdldE9mZnNldDsKLSAg
ICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKLSAgICBGbG9hdFBvaW50IG1fa2VybmVsVW5pdExl
bmd0aDsKLSAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKLSAgICBWZWN0b3I8ZmxvYXQ+IG1fa2Vy
bmVsTWF0cml4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRUNvbnZvbHZlTWF0
cml4X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGln
aHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVEaWZmdXNlTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaWZm
dXNlTGlnaHRpbmcuaCIKLQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCi0gICAgZmxvYXQgZGlm
ZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdo
dGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxp
Z2h0U291cmNlKQotewotfQotCi1QYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAotICAgIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJj
ZT4gbGlnaHRTb3VyY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1c2VMaWdo
dGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVs
VW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwotfQotCi1GRURp
ZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkKLXsKLX0KLQotQ29sb3IgRkVEaWZm
dXNlTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2xpZ2h0
aW5nQ29sb3I7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Io
Y29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCi17Ci0gICAgbV9saWdodGluZ0NvbG9yID0gbGln
aHRpbmdDb2xvcjsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6OnN1cmZhY2VTY2FsZSgp
IGNvbnN0IAotewotICAgIHJldHVybiBtX3N1cmZhY2VTY2FsZTsKLX0KLQotdm9pZCBGRURpZmZ1
c2VMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKLXsKLSAgICBt
X3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGlnaHRp
bmc6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGlmZnVzZUNvbnN0
YW50OwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxv
YXQgZGlmZnVzZUNvbnN0YW50KQotewotICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNv
bnN0YW50OwotfQotCi1mbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFgo
KSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotfQotCi12b2lkIEZF
RGlmZnVzZUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCkKLXsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci19
Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGln
aHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQotewot
ICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQotY29uc3Qg
TGlnaHRTb3VyY2UqIEZFRGlmZnVzZUxpZ2h0aW5nOjpsaWdodFNvdXJjZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGlnaHRp
bmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQot
eyAgICAKLSAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7Ci19Ci0KLXZvaWQgRkVEaWZm
dXNlTGlnaHRpbmc6OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGlu
Zzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlRGlmZnVz
ZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMp
OwotICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIg
IgotICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50IDw8
ICJcIiAiCi0gICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExl
bmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAg
IHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCShyZXZpc2lvbiA2Nzk0OSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBTVkdGRURpZmZ1c2VMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTGln
aHRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMaWdodFNvdXJjZTsKLQot
Y2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xv
ciYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIENvbG9y
IGxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3Qg
Q29sb3ImKTsKLQotICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
U3VyZmFjZVNjYWxlKGZsb2F0KTsKLQotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9h
dCk7Ci0KLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
S2VybmVsVW5pdExlbmd0aFkoZmxvYXQpOwotCi0gICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0
U291cmNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0
U291cmNlPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9u
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1l
bnRNYXAuY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCIK
LQotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAo
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KCkKLSAg
ICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV95Q2hhbm5l
bFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxlKHNjYWxlKQotewotfQot
Ci1QYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxl
Y3Rvciwgc2NhbGUpKTsKLX0KLQotQ2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3BsYWNlbWVudE1h
cDo6eENoYW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihj
b25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCi17Ci0gICAgbV94Q2hh
bm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLX0KLQotQ2hhbm5lbFNlbGVjdG9yVHlw
ZSBGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0
WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IpCi17Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsKLX0KLQot
ZmxvYXQgRkVEaXNwbGFjZW1lbnRNYXA6OnNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
Y2FsZTsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUp
Ci17Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjph
cHBseShGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+
YXBwbHkoZmlsdGVyKTsKLSAgICBpbjItPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFubmVs
U2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBlZmZlY3RB
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4g
c3JjUGl4ZWxBcnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBz
cmNQaXhlbEFycmF5QihpbjItPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwotCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VS
ZWN0LmhlaWdodCgpKTsKLQotICAgIEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCkgPT0g
c3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKLQotICAgIGZsb2F0IHNjYWxlWCA9IG1fc2NhbGUg
LyAyNTUuZiAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7Ci0gICAgZmxvYXQg
c2NhbGVZID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVp
Z2h0KCk7Ci0gICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WCA9ICgwLjVmIC0gMC41ZiAqIG1fc2Nh
bGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKLSAgICBmbG9hdCBzY2Fs
ZUFkanVzdG1lbnRZID0gKDAuNWYgLSAwLjVmICogbV9zY2FsZSkgKiBmaWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS5oZWlnaHQoKTsKLSAgICBpbnQgc3RyaWRlID0gaW1hZ2VSZWN0LndpZHRoKCkg
KiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsK
LSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkc3RJbmRleCA9
IGxpbmUgKyB4ICogNDsKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGlu
dD4oc2NhbGVYICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feENoYW5uZWxTZWxl
Y3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkg
KyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWSAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXgg
KyBtX3lDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFkpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewot
ICAgICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IGltYWdlUmVjdC53aWR0aCgp
IHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaW1hZ2VSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5QS0+
Z2V0KHNyY1kgKiBzdHJpZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAg
ICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgcGl4ZWxWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEu
Z2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRN
YXA6OmR1bXAoKQotewotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIENIQU5ORUxfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwgIlVOS05P
V04iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfUjoKLSAgICAgICAgdHMgPDwg
IlJFRCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0hBTk5FTF9HOgotICAgICAgICB0cyA8
PCAiR1JFRU4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfQjoKLSAgICAgICAg
dHMgPDwgIkJMVUUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfQToKLSAgICAg
ICAgdHMgPDwgIkFMUEhBIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsK
LX0KLQotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQo
dHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIHNjYWxlPVwi
IiA8PCBtX3NjYWxlIDw8ICJcIiAiCi0gICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8
IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgotICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgaW5wdXRFZmZl
Y3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVy
biB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdG
RURpc3BsYWNlbWVudE1hcF9oCi0jZGVmaW5lIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKLQotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKLSAgICBDSEFO
TkVMX1VOS05PV04gPSAwLAotICAgIENIQU5ORUxfUiA9IDEsCi0gICAgQ0hBTk5FTF9HID0gMiwK
LSAgICBDSEFOTkVMX0IgPSAzLAotICAgIENIQU5ORUxfQSA9IDQKLX07Ci0KLWNsYXNzIEZFRGlz
cGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQpOwotCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5
cGUpOwotCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUp
OwotCi0gICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNj
YWxlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBG
RURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENo
YW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOwotCi0gICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7Ci0gICAgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSBtX3lDaGFubmVsU2VsZWN0b3I7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotCi0jZW5kaWYgLy8gU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRmxvb2Qu
aCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZs
b29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAg
LCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3Bh
Y2l0eSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3Qg
Q29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFRmxvb2QoZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7Ci19Ci0KLUNvbG9y
IEZFRmxvb2Q6OmZsb29kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2Zsb29kQ29sb3I7
Ci19Ci0KLXZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbV9mbG9vZENvbG9yID0gY29sb3I7Ci19Ci0KLWZsb2F0IEZFRmxvb2Q6OmZsb29kT3Bh
Y2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OwotfQotCi12b2lkIEZF
Rmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCi17Ci0gICAgbV9mbG9v
ZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6YXBwbHkoRmlsdGVy
KikKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0
KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xv
ciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9v
ZE9wYWNpdHkoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpLCBjb2xvciwg
RGV2aWNlQ29sb3JTcGFjZSk7Ci19Ci0KLXZvaWQgRkVGbG9vZDo6ZHVtcCgpCi17Ci19Ci0KLVRl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAg
dHMgPDwgIltmZUZsb29kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IGZsb29kQ29sb3IoKS5uYW1l
KCkgPDwgIlwiICIKLSAgICAgICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5
KCkgPDwgIlwiXVxuIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgJKHJldmlzaW9uIDY3OTQ5KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVGbG9v
ZF9oCi0jZGVmaW5lIFNWR0ZFRmxvb2RfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRUZsb29k
IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi0gICAgQ29sb3IgZmxvb2RD
b2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsKLQot
ICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5
KGZsb2F0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBGRUZsb29kKGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi0gICAgQ29sb3IgbV9mbG9vZENvbG9y
OwotICAgIGZsb2F0IG1fZmxvb2RPcGFjaXR5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAv
LyBTVkdGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVM
aWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZH
RkVMaWdodGluZy5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdU
eXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAotICAg
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDog
RmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKLSAgICAs
IG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2UpCi0gICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRp
bmdDb2xvcikKLSAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKLSAgICAsIG1fZGlm
ZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKLSAgICAsIG1fc3BlY3VsYXJDb25zdGFudChz
cGVjdWxhckNvbnN0YW50KQotICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25l
bnQpCi0gICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQotICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLX0KLQotY29uc3Qgc3Rh
dGljIGludCBjUGl4ZWxTaXplID0gNDsKLWNvbnN0IHN0YXRpYyBpbnQgY0FscGhhQ2hhbm5lbE9m
ZnNldCA9IDM7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBjT3BhcXVlQWxwaGEgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGZmKTsKLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjp1cExlZnRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBQaXhlbFZhbHVlKCkKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lO
TElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRQ
aXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNf
SU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmNlbnRlclBpeGVsVmFsdWUoKQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpyaWdodFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93
bkxlZnRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
PmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OmRvd25SaWdodFBpeGVsVmFsdWUoKQotewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLAotICAgIGludCBsaWdodFgsIGludCBs
aWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9y
bWFsWSkKLXsKLSAgICBtX2xpZ2h0U291cmNlLT51cGRhdGVQYWludGluZ0RhdGEocGFpbnRpbmdE
YXRhLCBsaWdodFgsIGxpZ2h0WSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEucGl4ZWxzLT5nZXQo
ZGF0YS5vZmZzZXQgKyAzKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7Ci0KLSAgICBkYXRhLm5vcm1h
bFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWCkgKiBkYXRh
LnN1cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotICAgIGRhdGEu
bm9ybWFsVmVjdG9yLnNldFooMS4wZik7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0
aW5nKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChk
YXRhLm5vcm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvcik7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yOwotICAgICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyAx
LjBmKTsKLSAgICAgICAgaGFsZndheVZlY3Rvci5ub3JtYWxpemUoKTsKLSAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICAgICAgZGF0YS5saWdodFN0cmVuZ3Ro
ID0gbV9zcGVjdWxhckNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rv
cik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fc3Bl
Y3VsYXJDb25zdGFudCAqIHBvd2YoZGF0YS5ub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yLCBt
X3NwZWN1bGFyRXhwb25lbnQpOwotICAgIH0KLQotICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5ndGgg
PiAxLjBmKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAxLjBmOwotICAgIGlmIChkYXRh
LmxpZ2h0U3RyZW5ndGggPCAwLjBmKQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAwLjBm
OwotCi0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngo
KSkpOwotICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3IueSgpKSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xv
clZlY3Rvci56KCkpKTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoQ2FudmFz
UGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7
Ci0KLSAgICBpZiAoIW1fbGlnaHRTb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAx
IHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5v
dyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQg
PD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSBwaXhlbHM7
Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAg
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Ig
PSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJlZCgpLCBtX2xpZ2h0aW5nQ29sb3IuZ3Jl
ZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7Ci0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBh
aW50aW5nRGF0YShwYWludGluZ0RhdGEpOwotCi0gICAgLy8gVG9wL0xlZnQgY29ybmVyCi0gICAg
ZGF0YS5vZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwK
LSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAq
IGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRv
d25SaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2Vu
dGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25Q
aXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7Ci0KLSAgICAvLyBUb3Av
UmlnaHQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0
YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5k
b3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIu
MGYgLyAzLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZh
bHVlKCkpOwotCi0gICAgLy8gQm90dG9tL0xlZnQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSArIGRh
dGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0
YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNl
bnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOwotCi0gICAgLy8gQm90
dG9tL1JpZ2h0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWlu
dGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBk
YXRhLnVwUGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmNlbnRlclBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQ
aXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVsVmFs
dWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSk7Ci0KLSAgICBpZiAod2lkdGggPj0g
MykgewotICAgICAgICAvLyBUb3AgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
OyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBpeGVs
KGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYs
IC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkg
LSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCks
Ci0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIGRh
dGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0
YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIEJvdHRvbSBs
aW5lCi0gICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3Ig
KGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0Rh
dGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0gICAgICAgICAgICAgICAgLTEuMGYg
LyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVl
KCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVl
KCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVl
KCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAr
IGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRh
dGEucmlnaHRQaXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhlaWdo
dCA+PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5
IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBw
YWludGluZ0RhdGEsIDAsIHksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51
cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRl
clBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duUGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAg
LTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhl
bFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhl
bFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFJpZ2h0IGxpbmUKLSAgICAgICAgZGF0
YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRh
LCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwKLSAgICAgICAgICAg
ICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBQaXhl
bFZhbHVlKCkgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhl
bFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxWYWx1
ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1
ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBJbnRlcmlvciBwaXhl
bHMKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25l
OyArK3kpIHsKLSAgICAgICAgICAgIGRhdGEub2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDE7
IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVs
U2l6ZSkgewotICAgICAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwg
eSwKLSAgICAgICAgICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZh
bHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1
ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIC0x
LjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZh
bHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1
ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCB0b3RhbFNp
emUgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmICht
X2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDM7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQo
aSwgY09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHRvdGFsU2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGExID0g
ZGF0YS5waXhlbHMtPmdldChpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTIgPSBkYXRh
LnBpeGVscy0+Z2V0KGkgKyAxKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTMgPSBkYXRh
LnBpeGVscy0+Z2V0KGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8g
bWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+
PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNy
Y0ltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdERyYXdpbmdSZWN0KSk7Ci0gICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShz
cmNJbWFnZURhdGEtPmRhdGEoKSk7Ci0KLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0
TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwot
ICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93
c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91
cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUu
Ci0gICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1w
bGVtZW50YXRpb24KLQotICAgIGlmIChkcmF3TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3Qud2lkdGgoKSwgZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpKQotICAgICAg
ICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VEYXRhLmdl
dCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSksIEludFBvaW50
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVMaWdodGluZy5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNWR0ZFTGln
aHRpbmdfaAotI2RlZmluZSBTVkdGRUxpZ2h0aW5nX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLSNp
bmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBG
RURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKLQotY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0
ZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlm
ZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLQotICAgIHN0
cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yOwot
ICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IGxpZ2h0U3Ry
ZW5ndGg7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAgICAgICAgaW50IG9mZnNldDsK
LSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgd2lk
dGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwotCi0g
ICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwTGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxX
QVlTX0lOTElORSBpbnQgdXBQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50
IHVwUmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGxlZnRQaXhl
bFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGNlbnRlclBpeGVsVmFsdWUoKTsK
LSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgcmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFM
V0FZU19JTkxJTkUgaW50IGRvd25MZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIGludCBkb3duUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3du
UmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgfTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBl
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKENhbnZh
c1BpeGVsQXJyYXkqLCBpbnQsIGludCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFBpeGVs
KExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAotICAgICAgICBpbnQg
bGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFj
dG9yWSwgaW50IG5vcm1hbFkpOwotCi0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwot
ICAgIFJlZlB0cjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGln
aHRpbmdDb2xvcjsKLSAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKLSAgICBmbG9hdCBtX2RpZmZ1
c2VDb25zdGFudDsKLSAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgZmxvYXQgbV9z
cGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7Ci0gICAgZmxv
YXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZH
RkVMaWdodGluZ19oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVy
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVN
ZXJnZS5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgotCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotRkVNZXJnZTo6RkVNZXJnZSgpIAotICAgIDogRmlsdGVyRWZmZWN0KCkKLXsKLX0KLQotUGFz
c1JlZlB0cjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVNZXJnZSk7Ci19Ci0KLXZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
Ci17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNT
RVJUKHNpemUgPiAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaW4t
PmFwcGx5KGZpbHRlcik7Ci0gICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0
ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSkpOwotICAgIH0KLX0KLQotdm9pZCBGRU1lcmdlOjpkdW1wKCkKLXsKLX0KLQotVGV4dFN0
cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8
PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNT
RVJUKHNpemUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwi
XVxuIjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBp
bnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFTWVyZ2VfaAotI2RlZmluZSBTVkdG
RU1lcmdlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRU1lcmdlIDogcHVibGljIEZp
bHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3Jl
YXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2
b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
RkVNZXJnZSgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRU1lcmdlX2gKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5j
cHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCi0KLSNpbmNsdWRlICJDYW52
YXNQaXhlbEFycmF5LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIHN0ZDo6bWluOwotdXNpbmcg
c3RkOjptYXg7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVNb3JwaG9sb2d5OjpGRU1vcnBo
b2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwg
bV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7Ci19
Ci0KLU1vcnBob2xvZ3lPcGVyYXRvclR5cGUgRkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5
OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewot
ICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLWZsb2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcmFkaXVzWDsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKLXsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotfQot
Ci1mbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAotewotICAgIHJldHVybiBtX3Jh
ZGl1c1k7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kp
Ci17Ci0gICAgbV9yYWRpdXNZID0gcmFkaXVzWTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICBpbnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNYICogZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fcmFkaXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAg
ICBpZiAocmFkaXVzWCA8PSAwIHx8IHJhZGl1c1kgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsK
LSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgUmVmUHRy
PENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkoaW4tPnJlc3VsdEltYWdlKCktPmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCkpOwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53
aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaW50IGVmZmVjdFdpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgCi0gICAgLy8gTGltaXQgdGhlIHJhZGl1
cyBzaXplIHRvIGVmZmVjdCBkaW1lbnNpb25zCi0gICAgcmFkaXVzWCA9IG1pbihlZmZlY3REcmF3
aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzWCk7Ci0gICAgcmFkaXVzWSA9IG1pbihlZmZlY3RE
cmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1c1kpOwotICAgIAotICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBleHRyZW1hOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgc3RhcnRZID0gbWF4KDAsIHkgLSBy
YWRpdXNZKTsKLSAgICAgICAgaW50IGVuZFkgPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0
KCkgLSAxLCB5ICsgcmFkaXVzWSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7
IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5l
bAotICAgICAgICAgICAgZXh0cmVtYS5jbGVhcigpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPD0gcmFkaXVzWDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBj
b2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHN0YXJ0WSAqIGVmZmVjdFdpZHRoICsg
NCAqIGogKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnRZOyBp
IDw9IGVuZFk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
ID0gc3JjUGl4ZWxBcnJheS0+Z2V0KGkgKiBlZmZlY3RXaWR0aCArIDQgKiBqICsgY2hhbm5lbCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9FUk9ERSAmJiBwaXhlbCA8PSBjb2x1bW5FeHRyZW1hKSB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIHBpeGVsID49
IGNvbHVtbkV4dHJlbWEpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRXh0cmVtYSA9
IHBpeGVsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVu
ZChjb2x1bW5FeHRyZW1hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4gCi0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFggPSBtaW4oeCArIHJhZGl1c1gsIGVm
ZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGNvbHVtbkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3RhcnRZICogZWZmZWN0V2lk
dGggKyBlbmRYICogNCArIGNoYW5uZWwpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBz
dGFydFk7IGkgPD0gZW5kWTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcGl4ZWwgPSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdpZHRoICsgZW5kWCAqIDQg
KyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUg
JiYgcGl4ZWwgPj0gY29sdW1uRXh0cmVtYSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1
bW5FeHRyZW1hID0gcGl4ZWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICh4IC0gcmFkaXVzWCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgw
KTsKLSAgICAgICAgICAgICAgICBpZiAoeCArIHJhZGl1c1ggPD0gZWZmZWN0RHJhd2luZ1JlY3Qu
d2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVt
YSk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbnRpcmVFeHRyZW1hID0gZXh0cmVt
YVswXTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGtlcm5lbEluZGV4ID0gMDsga2Vy
bmVsSW5kZXggPCBleHRyZW1hLnNpemUoKTsgKytrZXJuZWxJbmRleCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYgZXh0
cmVtYVtrZXJuZWxJbmRleF0gPD0gZW50aXJlRXh0cmVtYSkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBleHRyZW1h
W2tlcm5lbEluZGV4XSA+PSBlbnRpcmVFeHRyZW1hKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVudGlyZUV4dHJlbWEgPSBleHRyZW1hW2tlcm5lbEluZGV4XTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldCh5ICogZWZmZWN0V2lkdGgg
KyA0ICogeCArIGNoYW5uZWwsIGVudGlyZUV4dHJlbWEpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEZFTW9y
cGhvbG9neTo6ZHVtcCgpCi17Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046
Ci0gICAgICAgIHRzIDw8ICJVTktOT1dOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6Ci0gICAgICAgIHRzIDw8ICJFUk9ERSI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURToKLSAgICAgICAg
dHMgPDwgIkRJTEFURSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50KTsKLSAgICB0cyA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIG9wZXJhdG9yPVwiIiA8PCBtb3Jw
aG9sb2d5T3BlcmF0b3IoKSA8PCAiXCIgIgotICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IHJhZGl1
c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVNb3JwaG9sb2d5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU1vcnBob2xvZ3kuaAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFTW9ycGhvbG9neV9oCi0j
ZGVmaW5lIFNWR0ZFTW9ycGhvbG9neV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewotICAg
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKLSAgICBGRU1PUlBIT0xPR1lfT1BF
UkFUT1JfRVJPREUgPSAxLAotICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgPSAyCi19
OwotCi1jbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsgIAotICAgIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRN
b3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7Ci0KLSAgICBmbG9hdCBy
YWRpdXNYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSYWRpdXNYKGZsb2F0KTsKLQotICAgIGZsb2F0
IHJhZGl1c1koKSBjb25zdDsKLSAgICB2b2lkIHNldFJhZGl1c1koZmxvYXQpOwotCi0gICAgdmly
dHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAg
ICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYs
IGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKLSAgICAK
LSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3JhZGl1c1g7
Ci0gICAgZmxvYXQgbV9yYWRpdXNZOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdG
RU1vcnBob2xvZ3lfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9m
ZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU9mZnNldC5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRU9mZnNldC5oIgotCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICA6IEZpbHRl
ckVmZmVjdCgpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU9mZnNldChkeCwgZHkpKTsKLX0KLQotZmxvYXQgRkVP
ZmZzZXQ6OmR4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9keDsKLX0KLQotdm9pZCBGRU9mZnNl
dDo6c2V0RHgoZmxvYXQgZHgpCi17Ci0gICAgbV9keCA9IGR4OwotfQotCi1mbG9hdCBGRU9mZnNl
dDo6ZHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2R5OwotfQotCi12b2lkIEZFT2Zmc2V0Ojpz
ZXREeShmbG9hdCBkeSkKLXsKLSAgICBtX2R5ID0gZHk7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwotICAg
IHNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
LCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoZmlsdGVy
LT5lZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBtX2R4ICo9IHNvdXJjZUltYWdl
UmVjdC53aWR0aCgpOwotICAgICAgICBtX2R5ICo9IHNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKTsK
LSAgICB9Ci0gICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOwot
ICAgIG1fZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7Ci0KLSAgICBG
bG9hdFJlY3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgaW4tPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkueCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9keSArIGluLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0KCkpOwot
Ci0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKLX0KLQotdm9pZCBGRU9mZnNldDo6ZHVtcCgpCi17
Ci19Ci0KLVRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQpOwotICAgIHRzIDw8ICJbZmVPZmZzZXQiOyAKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwiIGR5
PVwiIiA8PCBkeSgpIDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCShy
ZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZz
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBTVkdGRU9mZnNldF9oCi0jZGVmaW5lIFNWR0ZFT2Zmc2V0X2gKLQotI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZFT2Zmc2V0
IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwotCi0gICAgZmxvYXQgZHgoKSBj
b25zdDsKLSAgICB2b2lkIHNldER4KGZsb2F0KTsKLQotICAgIGZsb2F0IGR5KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXREeShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKLQotICAgIGZsb2F0
IG1fZHg7Ci0gICAgZmxvYXQgbV9keTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZH
RkVPZmZzZXRfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc5NDkpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJT
VkdGRVNwZWN1bGFyTGlnaHRpbmcuaCIKLQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKLSAg
ICBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0
cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGln
aHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwg
c3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBs
aWdodFNvdXJjZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3Bl
Y3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAotICAgIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VT
Y2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKLSAgICAgICAga2VybmVs
VW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwotfQotCi1GRVNw
ZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKQotewotfQotCi1Db2xvciBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2xp
Z2h0aW5nQ29sb3I7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRMaWdodGluZ0Nv
bG9yKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQotewotICAgIG1fbGlnaHRpbmdDb2xvciA9
IGxpZ2h0aW5nQ29sb3I7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3VyZmFjZVNj
YWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdXJmYWNlU2NhbGU7Ci19Ci0KLXZvaWQgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewot
ICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotfQotCi1mbG9hdCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NwZWN1
bGFyQ29uc3RhbnQ7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNv
bnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17Ci0gICAgbV9zcGVjdWxhckNvbnN0YW50
ID0gc3BlY3VsYXJDb25zdGFudDsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzcGVj
dWxhckV4cG9uZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50Owot
fQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBz
cGVjdWxhckV4cG9uZW50KQotewotICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFyRXhw
b25lbnQ7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFgo
KSBjb25zdAotewotICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotfQotCi12b2lkIEZF
U3BlY3VsYXJMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExl
bmd0aFgpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhYOwot
fQotCi1mbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQotdm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQot
ewotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLX0KLQotY29u
c3QgTGlnaHRTb3VyY2UqIEZFU3BlY3VsYXJMaWdodGluZzo6bGlnaHRTb3VyY2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOwotfQotCi12b2lkIEZFU3BlY3VsYXJM
aWdodGluZzo6c2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3Vy
Y2UpCi17Ci0gICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOwotfQotCi12b2lkIEZFU3Bl
Y3VsYXJMaWdodGluZzo6ZHVtcCgpCi17Ci19Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdo
dGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlU3Bl
Y3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKLSAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwg
IlwiICIKLSAgICAgICA8PCAic3BlY3VhbENvbnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29uc3Rh
bnQgPDwgIlwiICIKLSAgICAgICA8PCAic3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxh
ckV4cG9uZW50IDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3OTQ5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdf
aAotI2RlZmluZSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5n
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNy
ZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJM
aWdodGluZygpOwotCi0gICAgQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOwotCi0gICAgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFudChm
bG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7Ci0KLSAgICBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsVW5pdExl
bmd0aFkoZmxvYXQpOwotCi0gICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9uIDY3OTQ5
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXgg
TWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVGls
ZS5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFVGlsZTo6RkVUaWxlKCkKLSAgICA6IEZpbHRlckVmZmVj
dCgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZSgpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGRVRpbGUpOwotfQotCi1GbG9hdFJlY3QgRkVUaWxlOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwot
Ci0gICAgZmlsdGVyLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24odGhpcywgZmls
dGVyLT5maWx0ZXJSZWdpb24oKSk7Ci0gICAgcmV0dXJuIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOwotfQotCi12b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwot
ICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZp
bHRlckNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgLy8gU291cmNl
IGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRl
clJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUlt
YWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0
aW9uLgotICAgIGlmIChpbi0+aXNTb3VyY2VJbnB1dCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwotICAgICAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgICAgICB0aWxlUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoZmlsdGVyUmVnaW9uKTsKLSAgICB9Ci0KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRp
bGVJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpKTsKLSAgICBHcmFw
aGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAg
ICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwotICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJu
ID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRydWUpOwot
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBtYXRyaXgudHJhbnNsYXRlKGluLT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgaW4tPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55
KCkpOwotICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShtYXRyaXgp
OwotCi0gICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7Ci0gICAgZmls
dGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpKTsKLX0KLQotdm9pZCBGRVRpbGU6OmR1bXAoKQot
ewotfQotCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7Ci0gICAgdHMgPDwgIltmZVRpbGUiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotCi0gICAgcmV0dXJuIHRzOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpZm5kZWYgU1ZHRkVUaWxlX2gKLSNkZWZpbmUgU1ZHRkVUaWxlX2gKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBG
RVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciop
OwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KEZpbHRlciopOwotICAgIAotcHJpdmF0ZToKLSAgICBGRVRpbGUoKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotCi0jZW5kaWYgLy8gU1ZHRkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDY3OTQ5KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNW
R0ZFVHVyYnVsZW5jZS5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vKgotICAgIFByb2R1Y2VzIHJl
c3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAgciA9
IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKLSAgICBt
ID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAgICBT
ZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4
OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAx
MDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9y
aWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0
MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIq
KjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoq
NTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3Nzcz
OyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKLQot
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX3R5
cGUodHlwZSkKLSAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgLCBt
X2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICwgbV9udW1PY3RhdmVzKG51bU9j
dGF2ZXMpCi0gICAgLCBtX3NlZWQoc2VlZCkKLSAgICAsIG1fc3RpdGNoVGlsZXMoc3RpdGNoVGls
ZXMpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZShUdXJidWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVu
Y3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0K
LQotVHVyYnVsYW5jZVR5cGUgRkVUdXJidWxlbmNlOjp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90eXBlOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxhbmNlVHlw
ZSB0eXBlKQotewotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLWZsb2F0IEZFVHVyYnVsZW5jZTo6
YmFzZUZyZXF1ZW5jeVkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Jhc2VGcmVxdWVuY3lZOwot
fQotCi12b2lkIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1
ZW5jeVkpCi17Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwotfQotCi1m
bG9hdCBGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lYKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iYXNlRnJlcXVlbmN5WDsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVu
Y3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQotewotICAgICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBi
YXNlRnJlcXVlbmN5WDsKLX0KLQotZmxvYXQgRkVUdXJidWxlbmNlOjpzZWVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zZWVkOyAKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKLXsKLSAgICBtX3NlZWQgPSBzZWVkOwotfQotCi1pbnQgRkVUdXJidWxlbmNlOjpu
dW1PY3RhdmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9udW1PY3RhdmVzOwotfQotCi12b2lk
IEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhib29sIG51bU9jdGF2ZXMpCi17Ci0gICAgbV9u
dW1PY3RhdmVzID0gbnVtT2N0YXZlczsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnN0aXRjaFRp
bGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGl0Y2hUaWxlczsKLX0KLQotdm9pZCBGRVR1
cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAgIG1fc3RpdGNoVGls
ZXMgPSBzdGl0Y2g7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMg
YW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZp
Y2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVy
YnVsZW5jZQotCi1GRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKGxvbmcg
cGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCi0gICAgOiBzZWVkKHBh
aW50aW5nU2VlZCkKLSAgICAsIHdpZHRoKDApCi0gICAgLCBoZWlnaHQoMCkKLSAgICAsIHdyYXBY
KDApCi0gICAgLCB3cmFwWSgwKQotICAgICwgY2hhbm5lbCgwKQotICAgICwgZmlsdGVyU2l6ZShw
YWludGluZ1NpemUpCi17Ci19Ci0KLS8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1p
bmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBs
b25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRS
ICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3Vs
dCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJu
IHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0KLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0
aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIg
LSBhKTsKLX0KLQotaW5saW5lIHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQot
ICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11
bSAtIDFdLgotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGlu
Z0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSAr
IDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAg
ICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCog
Z3JhZGllbnQ7Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5u
ZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAg
ICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAg
ICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5k
b20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwot
ICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0
YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tT
aXplOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHNxcnRmKGdyYWRpZW50WzBd
ICogZ3JhZGllbnRbMF0gKyBncmFkaWVudFsxXSAqIGdyYWRpZW50WzFdKTsKLSAgICAgICAgICAg
IGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFkaWVu
dFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAo
aW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAg
ICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFu
bmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtpXVswXTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtz
X2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFd
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBjaGVja05vaXNlKGludCYgbm9p
c2VWYWx1ZSwgaW50IGxpbWl0VmFsdWUsIGludCBuZXdWYWx1ZSkKLXsKLSAgICBpZiAobm9pc2VW
YWx1ZSA+PSBsaW1pdFZhbHVlKQotICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlOwotICAg
IGlmIChub2lzZVZhbHVlID49IGxpbWl0VmFsdWUgLSAxKQotICAgICAgICBub2lzZVZhbHVlIC09
IG5ld1ZhbHVlIC0gMTsKLX0KLQotZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKLXsKLSAg
ICBzdHJ1Y3QgTm9pc2UgewotICAgICAgICBpbnQgbm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsK
LSAgICAgICAgZmxvYXQgbm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWU7Ci0KLSAgICAgICAgTm9p
c2UoZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlv
biA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBu
b2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSA9IHBvc2l0aW9uIC0gbm9pc2VQb3NpdGlvbkludGVn
ZXJWYWx1ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZSBub2lzZVgobm9pc2VWZWN0
b3IueCgpKTsKLSAgICBOb2lzZSBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLSAgICBmbG9hdCog
cTsKLSAgICBmbG9hdCBzeCwgc3ksIGEsIGIsIHUsIHY7Ci0KLSAgICAvLyBJZiBzdGl0Y2hpbmcs
IGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0Y2hUaWxl
cykgewotICAgICAgICBjaGVja05vaXNlKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
LCBwYWludGluZ0RhdGEud3JhcFgsIHBhaW50aW5nRGF0YS53aWR0aCk7Ci0gICAgICAgIGNoZWNr
Tm9pc2Uobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUsIHBhaW50aW5nRGF0YS53cmFw
WSwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci0gICAgfQotCi0gICAgbm9pc2VYLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVd
OwotICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
clsobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxKSAmIHNfYmxvY2tNYXNrXTsK
LQotICAgIHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVl
KTsKLSAgICBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSk7Ci0KLSAgICAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLSAgICBp
bnQgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwotICAgIHUgPSBub2lzZVgubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlICogcVsxXTsKLSAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltu
ZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAg
IHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwot
ICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKLSAgICBhID0gbGluZWFy
SW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0gICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
KyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVs
XVt0ZW1wXTsKLSAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsw
XSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07Ci0gICAg
dGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07Ci0gICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Ci0gICAgdiA9IChub2lzZVgu
bm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyAobm9pc2VZLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOwotICAgIGIgPSBsaW5lYXJJbnRlcnBvbGF0
aW9uKHN4LCB1LCB2KTsKLSAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7
Ci19Ci0KLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFs
dWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCi17Ci0gICAgZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUu
d2lkdGgoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdo
dCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLmhlaWdodCgpOwotICAgIEFTU0VSVCh0aWxlSGVp
Z2h0ID4gMCk7Ci0gICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZyZXF1ZW5jaWVzIGlmIG5lY2Vzc2Fy
eSBmb3Igc3RpdGNoaW5nLgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIC8vIFdo
ZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFk
anVzdGVkCi0gICAgICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRp
bnVvdXMuCi0gICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgICAgICBmbG9h
dCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogbV9iYXNlRnJlcXVlbmN5WCkgLyB0
aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdp
ZHRoICogbV9iYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICAvLyBCYXNl
RnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFy
ZC4KLSAgICAgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGln
aEZyZXF1ZW5jeSAvIG1fYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAgICAgbV9iYXNlRnJl
cXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobV9iYXNlRnJlcXVlbmN5WSkgewotICAgICAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0g
Zmxvb3JmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAg
ICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIG1fYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZ
IC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIG1fYmFzZUZyZXF1ZW5jeVkpCi0gICAg
ICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZID0gaGlnaEZyZXF1ZW5jeTsK
LSAgICAgICAgfQotICAgICAgICAvLyBTZXQgdXAgVHVyYnVsZW5jZUluaXRpYWwgc3RpdGNoIHZh
bHVlcy4KLSAgICAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIG1f
YmFzZUZyZXF1ZW5jeVgpOwotICAgICAgICBwYWludGluZ0RhdGEud3JhcFggPSBzX3Blcmxpbk5v
aXNlICsgcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0g
cm91bmRmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVuY3lZKTsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgfQot
ICAgIGZsb2F0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IDA7Ci0gICAgRmxvYXRQb2ludCBu
b2lzZVZlY3Rvcihwb2ludC54KCkgKiBtX2Jhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBtX2Jh
c2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZl
ID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90
eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3Ip
IC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCArPSBmYWJzZihub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJhdGlv
OwotICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAg
ICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAq
PSAyOwotICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRl
IHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2VvaXNlIGJlZm9yZSB0aGUg
bXVsdGlwbGljYXRpb24gYW5kCi0gICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNp
bXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KLSAgICAgICAgICAgIHBhaW50aW5nRGF0
YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBYID0gMiAqIHBhaW50
aW5nRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEu
aGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSAyICogcGFpbnRp
bmdEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKLSAg
ICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4K
LSAgICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICog
MC41ZiArIDAuNWY7Ci0gICAgLy8gQ2xhbXAgcmVzdWx0Ci0gICAgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ID0gc3RkOjptYXgoc3RkOjptaW4odHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAxLmYp
LCAwLmYpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQgKiAyNTUpOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIpCi17Ci0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNp
emUoKSk7Ci0gICAgaWYgKCFpbWFnZVJlY3Quc2l6ZSgpLndpZHRoKCkgfHwgIWltYWdlUmVjdC5z
aXplKCkuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJl
Y3QuaGVpZ2h0KCkpOwotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCBpbWFn
ZVJlY3Quc2l6ZSgpKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwotICAgIEZsb2F0UG9p
bnQgcG9pbnQ7Ci0gICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdpb24ueSgpKTsKLSAgICBpbnQgaW5k
ZXhPZlBpeGVsQ2hhbm5lbCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZVJlY3Qu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwotICAg
ICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHBvaW50LnNldFgo
cG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBmb3IgKHBhaW50aW5nRGF0YS5jaGFubmVsID0g
MDsgcGFpbnRpbmdEYXRhLmNoYW5uZWwgPCA0OyArK3BhaW50aW5nRGF0YS5jaGFubmVsLCArK2lu
ZGV4T2ZQaXhlbENoYW5uZWwpCi0gICAgICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNl
dChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChw
YWludGluZ0RhdGEsIHBvaW50KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0SW1hZ2Uo
KS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJ
bnRQb2ludCgpKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQotewotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHVyYnVsYW5j
ZVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGRVRVUkJVTEVO
Q0VfVFlQRV9VTktOT1dOOgotICAgICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfVFVSQlVMRU5DRToKLSAgICAgICAgdHMgPDwg
IlRVUkJVTEFOQ0UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBF
X0ZSQUNUQUxOT0lTRToKLSAgICAgICAgdHMgPDwgIk5PSVNFIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewot
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJbZmVUdXJidWxlbmNlIjsK
LSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8
ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJhc2VGcmVxdWVuY3k9
XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5WSgpIDw8ICJc
IiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgotICAgICAgIDw8ICJu
dW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAgICA8PCAic3RpdGNo
VGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1
cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRVR1cmJ1bGVuY2VfaAotI2RlZmlu
ZSBTVkdGRVR1cmJ1bGVuY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotZW51bSBUdXJidWxhbmNlVHlwZSB7Ci0gICAgRkVUVVJCVUxFTkNF
X1RZUEVfVU5LTk9XTiA9IDAsCi0gICAgRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFID0g
MSwKLSAgICBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFID0gMgotfTsKLQotY2xhc3MgRkVU
dXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9h
dCwgaW50LCBmbG9hdCwgYm9vbCk7Ci0KLSAgICBUdXJidWxhbmNlVHlwZSB0eXBlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRUeXBlKFR1cmJ1bGFuY2VUeXBlKTsKLQotICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lZKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCk7Ci0KLSAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5j
eVgoZmxvYXQpOwotCi0gICAgZmxvYXQgc2VlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VlZChm
bG9hdCk7Ci0KLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0OwotICAgIHZvaWQgc2V0TnVtT2N0
YXZlcyhib29sKTsKLQotICAgIGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFN0aXRjaFRpbGVzKGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3Rh
dGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0cnVj
dCBQYWludGluZ0RhdGEgewotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNl
U2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRd
WzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBpbnQgd2lkdGg7IC8vIEhvdyBtdWNo
IHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IGhlaWdodDsK
LSAgICAgICAgaW50IHdyYXBYOyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGlu
dCB3cmFwWTsKLSAgICAgICAgaW50IGNoYW5uZWw7Ci0gICAgICAgIEludFNpemUgZmlsdGVyU2l6
ZTsKLQotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNp
emUmIHBhaW50aW5nU2l6ZSk7Ci0gICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOwotICAgIH07
Ci0KLSAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBm
bG9hdCwgYm9vbCk7Ci0KLSAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7
Ci0gICAgZmxvYXQgbm9pc2UyRChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0g
ICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGlu
Z0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBUdXJidWxhbmNlVHlwZSBtX3R5cGU7
Ci0gICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lZ
OwotICAgIGludCBtX251bU9jdGF2ZXM7Ci0gICAgZmxvYXQgbV9zZWVkOwotICAgIGJvb2wgbV9z
dGl0Y2hUaWxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVUdXJidWxlbmNl
X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3Vy
Y2UuY3BwCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhl
cmN6ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotI2luY2x1
ZGUgIlNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR1BvaW50TGlnaHRTb3Vy
Y2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHU3Bv
dExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFp
bnRpbmdEYXRhJikKLXsKLX0KLQotdm9pZCBQb2ludExpZ2h0U291cmNlOjp1cGRhdGVQYWludGlu
Z0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikK
LXsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAtIHgp
OwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0geSk7
Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6KTsK
LSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7Ci19Ci0KLS8vIHNwb3Qt
bGlnaHQgZWRnZSBkYXJrZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNvbHV0ZSB0cmVzaG9sZAotLy8g
YWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKLXN0YXRp
YyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKLQotdm9pZCBTcG90TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17
Ci0gICAgcGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3RvciA9IHBhaW50aW5nRGF0YS5jb2xv
clZlY3RvcjsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFgobV9kaXJlY3Rp
b24ueCgpIC0gbV9wb3NpdGlvbi54KCkpOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0
b3Iuc2V0WShtX2RpcmVjdGlvbi55KCkgLSBtX3Bvc2l0aW9uLnkoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmRpcmVjdGlvblZlY3Rvci5zZXRaKG1fZGlyZWN0aW9uLnooKSAtIG1fcG9zaXRpb24ueigp
KTsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOwotCi0gICAg
aWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0
T2ZmTGltaXQgPSAwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1h
bnRpQWxpYXNUcmVzaG9sZDsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBsaW1pdGluZ0Nv
bmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA8IDAuMGYpCi0gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IC1saW1pdGluZ0Nv
bmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlID4gOTAuMGYpCi0gICAgICAg
ICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEuY29u
ZUN1dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxpbWl0aW5nQ29uZUFuZ2xlKSk7
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVD
dXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOwotICAgIH0KLQotICAgIC8vIE9wdGltaXph
dGlvbiBmb3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVzCi0gICAgaWYgKCFtX3NwZWN1
bGFyRXhwb25lbnQpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMDsK
LSAgICBlbHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKLSAgICAgICAgcGFpbnRp
bmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOwotICAgIGVsc2UgLy8gSXQgaXMgbmVpdGhlciAw
LjBmIG5vciAxLjBmCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMjsK
LX0KLQotdm9pZCBTcG90TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KQotewotICAgIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7Ci0gICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5KTsKLSAgICBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHopOwotICAgIHBhaW50aW5nRGF0
YS5saWdodFZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGZsb2F0IGNvc2luZU9mQW5nbGUgPSBw
YWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yOwot
ICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCkgewot
ICAgICAgICAvLyBObyBsaWdodCBpcyBwcm9kdWNlZCwgc2NhbmxpbmVzIGFyZSBub3QgdXBkYXRl
ZAotICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WCgwLjBmKTsKLSAgICAgICAg
cGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFkoMC4wZik7Ci0gICAgICAgIHBhaW50aW5nRGF0
YS5jb2xvclZlY3Rvci5zZXRaKDAuMGYpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gU2V0IHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwKLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwot
ICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQpIHsKLSAgICBjYXNlIDA6
Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDAgPT0g
MQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAt
Y29zaW5lT2ZBbmdsZTsgLy8gLWNvc2luZU9mQW5nbGUgXiAxID09IC1jb3NpbmVPZkFuZ2xlCi0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSBwb3dm
KC1jb3NpbmVPZkFuZ2xlLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0
KQotICAgICAgICBsaWdodFN0cmVuZ3RoICo9IChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0
IC0gY29zaW5lT2ZBbmdsZSkgLyAocGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIHBhaW50
aW5nRGF0YS5jb25lRnVsbExpZ2h0KTsKLQotICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMS4wZikK
LSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7Ci0KLSAgICBwYWludGluZ0RhdGEuY29sb3JW
ZWN0b3Iuc2V0WChwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLngoKSAqIGxpZ2h0U3Ry
ZW5ndGgpOwotICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZKHBhaW50aW5nRGF0YS5w
cml2YXRlQ29sb3JWZWN0b3IueSgpICogbGlnaHRTdHJlbmd0aCk7Ci0gICAgcGFpbnRpbmdEYXRh
LmNvbG9yVmVjdG9yLnNldFoocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci56KCkgKiBs
aWdodFN0cmVuZ3RoKTsKLX0KLQotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgYXppbXV0aCA9
IGRlZzJyYWQobV9hemltdXRoKTsKLSAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxl
dmF0aW9uKTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChjb3NmKGF6aW11dGgp
ICogY29zZihlbGV2YXRpb24pKTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShz
aW5mKGF6aW11dGgpICogY29zZihlbGV2YXRpb24pKTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3Iuc2V0WihzaW5mKGVsZXZhdGlvbikpOwotfQotCi12b2lkIERpc3RhbnRMaWdodFNvdXJj
ZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCwgaW50LCBmbG9hdCkKLXsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEZsb2F0UG9pbnQzRCYgcCkKLXsKLSAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8
IHAueSgpIDw8ICIgej0iIDw8IHAueigpOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVh
bSYgUG9pbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9UE9JTlQtTElHSFRdICI7Ci0gICAgdHMgPDwg
Iltwb3NpdGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJdIjsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLVRleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsK
LSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHRz
IDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAi
W3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8PCAiXCJdIjsKLSAg
ICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0NvbmVBbmdsZSgpIDw8
ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291
cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAg
IHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIHRzIDw8ICJbYXppbXV0aD1cIiIg
PDwgYXppbXV0aCgpIDw8ICJcIl0iOwotICAgIHRzIDw8ICJbZWxldmF0aW9uPVwiIiA8PCBlbGV2
YXRpb24oKSA8PCAiXCJdIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaAkocmV2aXNp
b24gNjc5NDkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBTVkdMaWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0xpZ2h0U291
cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIExpZ2h0VHlwZSB7
Ci0gICAgTFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBMU19TUE9UCi19OwotCi1jbGFz
cyBUZXh0U3RyZWFtOwotCi1jbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExp
Z2h0U291cmNlPiB7Ci1wdWJsaWM6Ci0KLSAgICAvLyBMaWdodCB2ZWN0b3JzIG11c3QgYmUgY2Fs
Y3VsYXRlZCBmb3IgZXZlcnkgcGl4ZWwgZHVyaW5nCi0gICAgLy8gcGFpbnRpbmcuIEl0IGlzIGV4
cGVuc2l2ZSB0byBwYXNzIGFsbCB0aGVzZSBhcmd1bWVudHMgdG8KLSAgICAvLyBhIGZyZXF1ZW50
bHkgY2FsbGVkIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGJlY2F1c2Ugbm90IGFsbAotICAgIC8vIGxp
Z2h0IHNvdXJjZXMgcmVxdWlyZSBhbGwgb2YgdGhlbS4gSW5zdGVhZCwgd2UganVzdCBwYXNzCi0g
ICAgLy8gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKLSAgICBzdHJ1Y3Qg
UGFpbnRpbmdEYXRhIHsKLSAgICAgICAgLy8gU1ZHRkVMaWdodGluZyBhbHNvIHVzZSB0aGVtCi0g
ICAgICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKLSAgICAgICAgRmxvYXRQb2ludDNEIGNv
bG9yVmVjdG9yOwotICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMKLSAgICAgICAgRmxvYXRQb2lu
dDNEIGRpcmVjdGlvblZlY3RvcjsKLSAgICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xvclZl
Y3RvcjsKLSAgICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwotICAgICAgICBmbG9hdCBjb25l
RnVsbExpZ2h0OwotICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICB9OwotCi0gICAg
TGlnaHRTb3VyY2UoTGlnaHRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAg
eyB9Ci0KLSAgICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpIHsgfQotCi0gICAgTGlnaHRUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpID0gMDsKLSAgICAvLyB6IGlz
IGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEg
dXNlcgotICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlw
ZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopID0gMDsK
LQotcHJpdmF0ZToKLSAgICBMaWdodFR5cGUgbV90eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0KLSNl
bmRpZiAvLyBTVkdMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjc5NDkpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXgg
TWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFNWR1BvaW50TGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdQb2ludExpZ2h0U291cmNl
X2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xp
Z2h0U291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUG9pbnRMaWdodFNv
dXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50TGlnaHRTb3VyY2UocG9z
aXRpb24pKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGlu
Z0RhdGEoUGFpbnRpbmdEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0
YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwotCi0gICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV9wb3NpdGlv
bihwb3NpdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR1BvaW50TGlnaHRTb3VyY2VfaApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJj
ZS5oCShyZXZpc2lvbiA2Nzk0OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
U3BvdExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdTcG90TGlnaHRTb3VyY2VfaAotI2Rl
ZmluZSBTVkdTcG90TGlnaHRTb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTcG90TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQzRCYgcG9zaXRpb24sCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0aW9u
LCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7Ci0gICAg
fQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGlyZWN0aW9uOyB9Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAgZmxvYXQgbGltaXRpbmdDb25l
QW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2xpbWl0aW5nQ29uZUFuZ2xlOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
eik7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFNwb3RMaWdodFNvdXJjZShjb25zdCBG
bG9hdFBvaW50M0QmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwKLSAg
ICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi0g
ICAgICAgIDogTGlnaHRTb3VyY2UoTFNfU1BPVCkKLSAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0
aW9uKQotICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX3NwZWN1
bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0aW5nQ29uZUFu
Z2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50M0Qg
bV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9kaXJlY3Rpb247Ci0KLSAgICBmbG9hdCBt
X3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHU3BvdExpZ2h0U291cmNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68341</attachid>
            <date>2010-09-21 23:47:20 -0700</date>
            <delta_ts>2010-10-04 01:35:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46177-20100922084714.patch</filename>
            <type>text/plain</type>
            <size>350191</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMTAtMDktMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IEZpbHRlckVmZmVjdHMgaW5kZXBlbmRlbnQgb2YgU1ZHCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE3NworCisgICAgICAgIE1vdmluZyBhbGwgRmls
dGVyRWZmZWN0cyBmcm9tIHN2Zy9ncmFwaGljcy9maWx0ZXJzIHRvIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMsIG5vdyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIFNWRy4g
UmVtb3ZlZCB0aGUgU1ZHIHByZWZpeCBvZiB0aGUgZmlsZXMgYW5kIHVwZGF0ZWQgdGhlIGhlYWRl
cnMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRM
aWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVu
dE1hcC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
RGlzcGxhY2VtZW50TWFwLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUZsb29kLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmgu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDogQ29waWVkIGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR1BvaW50TGlnaHRTb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oLgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJp
eC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVy
YnVsZW5jZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUdXJidWxlbmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHTGlnaHRTb3VyY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0xpZ2h0U291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR1Nwb3RMaWdodFNvdXJjZS5oOiBSZW1vdmVkLgorCiAyMDEwLTA5LTIx
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMyw3ICs1MDMsMTggQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBcCiAJcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBcCi0JcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKwlwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VM
aWdodGluZy5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIFwKKwlwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAgXAorCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBcCisJcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIFwKKwlwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAogZW5kaWYKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCkBAIC05NTYsMjAgKzk2Nyw5IEBAIExPQ0FMX1NSQ19GSUxFUyA6
PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCVwKIAlzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIFwK
IAlcCi0Jc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAgXAotCXN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBcCi0Jc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUZsb29kLmNwcCBcCiAJc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwIFwKLQlzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU9mZnNldC5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAgXAotCXN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAgXAogCXN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAgXAotCXN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwIFwKLQlzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAKKwlzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAogZW5kaWYKIAogTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY4MDE2
KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTI1Nyw5ICsx
MjU3LDIxIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9JbWFnZUJ1ZmZlckZpbHRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogCkBAIC0xODEyLDIxICsxODI0LDkgQEAg
SUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIu
Y3BwCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCiAgICAgICAgIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVDb252b2x2ZU1hdHJpeC5jcHAKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVE
aWZmdXNlTGlnaHRpbmcuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlz
cGxhY2VtZW50TWFwLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29k
LmNwcAogICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAotICAgICAg
ICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAotICAgICAgICBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1vcnBob2xvZ3kuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
T2Zmc2V0LmNwcAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGln
aHRpbmcuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAKLSAg
ICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAogICAgICAgICBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiAgICAgICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0xpZ2h0U291cmNlLmNwcAogICAgICkKIEVORElGKCkKIApJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA2ODAxNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIw
ODcsNiArMjA4Nyw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2Uu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBcCkBAIC0yMDk1LDE3ICsyMDk2LDQzIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmggXAorCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludDNELmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCkBAIC0yODYxLDM5
ICsyODg4LDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdmcvQ29sb3JEaXN0
YW5jZS5oIFwKIAlXZWJDb3JlL3N2Zy9FbGVtZW50VGltZUNvbnRyb2wuaCBcCiAJV2ViQ29yZS9z
dmcvR3JhZGllbnRBdHRyaWJ1dGVzLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRGlzdGFudExpZ2h0U291cmNlLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVDb252b2x2ZU1hdHJpeC5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpZmZ1c2VMaWdodGluZy5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpc3BsYWNlbWVudE1hcC5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRmxvb2QuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2Qu
aCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBcCiAJV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggXAotCVdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFTWVyZ2UuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVy
Z2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3Bw
IFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oIFwKLQlX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcCBcCi0JV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgXAotCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmggXAotCVdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRVRpbGUuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1
bGVuY2UuY3BwIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5j
ZS5oIFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
IFwKIAlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBcCiAJ
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIFwKIAlXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdMaWdodFNvdXJjZS5oIFwKLQlXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Bv
aW50TGlnaHRTb3VyY2UuaCBcCi0JV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90
TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIFwKIAlX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIFwKIAlXZWJDb3JlL3N2Zy9MaW5lYXJHcmFk
aWVudEF0dHJpYnV0ZXMuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjM1Miw2ICsyMzUyLDcgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwJywKQEAgLTIzNjAsOCArMjM2MSwzNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJj
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGln
aHRTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oJywKQEAgLTM3NzEsMzkgKzM3OTgsMTIgQEAKICAgICAgICAgICAgICdzdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgnLAogICAgICAgICAgICAgJ3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRMaWdo
dFNvdXJjZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZv
bHZlTWF0cml4LmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVD
b252b2x2ZU1hdHJpeC5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpZmZ1c2VMaWdodGluZy5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRmxvb2QuaCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGlu
Zy5jcHAnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcu
aCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAnLAot
ICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaCcsCi0gICAgICAg
ICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcCcsCi0gICAgICAg
ICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmgnLAotICAgICAgICAg
ICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcCcsCi0gICAgICAgICAgICAn
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaCcsCi0gICAgICAgICAgICAnc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCcsCi0gICAgICAgICAgICAn
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgnLAotICAgICAgICAg
ICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAnLAotICAgICAgICAgICAgJ3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuaCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmgnLAotICAgICAgICAgICAgJ3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xp
Z2h0U291cmNlLmNwcCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGln
aHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRM
aWdodFNvdXJjZS5oJywKLSAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90
TGlnaHRTb3VyY2UuaCcsCiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCcs
CiAgICAgICAgICAgICAnc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgnLAogICAgICAgICAgICAgJ3N2
Zy9Db2xvckRpc3RhbmNlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTk4MSw4ICsxOTgxLDIwIEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKQEAgLTIy
NzQsMjEgKzIyODYsOSBAQCBIRUFERVJTICs9IFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1l
LmggXAogICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaCBcCiAgICAgc3ZnL0NvbG9y
RGlzdGFuY2UuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJp
eC5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oIFwK
LSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oIFwKLSAgICBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmggXAogICAgIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGlu
Zy5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmggXAotICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRU9mZnNldC5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmcuaCBcCi0gICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmggXAot
ICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oIFwKICAgICBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggXAogICAgIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5oIFwKLSAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJj
ZS5oIFwKICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCBcCiAgICAgc3ZnL1NWR0FFbGVtZW50
LmggXAogICAgIHN2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuaCBcCkBAIC0zMTA2LDggKzMxMDYsMjAg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTFRFUlM9MSkgewogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBcCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgXAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIFwK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAgXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKIH0KQEAgLTMzNzYs
MjEgKzMzODgsOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAg
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
Y3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5j
cHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5j
cHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5j
cHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcCBcCiAgICAg
ICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIFwKLSAgICAgICAgc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1lcmdlLmNwcCBcCi0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTW9ycGhvbG9neS5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9m
ZnNldC5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGln
aHRpbmcuY3BwIFwKLSAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcCBc
Ci0gICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5jcHAgXAogICAg
ICAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIFwKICAgICAgICAgc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgXAotICAgICAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwIFwK
ICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjk0Nyw2ICsyNjk0Nyw5
OCBAQAogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRGlzdGFudExpZ2h0U291cmNlLmgi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVDb252b2x2ZU1hdHJpeC5jcHAiDQor
CQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVDb252b2x2ZU1hdHJpeC5oIg0KKwkJCQkJ
CT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFRGlmZnVzZUxpZ2h0aW5nLmNwcCINCisJCQkJCQk+
DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRURpZmZ1c2VMaWdodGluZy5oIg0KKwkJCQkJCT4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xmaWx0ZXJzXEZFRGlzcGxhY2VtZW50TWFwLmNwcCINCisJCQkJCQk+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZmlsdGVyc1xGRURpc3BsYWNlbWVudE1hcC5oIg0KKwkJCQkJCT4NCisJCQkJCTwv
RmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xmaWx0ZXJzXEZFRmxvb2QuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJ
CTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJz
XEZFRmxvb2QuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUxpZ2h0aW5nLmNw
cCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGRUxpZ2h0aW5nLmgiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVNZXJnZS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9G
aWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGZpbHRlcnNcRkVNZXJnZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxG
aWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZF
TW9ycGhvbG9neS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVNb3JwaG9s
b2d5LmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVPZmZzZXQuY3BwIg0KKwkJ
CQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFT2Zmc2V0LmgiDQorCQkJCQkJPg0KKwkJCQkJ
PC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGZpbHRlcnNcRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCINCisJCQkJCQk+DQorCQkJCQk8
L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZmlsdGVyc1xGRVNwZWN1bGFyTGlnaHRpbmcuaCINCisJCQkJCQk+DQorCQkJCQk8L0Zp
bGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZmlsdGVyc1xGRVRpbGUuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxG
aWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZF
VGlsZS5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZFVHVyYnVsZW5jZS5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVUdXJidWxlbmNlLmgiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRmlsdGVyLmgiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxl
Pg0KQEAgLTI2OTY3LDYgKzI3MDU5LDE4IEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJ
CQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVy
c1xMaWdodFNvdXJjZS5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUN
CisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcTGlnaHRT
b3VyY2UuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xQb2ludExpZ2h0U291cmNl
LmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcU291cmNlQWxwaGEuY3BwIg0KIAkJ
CQkJCT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0yNjk4Miw2ICsyNzA4NiwxMCBAQAogCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFNvdXJjZUdyYXBoaWMuaCIN
CiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xTcG90TGlnaHRTb3VyY2UuaCINCisJCQkJ
CQk+DQorCQkJCQk8L0ZpbGU+DQogCQkJCTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJCTxG
aWx0ZXINCkBAIC01MTE0Myw0MiArNTEyNTEsNiBAQAogCQkJCQlOYW1lPSJmaWx0ZXJzIg0KIAkJ
CQkJPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xm
aWx0ZXJzXFNWR0Rpc3RhbnRMaWdodFNvdXJjZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4N
Ci0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVy
c1xTVkdGRUNvbnZvbHZlTWF0cml4LmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJ
CQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZH
RkVDb252b2x2ZU1hdHJpeC5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxl
DQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdGRURpZmZ1
c2VMaWdodGluZy5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0J
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFRGlzcGxhY2VtZW50TWFw
LmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCIN
Ci0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVGbG9vZC5jcHAiDQotCQkJCQkJPg0KLQkJ
CQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFw
aGljc1xmaWx0ZXJzXFNWR0ZFRmxvb2QuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJ
CQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZH
RkVJbWFnZS5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KQEAgLTUxMTg3LDYyICs1MTI1
OSw2IEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVMaWdodGluZy5jcHAiDQotCQkJ
CQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFTGlnaHRpbmcuaCINCi0JCQkJCQk+DQotCQkJCQk8
L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNz
XGZpbHRlcnNcU1ZHRkVNZXJnZS5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJ
PEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZF
TWVyZ2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVNb3JwaG9sb2d5LmNwcCIN
Ci0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVNb3JwaG9sb2d5LmgiDQotCQkJCQkJPg0K
LQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xn
cmFwaGljc1xmaWx0ZXJzXFNWR0ZFT2Zmc2V0LmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+
DQotCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRl
cnNcU1ZHRkVPZmZzZXQuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0K
LQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFVGlsZS5jcHAiDQotCQkJ
CQkJPg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN2Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0ZFVGlsZS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmls
ZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmls
dGVyc1xTVkdGRVR1cmJ1bGVuY2UuY3BwIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJ
CTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdG
RVR1cmJ1bGVuY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRmlsdGVyLmNwcCIN
CiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtNTEyNTgsMjIgKzUxMjc0LDYgQEAKIAkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNcU1ZHRmlsdGVyQnVpbGRlci5o
Ig0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCi0JCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdmdcZ3JhcGhpY3NcZmlsdGVyc1xTVkdMaWdodFNvdXJjZS5jcHAiDQotCQkJCQkJ
Pg0KLQkJCQkJPC9GaWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2
Z1xncmFwaGljc1xmaWx0ZXJzXFNWR0xpZ2h0U291cmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9G
aWxlPg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xncmFwaGljc1xm
aWx0ZXJzXFNWR1BvaW50TGlnaHRTb3VyY2UuaCINCi0JCQkJCQk+DQotCQkJCQk8L0ZpbGU+DQot
CQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnNc
U1ZHU3BvdExpZ2h0U291cmNlLmgiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxlPg0KIAkJCQk8L0Zp
bHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCTwvRmlsdGVyPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc5
LDYgKzE0NzksMzMgQEAKIAkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRjcwRkQy
NjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovOyB9OwogCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovOyB9
OwogCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGQTBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmggKi87IH07CisJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBE
aXN0YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2Uu
aCAqLzsgfTsKKwkJODQ3MzBENzgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBE
NUIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguY3BwICovOyB9OworCQk4NDcz
MEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKKwkJODQ3MzBEN0ExMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdo
dGluZy5jcHAgKi87IH07CisJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VM
aWdodGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ3MzBENUUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IH07CisJ
CTg0NzMwRDdDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1RjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuY3BwICovOyB9OworCQk4NDczMEQ3RDEyNDhG
MEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURp
c3BsYWNlbWVudE1hcC5oICovOyB9OworCQk4NDczMEQ3RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVG
bG9vZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDczMEQ2MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5jcHAgKi87IH07CisJCTg0NzMwRDdG
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5o
ICovOyB9OworCQk4NDczMEQ4MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MzEyNDhG
MEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5jcHAgKi87IH07CisJCTg0NzMwRDgxMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oICov
OyB9OworCQk4NDczMEQ4MjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVNZXJnZS5jcHAgKi87IH07CisJCTg0NzMwRDgzMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oICovOyB9OworCQk4NDczMEQ4
NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY3MTI0OEYwQjMwMEQzQTlDOSAvKiBG
RU1vcnBob2xvZ3kuY3BwICovOyB9OworCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVN
b3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IH07CisJCTg0
NzMwRDg2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2OTEyNDhGMEIzMDBEM0E5QzkgLyog
RkVPZmZzZXQuY3BwICovOyB9OworCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZz
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4ODEyNDhG
MEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZCMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RVNwZWN1bGFyTGlnaHRpbmcuY3BwICovOyB9OworCQk4NDczMEQ4OTEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0
aW5nLmggKi87IH07CisJCTg0NzMwRDhBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkQxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5jcHAgKi87IH07CisJCTg0NzMwRDhCMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLzsgfTsKKwkJODQ3
MzBEOEMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2RjEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVUdXJidWxlbmNlLmNwcCAqLzsgfTsKKwkJODQ3MzBEOEQxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFVHVyYnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovOyB9Owor
CQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzMxMjQ4RjBCMzAwRDNB
OUM5IC8qIExpZ2h0U291cmNlLmNwcCAqLzsgfTsKKwkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5
IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLzsgfTsK
KwkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc1MTI0OEYwQjMw
MEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi87IH07CisJCTg0NzMwRDkzMTI0OEYwQjMw
MEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRT
b3VyY2UuaCAqLzsgfTsKIAkJODQ3NkM5RTUxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdM
aXN0QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDc2QzlFMzExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNw
cCAqLzsgfTsKIAkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3
NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oICovOyB9Owog
CQk4NDc2QzlFQTExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3NkM5RTcxMURGNkEyOTAw
NTU1QjAyIC8qIFNWR1BhdGhCdWlsZGVyLmNwcCAqLzsgfTsKQEAgLTI5MDgsNyArMjkzNSw2IEBA
CiAJCUE3RDIwRjYyMTA3RjQwNjkwMEE4MDM5MiAvKiBKU1dlYkdMQWN0aXZlSW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QyMEY2MDEwN0Y0
MDY5MDBBODAzOTIgLyogSlNXZWJHTEFjdGl2ZUluZm8uY3BwICovOyB9OwogCQlBN0QyMEY2MzEw
N0Y0MDY5MDBBODAzOTIgLyogSlNXZWJHTEFjdGl2ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDIwRjYxMTA3RjQwNjkwMEE4MDM5MiAvKiBK
U1dlYkdMQWN0aXZlSW5mby5oICovOyB9OwogCQlBN0QyMEY2RDEwN0Y0MzhCMDBBODAzOTIgLyog
V2ViR0xBY3RpdmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmggKi87
IH07Ci0JCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjdGQzMwRTBBNTk5RjAw
NzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgKi87IH07CiAJCUE3RDNDNTI0MEI1NzZCNEIwMDJDQTQ1
MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZCMzQ3MEY2MTEwNDUwMEI3
OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLzsgfTsKIAkJQTdENkIzNEEwRjYxMTA0NTAw
Qjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyLmNwcCAqLzsgfTsKQEAgLTQwNDgsMzIgKzQwNzQsOCBAQAogCQlCMjM3QzhB
ODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdDOEE2MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdG
b250RGF0YS5oICovOyB9OwogCQlCMjQwNTU2NTBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxl
bWVudEluc3RhbmNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNDA1NTYzMEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VJbnRlcm5hbC5oICovOyB9OwogCQlCMjQwNTU2NjBCNUJFNjQwMDAyQTI4QzAgLyogRE9N
U1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjQwNTU2NDBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZH
RWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggKi87IH07Ci0JCUIyNTU5OTcxMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEQ3MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdE
aXN0YW50TGlnaHRTb3VyY2UuaCAqLzsgfTsKLQkJQjI1NTk5N0EwRDAwRDhCQTAwQkI4MjVDIC8q
IFNWR0ZFQ29udm9sdmVNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI1NTk4RTAwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVN
YXRyaXguY3BwICovOyB9OwotCQlCMjU1OTk3QjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVDb252
b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI1NTk4RTEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRyaXguaCAqLzsg
fTsKLQkJQjI1NTk5N0MwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEUy
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5jcHAgKi87IH07Ci0JCUIy
NTU5OTdEMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RTMwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IH07Ci0JCUIyNTU5OTdFMEQwMEQ4
QkEwMEJCODI1QyAvKiBTVkdGRURpc3BsYWNlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFNDBEMDBEOEI5MDBCQjgyNUMgLyog
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwICovOyB9OwotCQlCMjU1OTk3RjBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEU1MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRURpc3Bs
YWNlbWVudE1hcC5oICovOyB9OwotCQlCMjU1OTk4MDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVG
bG9vZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjU1OThFNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVGbG9vZC5jcHAgKi87IH07Ci0JCUIyNTU5
OTgxMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUZsb29kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFNzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
RkVGbG9vZC5oICovOyB9OwogCQlCMjU1OTk4NDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgKi87IH07CiAJCUIyNTU5OTg1
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJ
bWFnZS5oICovOyB9OwotCQlCMjU1OTk4NjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThF
QzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5jcHAgKi87IH07Ci0JCUIyNTU5OTg3MEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFRDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJn
ZS5oICovOyB9OwotCQlCMjU1OTk4ODBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVNb3JwaG9sb2d5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OEVFMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuY3BwICovOyB9OwotCQlCMjU1
OTk4OTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFRjBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHRkVNb3JwaG9sb2d5LmggKi87IH07Ci0JCUIyNTU5OThBMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRU9mZnNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjU1OThGMDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVPZmZzZXQuY3BwICovOyB9
OwotCQlCMjU1OTk4QjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVPZmZzZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEYxMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRU9mZnNldC5oICovOyB9OwotCQlCMjU1OTk4QzBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEYyMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRVNwZWN1
bGFyTGlnaHRpbmcuY3BwICovOyB9OwotCQlCMjU1OTk4RDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjU1OThGMzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nLmggKi87IH07Ci0JCUIyNTU5OThFMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRVRpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEY0MEQw
MEQ4QjkwMEJCODI1QyAvKiBTVkdGRVRpbGUuaCAqLzsgfTsKLQkJQjI1NTk5OEYwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThGNTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVUdXJi
dWxlbmNlLmNwcCAqLzsgfTsKLQkJQjI1NTk5OTAwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFVHVy
YnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk4RjYwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFVHVyYnVsZW5jZS5oICovOyB9OwotCQlC
MjU1OTk5MzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RjkwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0xpZ2h0U291cmNlLmNwcCAqLzsgfTsKLQkJQjI1NTk5OTQwRDAwRDhCQTAwQkI4
MjVDIC8qIFNWR0xpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjU1OThGQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2Uu
aCAqLzsgfTsKLQkJQjI1NTk5OTUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OEZCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdQb2ludExpZ2h0U291cmNlLmggKi87IH07Ci0JCUIy
NTU5OTk2MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdTcG90TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEZDMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdTcG90TGlnaHRTb3VyY2UuaCAqLzsgfTsKIAkJQjI1NTk5QTMwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNTU5OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAgKi87
IH07CiAJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEMwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0ltYWdlLmggKi87IH07CiAJCUIyNTU5OUE1MEQwMEQ4QkEwMEJCODI1QyAvKiBF
bXB0eUNsaWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLzsgfTsKQEAg
LTUyOTEsOCArNTI5Myw2IEBACiAJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRH
bG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxRkY1N0E1MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmNwcCAqLzsg
fTsKIAkJRTQxNUYxNjkwRDlBMTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxNUYxNjgw
RDlBMTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5oICovOyB9OwogCQlFNDE1
RjE4NDBEOUExQTgzMDAzM0NFOTcgLyogRWxlbWVudFRpbWVDb250cm9sLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE4MzBEOUExQTgzMDAzM0NF
OTcgLyogRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07Ci0JCUU0NDBBMkQ1MTE5MUE1MEIwMDA4
MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NDBBMkQ0MTE5MUE1MEIwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5n
LmNwcCAqLzsgfTsKLQkJRTQ0MEEyRDcxMTkxQTUyMzAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBBMkQ2
MTE5MUE1MjMwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmggKi87IH07CiAJCUU0NDYxM0ExMENE
NjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBI
VE1MQXVkaW9FbGVtZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIwQ0Q2MzMxMDAwRkFEQTc1IC8q
IEhUTUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50Lmgg
Ki87IH07CiAJCUU0NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzky
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTc0NDIs
NiArNzQ0MiwzMyBAQAogCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlci5oOyBwYXRoID0gZmlsdGVycy9G
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ1RTcyRjkwRkQyNjIzOTAw
QTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDVFNzJG
QTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDcz
MEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3RhbnRMaWdodFNvdXJjZS5oOyBwYXRoID0gZmlsdGVy
cy9EaXN0YW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3
MzBENUIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVDb252b2x2ZU1hdHJpeC5jcHA7IHBhdGggPSBm
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHBhdGggPSBmaWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3
MzBENUQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZFRGlmZnVzZUxpZ2h0aW5nLmNwcDsgcGF0aCA9
IGZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4NDczMEQ1RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRkVEaWZmdXNlTGlnaHRpbmcuaDsgcGF0aCA9
IGZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODQ3MzBENUYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZFRGlzcGxhY2VtZW50TWFwLmNwcDsg
cGF0aCA9IGZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NDczMEQ2MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRkVEaXNwbGFjZW1lbnRNYXAuaDsg
cGF0aCA9IGZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODQ3MzBENjExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRmxvb2QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVGbG9vZC5jcHA7IHBhdGggPSBmaWx0ZXJz
L0ZFRmxvb2QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2MjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGRUZsb29kLmg7IHBhdGggPSBmaWx0ZXJzL0ZFRmxvb2QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODQ3MzBENjMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVMaWdodGluZy5jcHA7IHBhdGgg
PSBmaWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGRUxpZ2h0aW5nLmg7IHBhdGggPSBmaWx0ZXJzL0ZFTGlnaHRpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENjUxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFTWVyZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVN
ZXJnZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFTWVyZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGRU1lcmdlLmg7IHBhdGggPSBmaWx0ZXJzL0ZFTWVy
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENjcxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFTW9ycGhvbG9neS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGRU1vcnBob2xvZ3kuY3BwOyBwYXRoID0gZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyog
RkVNb3JwaG9sb2d5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFTW9ycGhv
bG9neS5oOyBwYXRoID0gZmlsdGVycy9GRU1vcnBob2xvZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODQ3MzBENjkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZFT2Zmc2V0LmNwcDsgcGF0aCA9IGZp
bHRlcnMvRkVPZmZzZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2
QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRkVPZmZzZXQuaDsgcGF0aCA9IGZpbHRlcnMvRkVPZmZzZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENkIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwOyBwYXRoID0gZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ2QzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZFU3BlY3VsYXJMaWdodGluZy5oOyBwYXRoID0gZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENkQxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFVGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGRVRp
bGUuY3BwOyBwYXRoID0gZmlsdGVycy9GRVRpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFVGlsZS5oOyBwYXRoID0gZmlsdGVycy9GRVRpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFVHVyYnVsZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
RVR1cmJ1bGVuY2UuY3BwOyBwYXRoID0gZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJi
dWxlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFVHVyYnVsZW5jZS5o
OyBwYXRoID0gZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODQ3MzBENzMxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpZ2h0U291cmNlLmNwcDsgcGF0aCA9IGZp
bHRlcnMvTGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDcz
MEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTGlnaHRTb3VyY2UuaDsgcGF0aCA9IGZpbHRlcnMvTGlnaHRTb3VyY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5
IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UG9pbnRMaWdodFNvdXJjZS5oOyBwYXRoID0gZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBT
cG90TGlnaHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3BvdExp
Z2h0U291cmNlLmg7IHBhdGggPSBmaWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NDc2QzlFMzExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1BhdGhTZWdMaXN0QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0
NzZDOUU0MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzZDOUU3MTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQ
YXRoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQ
YXRoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04ODE3LDcgKzg4
NDQsNiBAQAogCQlBN0QyMEY2MDEwN0Y0MDY5MDBBODAzOTIgLyogSlNXZWJHTEFjdGl2ZUluZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEFjdGl2ZUlu
Zm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0QyMEY2MTEwN0Y0MDY5MDBB
ODAzOTIgLyogSlNXZWJHTEFjdGl2ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTEFjdGl2ZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEFjdGl2ZUluZm8uaDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTEFjdGl2ZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdEMjdGQzMw
RTBBNTk5RjAwNzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGRVRpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkSGVscGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3RDZCMzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3Jp
cHRMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyU2NyaXB0
TG9hZGVyLmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2Ny
aXB0TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtl
clNjcmlwdExvYWRlci5jcHA7IHBhdGggPSB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODQ0LDMyICs5ODcwLDggQEAKIAkJQjIz
N0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjQwNTU2MzBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJ
bnN0YW5jZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNDA1NTY0
MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxp
c3RJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThENzBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHRGlzdGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdEaXN0YW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RTAwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVN
YXRyaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFQ29u
dm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFMTBE
MDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVDb252b2x2ZU1hdHJpeC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVDb252b2x2ZU1hdHJpeC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMjU1OThFMjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGln
aHRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RTMw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURpZmZ1c2VMaWdodGluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMjU1OThFNDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZF
RGlzcGxhY2VtZW50TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4
RTUwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRURpc3BsYWNlbWVudE1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVGbG9v
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVGbG9vZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEU3MEQwMEQ4QjkwMEJCODI1
QyAvKiBTVkdGRUZsb29kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdG
RUZsb29kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OEVBMEQwMEQ4Qjkw
MEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdGRUltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1
NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0ZFSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjI1NTk4RUMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFTWVyZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFTWVyZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMjU1OThFRDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVNZXJnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFRTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVN
b3JwaG9sb2d5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdG
RU1vcnBob2xvZ3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThFRjBE
MDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNb3JwaG9sb2d5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdGRU1vcnBob2xvZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjI1NTk4RjAwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGRU9mZnNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEYxMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU9m
ZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVPZmZzZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RjIwRDAwRDhCOTAwQkI4MjVDIC8q
IFNWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjI1NTk4RjMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEY0MEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRVRpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0ZFVGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjU1OThGNTBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGRVR1cmJ1bGVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjU1OThGNjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVUdXJidWxlbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRVR1cmJ1bGVuY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RjkwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0xp
Z2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdM
aWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNTU5OEZBMEQw
MEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHTGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjI1NTk4RkIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1BvaW50TGlnaHRTb3VyY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BvaW50TGlnaHRTb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI1NTk4RkMwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R1Nwb3RMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
U3BvdExpZ2h0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OTBC
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjU1OTkwQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5Q2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTExNTksOCArMTExNjEsNiBAQAogCQlFNDE1RjE4MzBEOUExQTgzMDAz
M0NFOTcgLyogRWxlbWVudFRpbWVDb250cm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVsZW1lbnRUaW1lQ29udHJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDFFQTAzODExOTgzNkRCMDA3MTBCQzUgLyogQ1NTUHJvcGVydHlOYW1lcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0eU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQxRUEwMzkxMTk4Mzc0OTAwNzEwQkM1IC8qIENT
U1ZhbHVlS2V5d29yZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTVmFsdWVLZXl3b3Jkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0NDBB
MkQ0MTE5MUE1MEIwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFTGlnaHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDQwQTJENjExOTFBNTIzMDAwODIwQjAgLyogU1ZHRkVMaWdodGluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUxpZ2h0aW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1M
QXVkaW9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxBdWRpb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTM5
MDBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NDYxMzkxMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTY1LDYgKzE0NTY1LDMzIEBACiAJCUE3NUU4QjdGMEUx
REUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0
U291cmNlLmggKi8sCisJCQkJODQ3MzBENUIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVN
YXRyaXguY3BwICovLAorCQkJCTg0NzMwRDVDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZl
TWF0cml4LmggKi8sCisJCQkJODQ3MzBENUQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxp
Z2h0aW5nLmNwcCAqLywKKwkJCQk4NDczMEQ1RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNl
TGlnaHRpbmcuaCAqLywKKwkJCQk4NDczMEQ1RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwICovLAorCQkJCTg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3Bs
YWNlbWVudE1hcC5oICovLAorCQkJCTg0NzMwRDYxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29k
LmNwcCAqLywKKwkJCQk4NDczMEQ2MjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oICovLAor
CQkJCTg0NzMwRDYzMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmNwcCAqLywKKwkJCQk4
NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovLAorCQkJCTg0NzMwRDY1
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmNwcCAqLywKKwkJCQk4NDczMEQ2NjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVNZXJnZS5oICovLAorCQkJCTg0NzMwRDY3MTI0OEYwQjMwMEQzQTlDOSAv
KiBGRU1vcnBob2xvZ3kuY3BwICovLAorCQkJCTg0NzMwRDY4MTI0OEYwQjMwMEQzQTlDOSAvKiBG
RU1vcnBob2xvZ3kuaCAqLywKKwkJCQk4NDczMEQ2OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZz
ZXQuY3BwICovLAorCQkJCTg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICov
LAorCQkJCTg0NzMwRDZCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
ICovLAorCQkJCTg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcu
aCAqLywKKwkJCQk4NDczMEQ2RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmNwcCAqLywKKwkJ
CQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCisJCQkJODQ3MzBENkYx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCisJCQkJODQ3MzBENzAxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAorCQkJCTg0NzMwRDczMTI0OEYwQjMw
MEQzQTlDOSAvKiBMaWdodFNvdXJjZS5jcHAgKi8sCisJCQkJODQ3MzBENzQxMjQ4RjBCMzAwRDNB
OUM5IC8qIExpZ2h0U291cmNlLmggKi8sCisJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8q
IFBvaW50TGlnaHRTb3VyY2UuaCAqLywKKwkJCQk4NDczMEQ3NjEyNDhGMEIzMDBEM0E5QzkgLyog
U3BvdExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZF
QmxlbmQuY3BwICovLAogCQkJCUE3NUU4QjgxMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmgg
Ki8sCiAJCQkJQTc1RThCODIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguY3BwICov
LApAQCAtMTU4NTcsMzkgKzE1ODg0LDEyIEBACiAJCUIyNTU5ODlDMEQwMEQ4QjgwMEJCODI1QyAv
KiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQlCMjU1OThENzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRGlzdGFudExpZ2h0U291cmNlLmggKi8s
Ci0JCQkJQjI1NTk4RTAwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFQ29udm9sdmVNYXRyaXguY3Bw
ICovLAotCQkJCUIyNTU5OEUxMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4
LmggKi8sCi0JCQkJQjI1NTk4RTIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcCAqLywKLQkJCQlCMjU1OThFMzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuaCAqLywKLQkJCQlCMjU1OThFNDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVEaXNw
bGFjZW1lbnRNYXAuY3BwICovLAotCQkJCUIyNTU5OEU1MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RURpc3BsYWNlbWVudE1hcC5oICovLAotCQkJCUIyNTU5OEU2MEQwMEQ4QjkwMEJCODI1QyAvKiBT
VkdGRUZsb29kLmNwcCAqLywKLQkJCQlCMjU1OThFNzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVG
bG9vZC5oICovLAogCQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNw
cCAqLywKIAkJCQlCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovLAot
CQkJCUU0NDBBMkQ0MTE5MUE1MEIwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmNwcCAqLywKLQkJ
CQlFNDQwQTJENjExOTFBNTIzMDAwODIwQjAgLyogU1ZHRkVMaWdodGluZy5oICovLAotCQkJCUIy
NTU5OEVDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRU1lcmdlLmNwcCAqLywKLQkJCQlCMjU1OThF
RDBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5oICovLAotCQkJCUIyNTU5OEVFMEQwMEQ4
QjkwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuY3BwICovLAotCQkJCUIyNTU5OEVGMEQwMEQ4
QjkwMEJCODI1QyAvKiBTVkdGRU1vcnBob2xvZ3kuaCAqLywKLQkJCQlCMjU1OThGMDBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHRkVPZmZzZXQuY3BwICovLAotCQkJCUIyNTU5OEYxMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRU9mZnNldC5oICovLAotCQkJCUIyNTU5OEYyMEQwMEQ4QjkwMEJCODI1QyAv
KiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwICovLAotCQkJCUIyNTU5OEYzMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLywKLQkJCQlBN0QyN0ZDMzBFMEE1OTlG
MDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAqLywKLQkJCQlCMjU1OThGNDBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHRkVUaWxlLmggKi8sCi0JCQkJQjI1NTk4RjUwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ZFVHVyYnVsZW5jZS5jcHAgKi8sCi0JCQkJQjI1NTk4RjYwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ZFVHVyYnVsZW5jZS5oICovLAogCQkJCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuY3BwICovLAogCQkJCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCAqLywKIAkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5j
cHAgKi8sCiAJCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIu
aCAqLywKLQkJCQlCMjU1OThGOTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuY3Bw
ICovLAotCQkJCUIyNTU5OEZBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdMaWdodFNvdXJjZS5oICov
LAotCQkJCUIyNTU5OEZCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdQb2ludExpZ2h0U291cmNlLmgg
Ki8sCi0JCQkJQjI1NTk4RkMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1Nwb3RMaWdodFNvdXJjZS5o
ICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTIwMTg0LDcgKzIwMTg0LDYgQEAKIAkJCQlCMjIyNzlBODBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQ3Vyc29yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5QUUwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0RlZnNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlC
MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVzY0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUIyNTU5OTcxMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3OUI0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEb2N1bWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjI4QzZBMjgwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5QjcwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAxOTksMTQgKzIwMTk4LDEw
IEBACiAJCQkJQjIyMjc5Q0IwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlDRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUQx
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyNTU5OTdCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxOTIxMzI3NTExQzBFNkJCMDA0NTYyMzggLyogU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OTdEMEQwMEQ4QkEw
MEJCODI1QyAvKiBTVkdGRURpZmZ1c2VMaWdodGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
Mjc5RDQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5N0YwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFRGlzcGxh
Y2VtZW50TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlENzBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
NzlEQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCMjU1OTk4MTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVGbG9vZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5REQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRmxvb2RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlFMDBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRkVGdW5jQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUUzMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRUZ1bmNCRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDIxNiwy
MSArMjAyMTEsMTQgQEAKIAkJCQlCMjU1OTk4NTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RUYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
SW1hZ2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlGMjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NDBBMkQ3MTE5
MUE1MjMwMDA4MjBCMCAvKiBTVkdGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1
OTk4NzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5RjQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTWVyZ2VFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyNzlGNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk4OTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZH
RkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDIyNDE5NDEwN0U3OEE3MDA3NjZB
ODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5
OEIwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjIyNzlGQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVPZmZzZXRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyNzlGRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVQb2ludExpZ2h0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI1NTk5OEQwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R0ZFU3BlY3VsYXJMaWdodGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDAwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OThFMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRVRp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
RVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk5MDBEMDBEOEJBMDBCQjgy
NUMgLyogU1ZHRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwOTBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjAyNTksNyArMjAyNDcsNiBAQAogCQkJCUIyMjI3QTMwMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdMYW5nU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTMzMEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdMZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTM2
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlC
MjU1OTk5NDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTM5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTNDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdM
aW5lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBM0UwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjAzMDMsNyArMjAyOTAsNiBAQAogCQkJ
CTg0MzAwQkQ2MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NEM1QjJGQjEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNh
bFN0YXRlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODgwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1BhdHRlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjU1OTk5NTBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHUG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBOEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBOEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0E5MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWdvbkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAzMjQsNyArMjAzMTAsNiBAQAogCQkJCUIyMjI3
QUE2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOERBQjlDMzExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNEFGRDAxMDBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNTU5OTk2MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdT
cG90TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUE5MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdTdG9wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QUFGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHlsYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MDU4Miw2ICsyMDU2NywyMSBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZF
MDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBENzcxMjQ4
RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBpbiBIZWFkZXJz
ICovLAorCQkJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEN0QxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlzcGxh
Y2VtZW50TWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDgzMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ4NTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ4NzEyNDhG
MEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDg5MTI0
OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg0NzMwRDhCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg0NzMwRDhEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDkzMTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGln
aHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjI3MjQsMTQgKzIyNzI0LDEwIEBACiAJCQkJ
QjIyMjc5Q0EwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3OUNEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlEMDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUIyNTU5OTdBMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUNvbnZvbHZlTWF0cml4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE5MjEzMjc0MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTk3QzBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5RDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTk3RTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVE
aXNwbGFjZW1lbnRNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RDYwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyNzlEOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OTgwMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdG
RUZsb29kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OURDMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdGRUZsb29kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlERjBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVGdW5jQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5RTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRnVuY0JFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjI3NDEsMjEgKzIyNzM3LDE0IEBACiAJCQkJQjI1NTk5ODQwRDAwRDhCQTAw
QkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RUUwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZFSW1hZ2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3OUYxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUxpZ2h0RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlFNDQwQTJENTExOTFBNTBCMDAwODIwQjAgLyogU1ZHRkVMaWdodGluZy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjU1OTk4NjBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVN
ZXJnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlGMzBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RjYwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCMjU1OTk4ODBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVNb3JwaG9sb2d5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg0MjI0MTkzMTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OThBMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRU9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlGOTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUZDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUIyNTU5OThDMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRVNwZWN1bGFyTGln
aHRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RkYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBMDIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBN0QyN0ZDNDBFMEE1OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QTA1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNTU5OThGMEQwMEQ4QkEwMEJCODI1QyAv
KiBTVkdGRVR1cmJ1bGVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMDgwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIyNzg0LDcgKzIyNzczLDYgQEAKIAkJCQlCMjIyN0EyRjBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHTGFuZ1NwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QTMyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBMzUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xlbmd0aExpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjI1NTk5OTMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0xpZ2h0U291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QTM4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBM0IwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0xpbmVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTQw
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMb2NhdGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
MzA2MSw2ICsyMzA0OSwxOCBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEy
MDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0
RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTg0NzMwRDc4MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg0NzMwRDdBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGlu
Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NDczMEQ3QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVE
aXNwbGFjZW1lbnRNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEN0UxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFRmxvb2QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEODAxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEODIx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBE
ODQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk4NDczMEQ4NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODQ3MzBEODgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGluZy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk4NDczMEQ4QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTg0NzMwRDhDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1
bGVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODQ3MzBEOTAxMjQ4RjBCMzAwRDNBOUM5IC8q
IExpZ2h0U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAkocmV2aXNp
b24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExp
Z2h0U291cmNlLmg6NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdEaXN0YW50TGlnaHRTb3VyY2Vf
aAorI2RlZmluZSBTVkdEaXN0YW50TGlnaHRTb3VyY2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBEaXN0YW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3Vy
Y2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERpc3RhbnRMaWdodFNvdXJjZT4g
Y3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGgsIGVsZXZhdGlvbikp
OworICAgIH0KKworICAgIGZsb2F0IGF6aW11dGgoKSBjb25zdCB7IHJldHVybiBtX2F6aW11dGg7
IH0KKyAgICBmbG9hdCBlbGV2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VsZXZhdGlvbjsgfQor
CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IHopOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBEaXN0YW50TGlnaHRT
b3VyY2UoZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0aW9uKQorICAgICAgICA6IExpZ2h0U291
cmNlKExTX0RJU1RBTlQpCisgICAgICAgICwgbV9hemltdXRoKGF6aW11dGgpCisgICAgICAgICwg
bV9lbGV2YXRpb24oZWxldmF0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCBtX2F6aW11
dGg7CisgICAgZmxvYXQgbV9lbGV2YXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8v
IFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2ODAx
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDExIEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCi0j
ZGVmaW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCisjaWZuZGVmIERpc3RhbnRMaWdodFNvdXJj
ZV9oCisjZGVmaW5lIERpc3RhbnRMaWdodFNvdXJjZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNTcsNiArNTcsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFC
TEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCisjZW5kaWYg
Ly8gRGlzdGFudExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDY4MDE2
KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXgu
Y3BwOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Vi
a2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVDb252b2x2ZU1hdHJpeC5oIgorCisjaW5jbHVkZSAi
Q2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29u
dm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKKyAgICBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUsCisgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBG
aWx0ZXJFZmZlY3QoKQorICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCisgICAgLCBtX2Rp
dmlzb3IoZGl2aXNvcikKKyAgICAsIG1fYmlhcyhiaWFzKQorICAgICwgbV90YXJnZXRPZmZzZXQo
dGFyZ2V0T2Zmc2V0KQorICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKKyAgICAsIG1fa2VybmVs
VW5pdExlbmd0aChrZXJuZWxVbml0TGVuZ3RoKQorICAgICwgbV9wcmVzZXJ2ZUFscGhhKHByZXNl
cnZlQWxwaGEpCisgICAgLCBtX2tlcm5lbE1hdHJpeChrZXJuZWxNYXRyaXgpCit7Cit9CisKK1Bh
c3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIGtlcm5lbFNpemUsCisgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29u
c3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAorICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZz
ZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAorICAgICAgICBwcmVzZXJ2ZUFscGhhLCBr
ZXJuZWxNYXRyaXgpKTsKK30KKworCitJbnRTaXplIEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFNp
emUoKSBjb25zdAoreworICAgIHJldHVybiBtX2tlcm5lbFNpemU7Cit9CisKK3ZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsU2l6ZShJbnRTaXplIGtlcm5lbFNpemUpCit7CisgICAgbV9r
ZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgCit9CisKK2NvbnN0IFZlY3RvcjxmbG9hdD4mIEZFQ29u
dm9sdmVNYXRyaXg6Omtlcm5lbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2VybmVsTWF0cml4
OyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZs
b2F0PiYga2VybmVsKQoreworICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAKK30KKworZmxv
YXQgRkVDb252b2x2ZU1hdHJpeDo6ZGl2aXNvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGl2
aXNvcjsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcihmbG9hdCBkaXZp
c29yKQoreworICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7IAorfQorCitmbG9hdCBGRUNvbnZvbHZl
TWF0cml4OjpiaWFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaWFzOyAKK30KKwordm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKGZsb2F0IGJpYXMpCit7CisgICAgbV9iaWFzID0gYmlh
czsgCit9CisKK0ludFBvaW50IEZFQ29udm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyAKK30KKwordm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpzZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQgdGFyZ2V0T2Zmc2V0KQoreworICAgIG1fdGFy
Z2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OyAKK30KKworRWRnZU1vZGVUeXBlIEZFQ29udm9sdmVN
YXRyaXg6OmVkZ2VNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGdlTW9kZTsgCit9CisK
K3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgCit9CisKK0Zsb2F0UG9pbnQgRkVDb252
b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2Vy
bmVsVW5pdExlbmd0aDsgCit9CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5p
dExlbmd0aChGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgpCit7CisgICAgbV9rZXJuZWxVbml0
TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsgCit9CisKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6
cHJlc2VydmVBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlc2VydmVBbHBoYTsgCit9
CisKK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZl
QWxwaGEpCit7CisgICAgbV9wcmVzZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBoYTsgCit9CisKKy8q
CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgQ29udm9sdmVN
YXRyaXggaW1wbGVtZW50YXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3
YXk6CisKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgIEEg
ICAgICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICB8ICAg
ICAgICAgICAgIHwgICB8CisgICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAorICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICB8ICAgICAgICAgIEUgICAgICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KworICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMK
KyAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJl
Y3RhbmdsZS4KKworICAgRXhhbXBsZToKKyAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVp
Z2h0OiAxMAorCisgICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhl
aWdodCA0CisgICAgICBUYXJnZXQ6IHg6MSwgeTozCisKKyAgICAgIFRoZSBmb2xsb3dpbmcgZmln
dXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgorCisgICAgICAg
IC4uLgorICAgICAgICAuLi4KKyAgICAgICAgLi4uCisgICAgICAgIC5YLgorCisgICBUaGUgcmVn
aW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6CisgICAgICBOb3RlOiAoeDEsIHkx
KSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKKyAgICAg
IE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KKyAg
ICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFu
ZCB5MSA8PSB5IDwgeTIKKworICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5
MjogMworICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAorICAgICAg
UmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAorICAgICAgUmVnaW9uIEQ6IHgx
OiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEw
LCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQorCisgICBTaW5jZSByZWdpb24gQyAob2Z0
ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKKyAgIGEgZmFz
dCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVy
aW9yUGl4ZWxzLgorICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1
c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAorICAgdG8gaGFuZGxlIHBpeGVscyBvdXRz
aWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KKyAgIGtlcm5lbCBt
YXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVk
IGJ5IHRoaXMKKyAgIGZ1bmN0aW9uLgorCisgICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25z
IGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCisgICBjb21tb24gYSB0
ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxs
LAorICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KKyovCisK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQg
Y2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCit7CisgICAgaWYgKGNoYW5uZWwgPD0g
MCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICBy
ZXR1cm4gbWF4OworICAgIHJldHVybiBjaGFubmVsOworfQorCit0ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+CitBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMo
Q2FudmFzUGl4ZWxBcnJheSogaW1hZ2UsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0
IGRpdmlzb3IsIGZsb2F0IGJpYXMsIENhbnZhc1BpeGVsQXJyYXkqIHNyYykKK3sKKyAgICB1bnNp
Z25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdC
QVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkKKyAgICAgICAgaW1hZ2UtPnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0
b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKKworICAgIGlmIChwcmVzZXJ2
ZUFscGhhVmFsdWVzKSB7CisgICAgICAgIGltYWdlLT5zZXQocGl4ZWwsIHNyYy0+Z2V0KHBpeGVs
KSk7CisgICAgICAgICsrcGl4ZWw7CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlLT5zZXQocGl4
ZWwrKywgbWF4QWxwaGEpOworfQorCisvLyBPbmx5IGZvciByZWdpb24gQwordGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgorQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRy
aXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pCit7CisgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90
IGFmZmVjdCB0aGVzZSBwaXhlbHMKKyAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgp
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50
IHN0YXJ0S2VybmVsUGl4ZWwgPSAwOworICAgIGludCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdo
dCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lkdGgoKSAtIDEpICog
NDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCisgICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisKKyAgICAvLyBt
X2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcworICAgIEFTU0VSVChtX2Rpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGNsaXBCb3R0
b20gKyAxOyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAx
OyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBtX2tlcm5lbE1h
dHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJu
ZWxQaXhlbDsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwor
CisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsK
KyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxw
aGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0g
bV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LT5nZXQoa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAg
IHRvdGFsc1sxXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7Cisg
ICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5l
bFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisg
ICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChr
ZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CisgICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7CisgICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxw
cmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkpOworICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OworICAgICAgICB9Cisg
ICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSB4
SW5jcmVhc2U7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUNvbnZvbHZlTWF0cml4
OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkp
Cit7CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHggPj0gMCAm
JiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdE
YXRhLndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRjaCAobV9lZGdlTW9kZSkgeworICAgIGRl
ZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURH
RU1PREVfRFVQTElDQVRFOgorICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsK
KyAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4
ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAg
ICAgeSA9IDA7CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAg
ICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6
CisgICAgICAgIHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndp
ZHRoOworICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkg
PCAwKQorICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9
IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIHgpIDw8IDI7CisgICAgfQorfQorCisvLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMK
K3RlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KK3ZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEs
IGludCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisgICAgaW50IHBpeGVsID0gKHkxICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeDEpICogNDsKKyAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKKyAgICBp
bnQgd2lkdGggPSB4MiAtIHgxOworICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gbV90
YXJnZXRPZmZzZXQueCgpOworICAgIGludCBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVs
UGl4ZWxYOworICAgIGludCBzdGFydEtlcm5lbFBpeGVsWSA9IHkxIC0gbV90YXJnZXRPZmZzZXQu
eSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICog
NDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCisgICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisKKyAgICAvLyBt
X2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcworICAgIEFTU0VSVChtX2Rpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhlaWdodDsg
eSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAtLXgpIHsK
KyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IG1fa2VybmVsTWF0cml4LnNpemUoKSAtIDE7
CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgICAgICAg
ICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxz
WzBdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
Ml0gPSAwOworICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAg
ICAgICAgIHRvdGFsc1szXSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+
PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBh
aW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOworICAgICAgICAgICAgICAg
IGlmIChwaXhlbEluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9
IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzFdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0
PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXggKyAxKSk7
CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxW
YWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdl
dChwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCAr
IDMpKTsKKyAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAt
LWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbFk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGlu
Z0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkpOworICAgICAgICAgICAgKytz
dGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7
CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7CisgICAgICAg
ICsrc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKQoreworICAgIC8vIE11c3QgYmUgaW1w
bGVtZW50ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQorICAg
IC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdl
bGwKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhl
bHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOworICAgIGVsc2UK
KyAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bnQgeTEsIGludCB4MiwgaW50IHkyKQoreworICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24g
Y2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKKyAgICAv
LyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQorICAg
IGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihw
YWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICBlbHNlCisgICAgICAgIGZhc3RTZXRP
dXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Cit9CisKK3Zv
aWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAg
IGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZm
ZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5maWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKSk7CisKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4
ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBzcmNQaXhlbEFycmF5
ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3
aW5nUmVjdCktPmRhdGEoKTsKKyAgICBlbHNlCisgICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+
cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVj
dCktPmRhdGEoKTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworCisgICAg
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkg
PSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBpbWFnZVJlY3Qu
d2lkdGgoKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0LmhlaWdodCgpOwor
ICAgIHBhaW50aW5nRGF0YS5iaWFzID0gbV9iaWFzICogMjU1OworCisgICAgLy8gRHJhd2luZyBm
dWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBpbWFnZVJlY3Qud2lkdGgo
KSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gaW1hZ2VSZWN0
LmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAgaWYgKGNsaXBSaWdodCA+
PSAwICYmIGNsaXBCb3R0b20gPj0gMCkgeworICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgY2xpcFJpZ2h0ICs9
IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRP
ZmZzZXQueSgpICsgMTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCisgICAg
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0
aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOworICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdl
UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgY2xpcEJvdHRvbSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7CisgICAgICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVJlY3Qud2lk
dGgoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0
LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlUmVjdC53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9y
IHNwZWVkCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgaWYgKG1fcHJl
c2VydmVBbHBoYSkKKyAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRh
LmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworfQorCit2b2lkIEZFQ29udm9sdmVNYXRy
aXg6OmR1bXAoKQoreworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgRURHRU1PREVfVU5LTk9XTjoKKyAgICAgICAgdHMgPDwgIlVOS05PV04iOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAgICAgICAgdHMg
PDwgIkRVUExJQ0FURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoK
KyAgICAgICAgdHMgPDwgIldSQVAiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVER0VNT0RF
X05PTkU6CisgICAgICAgIHRzIDw8ICJOT05FIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlQ29udm9sdmVNYXRyaXgiOwor
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwg
IiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCisgICAgICAgPDwgImtlcm5lbE1h
dHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCisgICAgICAgPDwgImRpdmlzb3I9
XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgorICAgICAgIDw8ICJiaWFzPVwiIiA8PCBtX2JpYXMg
PDwgIlwiICIKKyAgICAgICA8PCAidGFyZ2V0PVwiIiA8PCBtX3RhcmdldE9mZnNldCA8PCAiXCIg
IgorICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgorICAgICAg
IDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIK
KyAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1c
biI7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVu
dCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiU1ZHRkVDb252b2x2ZU1hdHJpeC5oIgorI2lmIEVOQUJMRShGSUxURVJTKQor
I2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJy
YXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTQ2OCw0ICs0NjgsNCBAQCBUZXh0U3RyZWFt
JiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlCiAKIH07IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gNjgwMTYpCShmcm9tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oOjY4MDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU1ZHRkVDb252b2x2ZU1hdHJpeF9oCisjZGVmaW5lIFNWR0ZFQ29udm9sdmVNYXRyaXhfaAor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgor
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBFZGdlTW9k
ZVR5cGUgeworICAgIEVER0VNT0RFX1VOS05PV04gICA9IDAsCisgICAgRURHRU1PREVfRFVQTElD
QVRFID0gMSwKKyAgICBFREdFTU9ERV9XUkFQICAgICAgPSAyLAorICAgIEVER0VNT0RFX05PTkUg
ICAgICA9IDMKK307CisKK2NsYXNzIENhbnZhc1BpeGVsQXJyYXk7CisKK2NsYXNzIEZFQ29udm9s
dmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsCisgICAgICAg
ICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwKKyAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKwor
ICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0S2VybmVsU2l6ZShJ
bnRTaXplKTsKKworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgpIGNvbnN0OworICAg
IHZvaWQgc2V0S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKworICAgIGZsb2F0IGRpdmlz
b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldERpdmlzb3IoZmxvYXQpOworCisgICAgZmxvYXQgYmlh
cygpIGNvbnN0OworICAgIHZvaWQgc2V0QmlhcyhmbG9hdCk7CisKKyAgICBJbnRQb2ludCB0YXJn
ZXRPZmZzZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldFRhcmdldE9mZnNldChJbnRQb2ludCk7CisK
KyAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdDsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSk7CisKKyAgICBGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25z
dDsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludCk7CisKKyAgICBib29s
IHByZXNlcnZlQWxwaGEoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVDb252
b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAorICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAg
Q2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICAgICAgQ2FudmFzUGl4ZWxBcnJh
eSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0
OworICAgICAgICBmbG9hdCBiaWFzOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7CisKKyAg
ICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSk7CisKKyAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CisgICAgdm9p
ZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4
MiwgaW50IHkyKTsKKworICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE91
dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpOworCisgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CisgICAgZmxvYXQgbV9k
aXZpc29yOworICAgIGZsb2F0IG1fYmlhczsKKyAgICBJbnRQb2ludCBtX3RhcmdldE9mZnNldDsK
KyAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKKyAgICBGbG9hdFBvaW50IG1fa2VybmVsVW5p
dExlbmd0aDsKKyAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1f
a2VybmVsTWF0cml4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisKKyNlbmRpZiAvLyBTVkdGRUNvbnZvbHZl
TWF0cml4X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCwxMCArMjAsMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LSNpZm5kZWYgU1ZHRkVDb252b2x2ZU1hdHJpeF9oCi0jZGVmaW5lIFNWR0ZFQ29udm9sdmVNYXRy
aXhfaAorI2lmbmRlZiBGRUNvbnZvbHZlTWF0cml4X2gKKyNkZWZpbmUgRkVDb252b2x2ZU1hdHJp
eF9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpZiBFTkFCTEUoRklM
VEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCkBAIC0xMTMsNiArMTEzLDYgQEAgcHJpdmF0ZToKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRUNv
bnZvbHZlTWF0cml4X2gKKyNlbmRpZiAvLyBGRUNvbnZvbHZlTWF0cml4X2gKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmNwcAkocmV2aXNpb24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorICAgIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKKyAgICA6IEZFTGlnaHRp
bmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdo
dFNvdXJjZSkKK3sKK30KKworUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNl
TGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKKyAgICBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+
IGxpZ2h0U291cmNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaWZmdXNlTGlnaHRp
bmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVu
aXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKK30KKworRkVEaWZm
dXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygpCit7Cit9CisKK0NvbG9yIEZFRGlmZnVz
ZUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saWdodGlu
Z0NvbG9yOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9yKGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQoreworICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0
aW5nQ29sb3I7Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBj
b25zdCAKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlU2NhbGU7Cit9CisKK3ZvaWQgRkVEaWZmdXNl
TGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCit7CisgICAgbV9z
dXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Cit9CisKK2Zsb2F0IEZFRGlmZnVzZUxpZ2h0aW5n
OjpkaWZmdXNlQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RpZmZ1c2VDb25zdGFu
dDsKK30KKwordm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0
IGRpZmZ1c2VDb25zdGFudCkKK3sKKyAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25z
dGFudDsKK30KKworZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKK30KKwordm9pZCBGRURp
ZmZ1c2VMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0
aFgpCit7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhYOworfQor
CitmbG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0
aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKK3sKKyAg
ICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5pdExlbmd0aFk7Cit9CisKK2NvbnN0IExp
Z2h0U291cmNlKiBGRURpZmZ1c2VMaWdodGluZzo6bGlnaHRTb3VyY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOworfQorCit2b2lkIEZFRGlmZnVzZUxpZ2h0aW5n
OjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKK3sg
ICAgCisgICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOworfQorCit2b2lkIEZFRGlmZnVz
ZUxpZ2h0aW5nOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0
Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZURpZmZ1c2VM
aWdodGluZyI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsK
KyAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIK
KyAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAi
XCIgIgorICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5n
dGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOworICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2
ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRl
ICJTVkdGRURpZmZ1c2VMaWdodGluZy5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUg
IkZFRGlmZnVzZUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2lu
Y2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTIzLDQg
KzEyMyw0IEBAIFRleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFIKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAkocmV2aXNp
b24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNl
TGlnaHRpbmcuaDo2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nX2gKKyNkZWZpbmUgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIExpZ2h0U291cmNlOworCitjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBGRUxp
Z2h0aW5nIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAorICAgICAgICBmbG9hdCwgZmxv
YXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKyAgICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdo
dGluZygpOworCisgICAgQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0
TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQpOworCisgICAgZmxvYXQgZGlm
ZnVzZUNvbnN0YW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQp
OworCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAgICB2b2lkIHNldEtl
cm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKKworICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CisKKyAgICBjb25z
dCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldExpZ2h0U291
cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFRGlmZnVzZUxp
Z2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQ
dHI8TGlnaHRTb3VyY2U+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVEaWZm
dXNlTGlnaHRpbmdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTVkdGRURpZmZ1c2VMaWdodGluZ19oCi0jZGVmaW5lIFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nX2gKKyNpZm5kZWYgRkVEaWZmdXNlTGlnaHRpbmdfaAorI2RlZmluZSBGRURp
ZmZ1c2VMaWdodGluZ19oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdGRUxpZ2h0aW5nLmgiCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
RkVMaWdodGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDYgKzYzLDYgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRp
ZiAvLyBTVkdGRURpZmZ1c2VMaWdodGluZ19oCisjZW5kaWYgLy8gRkVEaWZmdXNlTGlnaHRpbmdf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHA6NjgwMTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCIKKworI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIK
KyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGRURpc3BsYWNlbWVu
dE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVj
dG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQor
ICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNl
bGVjdG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAg
LCBtX3NjYWxlKHNjYWxlKQoreworfQorCitQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBG
RURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKKyAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5u
ZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKK30KKworQ2hhbm5lbFNlbGVj
dG9yVHlwZSBGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxTZWxlY3RvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IpCit7CisgICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsK
K30KKworQ2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxTZWxl
Y3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsKK30KKwordm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IpCit7CisgICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKK30KKworZmxvYXQgRkVEaXNwbGFjZW1lbnRNYXA6OnNjYWxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2FsZTsKK30KKwordm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBp
bnB1dEVmZmVjdCgxKTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpbjItPmFwcGx5KGZp
bHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IENIQU5O
RUxfVU5LTk9XTiB8fCBtX3lDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBS
ZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEoaW4tPnJlc3VsdEltYWdlKCkt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsK
KworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dEltYWdlRGF0YShpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIFJl
ZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QihpbjItPnJlc3VsdEltYWdlKCkt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwor
CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgp
KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShp
bWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIEFTU0VSVChzcmNQ
aXhlbEFycmF5QS0+bGVuZ3RoKCkgPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKworICAg
IGZsb2F0IHNjYWxlWCA9IG1fc2NhbGUgLyAyNTUuZiAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCk7CisgICAgZmxvYXQgc2NhbGVZID0gbV9zY2FsZSAvIDI1NS5mICogZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CisgICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50
WCA9ICgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
d2lkdGgoKTsKKyAgICBmbG9hdCBzY2FsZUFkanVzdG1lbnRZID0gKDAuNWYgLSAwLjVmICogbV9z
Y2FsZSkgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKTsKKyAgICBpbnQgc3Ry
aWRlID0gaW1hZ2VSZWN0LndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1h
Z2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlOwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAg
ICAgICAgICAgIGludCBkc3RJbmRleCA9IGxpbmUgKyB4ICogNDsKKyAgICAgICAgICAgIGludCBz
cmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVYICogc3JjUGl4ZWxBcnJheUItPmdldChk
c3RJbmRleCArIG1feENoYW5uZWxTZWxlY3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WCk7Cisg
ICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWSAqIHNyY1Bp
eGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3lDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxl
QWRqdXN0bWVudFkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBz
cmNYID49IGltYWdlUmVjdC53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaW1hZ2VSZWN0
LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRz
dEluZGV4ICsgY2hhbm5lbCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCkpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
VmFsdWUgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHNyY1kgKiBzdHJpZGUgKyBzcmNYICogNCArIGNo
YW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGRzdElu
ZGV4ICsgY2hhbm5lbCwgcGl4ZWxWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cit9
CisKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmR1bXAoKQoreworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENIQU5ORUxfVU5LTk9X
TjoKKyAgICAgICAgdHMgPDwgIlVOS05PV04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENI
QU5ORUxfUjoKKyAgICAgICAgdHMgPDwgIlJFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q0hBTk5FTF9HOgorICAgICAgICB0cyA8PCAiR1JFRU4iOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENIQU5ORUxfQjoKKyAgICAgICAgdHMgPDwgIkJMVUUiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENIQU5ORUxfQToKKyAgICAgICAgdHMgPDwgIkFMUEhBIjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRN
YXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZURpc3Bs
YWNlbWVudE1hcCI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
KTsKKyAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCisgICAgICAgPDwg
InhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgorICAg
ICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwi
XVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5k
ZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IGluZGVudCArIDEpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcC5oIgorI2lmIEVOQUJMRShG
SUxURVJTKQorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKICNpbmNsdWRlICJDYW52
YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCkBAIC0xNjgsNCArMTY4LDQgQEAg
VGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA2ODAxNikJ
KGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5o
OjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgU1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAorI2RlZmluZSBTVkdGRURpc3BsYWNl
bWVudE1hcF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUg
IkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gQ2hhbm5lbFNlbGVjdG9y
VHlwZSB7CisgICAgQ0hBTk5FTF9VTktOT1dOID0gMCwKKyAgICBDSEFOTkVMX1IgPSAxLAorICAg
IENIQU5ORUxfRyA9IDIsCisgICAgQ0hBTk5FTF9CID0gMywKKyAgICBDSEFOTkVMX0EgPSA0Cit9
OworCitjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hh
bm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlD
aGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKworICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvcigpIGNvbnN0OworICAgIHZvaWQgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlKTsKKworICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxT
ZWxlY3RvcigpIGNvbnN0OworICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFu
bmVsU2VsZWN0b3JUeXBlKTsKKworICAgIGZsb2F0IHNjYWxlKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTY2FsZShmbG9hdCBzY2FsZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7
CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
KTsKKworICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOworICAgIENo
YW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOworICAgIGZsb2F0IG1fc2NhbGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCAr
MTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
U1ZHRkVEaXNwbGFjZW1lbnRNYXBfaAotI2RlZmluZSBTVkdGRURpc3BsYWNlbWVudE1hcF9oCisj
aWZuZGVmIEZFRGlzcGxhY2VtZW50TWFwX2gKKyNkZWZpbmUgRkVEaXNwbGFjZW1lbnRNYXBfaAog
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMp
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTY1LDYgKzY1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRURpc3BsYWNl
bWVudE1hcF9oCisjZW5kaWYgLy8gRkVEaXNwbGFjZW1lbnRNYXBfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gNjgwMTYp
CShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHA6NjgwMTYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNW
R0ZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVj
dCgpCisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKKyAgICAsIG1fZmxvb2RPcGFjaXR5
KGZsb29kT3BhY2l0eSkKK3sKK30KKworUGFzc1JlZlB0cjxGRUZsb29kPiBGRUZsb29kOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZFRmxvb2QoZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7Cit9
CisKK0NvbG9yIEZFRmxvb2Q6OmZsb29kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zs
b29kQ29sb3I7Cit9CisKK3ZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCit7CisgICAgbV9mbG9vZENvbG9yID0gY29sb3I7Cit9CisKK2Zsb2F0IEZFRmxvb2Q6
OmZsb29kT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OworfQor
Cit2b2lkIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCit7Cisg
ICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Cit9CisKK3ZvaWQgRkVGbG9vZDo6YXBw
bHkoRmlsdGVyKikKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZl
Y3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgICAgICByZXR1cm47CisK
KyAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoZmxvb2RDb2xvcigpLnJn
YigpLCBmbG9vZE9wYWNpdHkoKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkp
LCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRkVGbG9vZDo6ZHVtcCgpCit7
Cit9CisKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CisgICAgdHMgPDwgIltmZUZsb29kIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IGZsb29kQ29s
b3IoKS5uYW1lKCkgPDwgIlwiICIKKyAgICAgICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxv
b2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAko
cmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAi
U1ZHRkVGbG9vZC5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFRmxvb2QuaCIK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAt
ODgsNCArODgsNCBAQCBUZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCShyZXZpc2lvbiA2ODAxNikJKGZyb20g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmg6NjgwMTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFRmxvb2RfaAor
I2RlZmluZSBTVkdGRUZsb29kX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVGbG9vZCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRmxv
b2Q+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0KTsKKworICAgIENvbG9yIGZsb29kQ29sb3Io
KSBjb25zdDsKKyAgICB2b2lkIHNldEZsb29kQ29sb3IoY29uc3QgQ29sb3IgJik7CisKKyAgICBm
bG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdDsKKyAgICB2b2lkIHNldEZsb29kT3BhY2l0eShmbG9h
dCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lk
IGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRkVG
bG9vZChjb25zdCBDb2xvciYsIGZsb2F0KTsKKworICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKKyAg
ICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZH
RkVGbG9vZF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAgKzE5LDEwIEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNWR0ZFRmxvb2RfaAotI2Rl
ZmluZSBTVkdGRUZsb29kX2gKKyNpZm5kZWYgRkVGbG9vZF9oCisjZGVmaW5lIEZFRmxvb2RfaAog
Ci0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMp
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKQEAgLTUzLDYgKzUzLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5k
aWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNlbmRpZiAvLyBTVkdGRUZsb29kX2gKKyNlbmRpZiAv
LyBGRUZsb29kX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDY4MDE2KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVk
ZSAiU1ZHRkVMaWdodGluZy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGln
aHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LAorICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQor
ICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkK
KyAgICAsIG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2UpCisgICAgLCBtX2xpZ2h0aW5nQ29sb3Io
bGlnaHRpbmdDb2xvcikKKyAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKKyAgICAs
IG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKKyAgICAsIG1fc3BlY3VsYXJDb25z
dGFudChzcGVjdWxhckNvbnN0YW50KQorICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFy
RXhwb25lbnQpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQor
ICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKK3sKK30KKworY29u
c3Qgc3RhdGljIGludCBjUGl4ZWxTaXplID0gNDsKK2NvbnN0IHN0YXRpYyBpbnQgY0FscGhhQ2hh
bm5lbE9mZnNldCA9IDM7Citjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBjT3BhcXVlQWxwaGEg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGZmKTsKKworQUxXQVlTX0lOTElORSBpbnQg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cExlZnRQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FM
V0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBQaXhlbFZhbHVlKCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1
ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OmxlZnRQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
PmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitB
TFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmNlbnRlclBpeGVsVmFs
dWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjpyaWdodFBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6ZG93bkxlZnRQaXhlbFZhbHVlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50IEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVsVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIGludCBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25SaWdodFBpeGVsVmFsdWUoKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKExpZ2h0aW5nRGF0YSYgZGF0YSwg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLAorICAgIGludCBsaWdodFgs
IGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBp
bnQgbm9ybWFsWSkKK3sKKyAgICBtX2xpZ2h0U291cmNlLT51cGRhdGVQYWludGluZ0RhdGEocGFp
bnRpbmdEYXRhLCBsaWdodFgsIGxpZ2h0WSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEucGl4ZWxz
LT5nZXQoZGF0YS5vZmZzZXQgKyAzKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisKKyAgICBkYXRh
Lm5vcm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSk7CisgICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZ
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAg
IGRhdGEubm9ybWFsVmVjdG9yLnNldFooMS4wZik7CisgICAgZGF0YS5ub3JtYWxWZWN0b3Iubm9y
bWFsaXplKCk7CisKKyAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVz
ZUxpZ2h0aW5nKQorICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChkYXRhLm5vcm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvcik7CisgICAg
ZWxzZSB7CisgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yOworICAgICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56
KCkgKyAxLjBmKTsKKyAgICAgICAgaGFsZndheVZlY3Rvci5ub3JtYWxpemUoKTsKKyAgICAgICAg
aWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQorICAgICAgICAgICAgZGF0YS5saWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9
IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoZGF0YS5ub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVj
dG9yLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgIH0KKworICAgIGlmIChkYXRhLmxpZ2h0U3Ry
ZW5ndGggPiAxLjBmKQorICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAxLjBmOworICAgIGlm
IChkYXRhLmxpZ2h0U3RyZW5ndGggPCAwLjBmKQorICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGgg
PSAwLjBmOworCisgICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVj
dG9yLngoKSkpOworICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3IueSgpKSk7CisgICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0
YS5jb2xvclZlY3Rvci56KCkpKTsKK30KKworYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmco
Q2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgTGlnaHRpbmdEYXRh
IGRhdGE7CisKKyAgICBpZiAoIW1fbGlnaHRTb3VyY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3Ro
KSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNh
c2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAod2lkdGggPD0gMiB8fCBo
ZWlnaHQgPD0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGF0YS5waXhlbHMgPSBw
aXhlbHM7CisgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsK
KyAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXpl
OworICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKKyAgICBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKKyAgICBwYWludGluZ0RhdGEuY29sb3JW
ZWN0b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJlZCgpLCBtX2xpZ2h0aW5nQ29s
b3IuZ3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7CisgICAgbV9saWdodFNvdXJjZS0+
aW5pdFBhaW50aW5nRGF0YShwYWludGluZ0RhdGEpOworCisgICAgLy8gVG9wL0xlZnQgY29ybmVy
CisgICAgZGF0YS5vZmZzZXQgPSAwOworICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwg
MCwgMCwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBk
YXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRh
dGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisKKyAgICAv
LyBUb3AvUmlnaHQgcGl4ZWwKKyAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0
YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC0y
ICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0g
ZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKKyAgICAg
ICAgLTIuMGYgLyAzLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVy
UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25Q
aXhlbFZhbHVlKCkpOworCisgICAgLy8gQm90dG9tL0xlZnQgcGl4ZWwKKyAgICBkYXRhLm9mZnNl
dCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUo
KSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAtMi4wZiAvIDMuMGYsIC0y
ICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOworCisgICAg
Ly8gQm90dG9tL1JpZ2h0IHBpeGVsCisgICAgZGF0YS5vZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChkYXRh
LCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVl
KCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSwKKyAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51
cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBp
eGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSk7CisKKyAgICBpZiAod2lk
dGggPj0gMykgeworICAgICAgICAvLyBUb3AgbGluZQorICAgICAgICBkYXRhLm9mZnNldCA9IGNQ
aXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHNl
dFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwKKyAgICAgICAgICAgICAgICAtMS4wZiAv
IDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZh
bHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZh
bHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUo
KSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgp
ICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIC8vIEJv
dHRvbSBsaW5lCisgICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOworICAgICAg
ICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRh
Lm9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWlu
dGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCisgICAgICAgICAgICAgICAg
LTEuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhl
bFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhl
bFZhbHVlKCksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cExlZnRQaXhl
bFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFs
dWUoKSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUo
KSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGhlaWdodCA+PSAzKSB7CisgICAgICAgIC8vIExlZnQgbGluZQorICAgICAgICBkYXRhLm9mZnNl
dCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHkg
PSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBzZXRQaXhlbChk
YXRhLCBwYWludGluZ0RhdGEsIDAsIHksCisgICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAt
ZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRh
LmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5k
b3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgICAg
ICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmln
aHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmln
aHRQaXhlbFZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIC8vIFJpZ2h0IGxpbmUKKyAgICAg
ICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50
IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCAr
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBzZXRQaXhl
bChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwKKyAgICAg
ICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEu
dXBQaXhlbFZhbHVlKCkgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50
ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4
ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4
ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykgeworICAgICAgICAvLyBJbnRlcmlv
ciBwaXhlbHMKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lOyArK3kpIHsKKyAgICAgICAgICAgIGRhdGEub2Zmc2V0ID0geSAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOworICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0g
Y1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQ
aXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4
ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4
ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCisgICAgICAgICAgICAgICAg
ICAgIC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQ
aXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4
ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4
ZWxWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludCB0
b3RhbFNpemUgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OworICAg
IGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDM7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGEucGl4ZWxz
LT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGExID0gZGF0YS5waXhlbHMtPmdldChpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTIg
PSBkYXRhLnBpeGVscy0+Z2V0KGkgKyAxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTMg
PSBkYXRhLnBpeGVscy0+Z2V0KGkgKyAyKTsKKyAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBz
ZXQgdG8gbWF4KGExLCBhMiwgYTMpCisgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAz
LCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRkVMaWdo
dGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3Vs
dEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworCisgICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIFJlZlB0cjxJbWFnZURh
dGE+IHNyY0ltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7CisgICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxB
cnJheShzcmNJbWFnZURhdGEtPmRhdGEoKSk7CisKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJu
ZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRo
ZSBXMworICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhl
ciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQorICAgIC8vIG91dHB1dCBmb3Ig
dmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVs
aWFibGUuCisgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0
aGUgaW1wbGVtZW50YXRpb24KKworICAgIGlmIChkcmF3TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSwgZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpKQor
ICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VE
YXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSksIElu
dFBvaW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVMaWdodGluZy5oIgor
I2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAogI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJT
VkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMjY3LDQgKzI2Nyw0IEBAIHZvaWQgRkVMaWdodGluZzo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCShy
ZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxp
Z2h0aW5nLmg6NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNWR0ZFTGlnaHRpbmdfaAorI2RlZmluZSBT
VkdGRUxpZ2h0aW5nX2gKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvQWx3YXlz
SW5saW5lLmg+CisKKy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBh
bmQgRkVTcGVjdWxhckxpZ2h0aW5nCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2Fu
dmFzUGl4ZWxBcnJheTsKKworY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKworcHJvdGVjdGVk
OgorICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKKyAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAorICAg
ICAgICBTcGVjdWxhckxpZ2h0aW5nCisgICAgfTsKKworICAgIHN0cnVjdCBMaWdodGluZ0RhdGEg
eworICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yOworICAgICAgICBDYW52YXNQaXhl
bEFycmF5KiBwaXhlbHM7CisgICAgICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgICAgIGZs
b2F0IHN1cmZhY2VTY2FsZTsKKyAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgaW50IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgd2lkdGhEZWNyZWFzZWRCeU9uZTsK
KyAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOworCisgICAgICAgIEFMV0FZU19JTkxJ
TkUgaW50IHVwTGVmdFBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBQ
aXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwUmlnaHRQaXhlbFZhbHVl
KCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGxlZnRQaXhlbFZhbHVlKCk7CisgICAgICAg
IEFMV0FZU19JTkxJTkUgaW50IGNlbnRlclBpeGVsVmFsdWUoKTsKKyAgICAgICAgQUxXQVlTX0lO
TElORSBpbnQgcmlnaHRQaXhlbFZhbHVlKCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRv
d25MZWZ0UGl4ZWxWYWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duUGl4ZWxW
YWx1ZSgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duUmlnaHRQaXhlbFZhbHVlKCk7
CisgICAgfTsKKworICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRT
b3VyY2U+KTsKKworICAgIGJvb2wgZHJhd0xpZ2h0aW5nKENhbnZhc1BpeGVsQXJyYXkqLCBpbnQs
IGludCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFBpeGVsKExpZ2h0aW5nRGF0YSYsIExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmLAorICAgICAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZ
LCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkp
OworCisgICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOworICAgIFJlZlB0cjxMaWdodFNv
dXJjZT4gbV9saWdodFNvdXJjZTsKKworICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBm
bG9hdCBtX3N1cmZhY2VTY2FsZTsKKyAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKKyAgICBm
bG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50Owor
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVu
Z3RoWTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVMaWdodGluZ19oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgJKHJl
dmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDE0IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFNWR0ZFTGlnaHRpbmdfaAotI2RlZmluZSBTVkdGRUxpZ2h0aW5n
X2gKKyNpZm5kZWYgRkVMaWdodGluZ19oCisjZGVmaW5lIEZFTGlnaHRpbmdfaAogCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgi
CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogCiAvLyBDb21tb24gYmFzZSBjbGFzcyBm
b3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwpAQCAtOTEsNiArOTEs
NiBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQog
Ci0jZW5kaWYgLy8gU1ZHRkVMaWdodGluZ19oCisjZW5kaWYgLy8gRkVMaWdodGluZ19oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCShyZXZp
c2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdl
LmNwcDo2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjaW5jbHVkZSAiU1ZHRkVNZXJnZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVNZXJnZTo6
RkVNZXJnZSgpIAorICAgIDogRmlsdGVyRWZmZWN0KCkKK3sKK30KKworUGFzc1JlZlB0cjxGRU1l
cmdlPiBGRU1lcmdlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNZXJn
ZSk7Cit9CisKK3ZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAgQVNTRVJUKHNpemUgPiAw
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKKyAgICAgICAgaW4tPmFwcGx5KGZpbHRl
cik7CisgICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29u
dGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoaSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAg
IH0KK30KKwordm9pZCBGRU1lcmdlOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVNZXJn
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlTWVyZ2Ui
OworICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAgQVNTRVJUKHNpemUgPiAw
KTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpbnB1dEVmZmVjdChp
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRz
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAm
JiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJGRU1lcmdlLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKQEAgLTc5LDQgKzc5LDQgQEAgVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkocmV2
aXNpb24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJn
ZS5oOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBTVkdGRU1lcmdlX2gKKyNkZWZpbmUgU1ZHRkVNZXJnZV9oCisKKyNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFs
IFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRl
bnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFTWVyZ2UoKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQorCisjZW5kaWYgLy8gU1ZHRkVNZXJnZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTAg
KzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFNWR0ZFTWVyZ2VfaAotI2RlZmluZSBTVkdGRU1lcmdlX2gKKyNpZm5kZWYgRkVNZXJnZV9oCisj
ZGVmaW5lIEVNZXJnZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
ZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NCw2ICs0NCw2IEBAIHByaXZh
dGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8g
U1ZHRkVNZXJnZV9oCisjZW5kaWYgLy8gRkVNZXJnZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gNjgw
MTYpCShmcm9tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNw
cDo2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisKKyNpbmNsdWRlICJDYW52YXNQaXhlbEFy
cmF5LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIHN0ZDo6bWluOwordXNpbmcgc3RkOjptYXg7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQor
ICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9yYWRpdXNY
KHJhZGl1c1gpCisgICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK3sKK30KKworUGFzc1JlZlB0cjxG
RU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7Cit9CisKK01vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgRkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK3ZvaWQgRkVNb3JwaG9sb2d5OjpzZXRNb3Jw
aG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQoreworICAgIG1fdHlw
ZSA9IHR5cGU7Cit9CisKK2Zsb2F0IEZFTW9ycGhvbG9neTo6cmFkaXVzWCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcmFkaXVzWDsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1go
ZmxvYXQgcmFkaXVzWCkKK3sKKyAgICBtX3JhZGl1c1ggPSByYWRpdXNYOworfQorCitmbG9hdCBG
RU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAoreworICAgIHJldHVybiBtX3JhZGl1c1k7Cit9
CisKK3ZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCit7CisgICAg
bV9yYWRpdXNZID0gcmFkaXVzWTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAg
ICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBpbnQgcmFk
aXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNYICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFk
aXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKKyAgICBpZiAocmFk
aXVzWCA8PSAwIHx8IHJhZGl1c1kgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVj
dCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1Bp
eGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCkpOworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBp
bWFnZVJlY3QuaGVpZ2h0KCkpOworCisgICAgaW50IGVmZmVjdFdpZHRoID0gZWZmZWN0RHJhd2lu
Z1JlY3Qud2lkdGgoKSAqIDQ7CisgICAgCisgICAgLy8gTGltaXQgdGhlIHJhZGl1cyBzaXplIHRv
IGVmZmVjdCBkaW1lbnNpb25zCisgICAgcmFkaXVzWCA9IG1pbihlZmZlY3REcmF3aW5nUmVjdC53
aWR0aCgpIC0gMSwgcmFkaXVzWCk7CisgICAgcmFkaXVzWSA9IG1pbihlZmZlY3REcmF3aW5nUmVj
dC5oZWlnaHQoKSAtIDEsIHJhZGl1c1kpOworICAgIAorICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiBleHRyZW1hOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCk7ICsreSkgeworICAgICAgICBpbnQgc3RhcnRZID0gbWF4KDAsIHkgLSByYWRpdXNZKTsK
KyAgICAgICAgaW50IGVuZFkgPSBtaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCB5
ICsgcmFkaXVzWSk7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwg
PCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbAorICAgICAg
ICAgICAgZXh0cmVtYS5jbGVhcigpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0g
cmFkaXVzWDsgKytqKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb2x1bW5FeHRy
ZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHN0YXJ0WSAqIGVmZmVjdFdpZHRoICsgNCAqIGogKyBj
aGFubmVsKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnRZOyBpIDw9IGVuZFk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsID0gc3JjUGl4
ZWxBcnJheS0+Z2V0KGkgKiBlZmZlY3RXaWR0aCArIDQgKiBqICsgY2hhbm5lbCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSAm
JiBwaXhlbCA8PSBjb2x1bW5FeHRyZW1hKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG1f
dHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIHBpeGVsID49IGNvbHVtbkV4
dHJlbWEpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRXh0cmVtYSA9IHBpeGVsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5F
eHRyZW1hKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gS2Vy
bmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4gCisgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCk7ICsreCkgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFggPSBtaW4oeCArIHJhZGl1c1gsIGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgLSAxKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbHVt
bkV4dHJlbWEgPSBzcmNQaXhlbEFycmF5LT5nZXQoc3RhcnRZICogZWZmZWN0V2lkdGggKyBlbmRY
ICogNCArIGNoYW5uZWwpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydFk7IGkg
PD0gZW5kWTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWwg
PSBzcmNQaXhlbEFycmF5LT5nZXQoaSAqIGVmZmVjdFdpZHRoICsgZW5kWCAqIDQgKyBjaGFubmVs
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFICYmIHBpeGVsIDw9IGNvbHVtbkV4dHJlbWEpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgJiYgcGl4ZWwg
Pj0gY29sdW1uRXh0cmVtYSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5FeHRyZW1h
ID0gcGl4ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh4IC0gcmFk
aXVzWCA+PSAwKQorICAgICAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKKyAgICAg
ICAgICAgICAgICBpZiAoeCArIHJhZGl1c1ggPD0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtYSk7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbnRpcmVFeHRyZW1hID0gZXh0cmVtYVswXTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGtlcm5lbEluZGV4ID0gMDsga2VybmVsSW5kZXgg
PCBleHRyZW1hLnNpemUoKTsgKytrZXJuZWxJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgJiYgZXh0cmVtYVtrZXJu
ZWxJbmRleF0gPD0gZW50aXJlRXh0cmVtYSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICht
X3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBleHRyZW1hW2tlcm5lbElu
ZGV4XSA+PSBlbnRpcmVFeHRyZW1hKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudGlyZUV4
dHJlbWEgPSBleHRyZW1hW2tlcm5lbEluZGV4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldCh5ICogZWZmZWN0V2lkdGggKyA0ICogeCAr
IGNoYW5uZWwsIGVudGlyZUV4dHJlbWEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRh
LmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworfQorCit2b2lkIEZFTW9ycGhvbG9neTo6
ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CisgICAgICAg
IHRzIDw8ICJVTktOT1dOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREU6CisgICAgICAgIHRzIDw8ICJFUk9ERSI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURToKKyAgICAgICAgdHMgPDwgIkRJ
TEFURSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRT
dHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAg
ICB0cyA8PCAiW2ZlTW9ycGhvbG9neSI7CisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiIG9wZXJhdG9yPVwiIiA8PCBtb3JwaG9sb2d5T3Bl
cmF0b3IoKSA8PCAiXCIgIgorICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IHJhZGl1c1goKSA8PCAi
LCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neS5oIgorI2lmIEVOQUJM
RShGSUxURVJTKQorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCiAjaW5jbHVkZSAiQ2FudmFz
UGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtMTg1LDQgKzE4NSw0IEBAIFRl
eHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXMKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5k
aWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCShyZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaDo2ODAxNikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRU1vcnBo
b2xvZ3lfaAorI2RlZmluZSBTVkdGRU1vcnBob2xvZ3lfaAorCisjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHsKKyAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCisgICAgRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKKyAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElM
QVRFID0gMgorfTsKKworY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7ICAKKyAg
ICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0OworICAg
IHZvaWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworCisg
ICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0OworICAgIHZvaWQgc2V0UmFkaXVzWChmbG9hdCk7CisK
KyAgICBmbG9hdCByYWRpdXNZKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSYWRpdXNZKGZsb2F0KTsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVt
cCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRU1vcnBo
b2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CisgICAgCisgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgZmxvYXQg
bV9yYWRpdXNYOworICAgIGZsb2F0IG1fcmFkaXVzWTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5k
aWYgLy8gU1ZHRkVNb3JwaG9sb2d5X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICov
CiAKLSNpZm5kZWYgU1ZHRkVNb3JwaG9sb2d5X2gKLSNkZWZpbmUgU1ZHRkVNb3JwaG9sb2d5X2gK
KyNpZm5kZWYgRkVNb3JwaG9sb2d5X2gKKyNkZWZpbmUgRkVNb3JwaG9sb2d5X2gKIAotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogCkBAIC02MSw2ICs2MSw2
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0j
ZW5kaWYgLy8gU1ZHRkVNb3JwaG9sb2d5X2gKKyNlbmRpZiAvLyBGRU1vcnBob2xvZ3lfaApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShy
ZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9m
ZnNldC5jcHA6NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiU1ZHRkVPZmZzZXQuaCIKKworI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFT2Zm
c2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoKQor
ICAgICwgbV9keChkeCkKKyAgICAsIG1fZHkoZHkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RkVPZmZz
ZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRkVPZmZzZXQoZHgsIGR5KSk7Cit9CisKK2Zsb2F0IEZFT2Zmc2V0OjpkeCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHg7Cit9CisKK3ZvaWQgRkVPZmZzZXQ6OnNldER4KGZs
b2F0IGR4KQoreworICAgIG1fZHggPSBkeDsKK30KKworZmxvYXQgRkVPZmZzZXQ6OmR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9keTsKK30KKwordm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQg
ZHkpCit7CisgICAgbV9keSA9IGR5OworfQorCit2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIq
IGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAg
aW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29u
dGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBGbG9hdFJlY3Qgc291
cmNlSW1hZ2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKKyAgICBzb3VyY2VJbWFn
ZVJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworCisgICAgaWYgKGZpbHRlci0+ZWZmZWN0Qm91
bmRpbmdCb3hNb2RlKCkpIHsKKyAgICAgICAgbV9keCAqPSBzb3VyY2VJbWFnZVJlY3Qud2lkdGgo
KTsKKyAgICAgICAgbV9keSAqPSBzb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCk7CisgICAgfQorICAg
IG1fZHggKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKKyAgICBtX2R5ICo9
IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOworCisgICAgRmxvYXRSZWN0IGRz
dFJlY3QgPSBGbG9hdFJlY3QobV9keCArIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHkgKyBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLmhlaWdodCgpKTsKKworICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgZHN0UmVjdCk7Cit9CisKK3ZvaWQgRkVPZmZzZXQ6OmR1bXAoKQoreworfQorCitUZXh0
U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
aW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0
cyA8PCAiW2ZlT2Zmc2V0IjsgCisgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzKTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHko
KSA8PCAiXCJdXG4iOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCBpbmRlbnQgKyAxKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZp
c2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZH
RkVPZmZzZXQuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRU9mZnNldC5oIgog
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0x
MDksNCArMTA5LDQgQEAgVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCShyZXZpc2lvbiA2ODAxNikJKGZy
b20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oOjY4MDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHRkVPZmZz
ZXRfaAorI2RlZmluZSBTVkdGRU9mZnNldF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFT2Zmc2V0PiBjcmVhdGUo
ZmxvYXQgZHgsIGZsb2F0IGR5KTsKKworICAgIGZsb2F0IGR4KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXREeChmbG9hdCk7CisKKyAgICBmbG9hdCBkeSgpIGNvbnN0OworICAgIHZvaWQgc2V0RHkoZmxv
YXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZF
T2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CisKKyAgICBmbG9hdCBtX2R4OworICAgIGZsb2F0
IG1fZHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFT2Zmc2V0X2gKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCShyZXZpc2lv
biA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMCArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHRkVPZmZzZXRfaAotI2RlZmluZSBTVkdGRU9m
ZnNldF9oCisjaWZuZGVmIEZFT2Zmc2V0X2gKKyNkZWZpbmUgRkVPZmZzZXRfaAogCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAKQEAgLTUyLDYgKzUyLDYg
QEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCiAKLSNl
bmRpZiAvLyBTVkdGRU9mZnNldF9oCisjZW5kaWYgLy8gRkVPZmZzZXRfaApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAJKHJldmlzaW9uIDY4MDE2KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0ZFU3Bl
Y3VsYXJMaWdodGluZy5oIgorCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorICAgIGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPiBsaWdodFNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywg
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291
cmNlKQoreworfQorCitQYXNzUmVmUHRyPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxp
Z2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsCisgICAgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGRVNwZWN1bGFyTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBz
cGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LAorICAgICAgICBrZXJuZWxVbml0TGVu
Z3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKSk7Cit9CisKK0ZFU3BlY3VsYXJM
aWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygpCit7Cit9CisKK0NvbG9yIEZFU3BlY3VsYXJM
aWdodGluZzo6bGlnaHRpbmdDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGlnaHRpbmdD
b2xvcjsKK30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCit7CisgICAgbV9saWdodGluZ0NvbG9yID0gbGlnaHRp
bmdDb2xvcjsKK30KKworZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2VTY2FsZTsKK30KKwordm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCit7CisgICAgbV9z
dXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Cit9CisKK2Zsb2F0IEZFU3BlY3VsYXJMaWdodGlu
Zzo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3BlY3VsYXJDb25z
dGFudDsKK30KKwordm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQo
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKK3sKKyAgICBtX3NwZWN1bGFyQ29uc3RhbnQgPSBzcGVj
dWxhckNvbnN0YW50OworfQorCitmbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7Cit9CisKK3Zv
aWQgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQpCit7CisgICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsK
K30KKworZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7Cit9CisKK3ZvaWQgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkK
K3sKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7Cit9CisKK2Zs
b2F0IEZFU3BlY3VsYXJMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAoreworICAg
IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOworfQorCit2b2lkIEZFU3BlY3VsYXJMaWdodGlu
Zzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCit7CisgICAg
bV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOworfQorCitjb25zdCBMaWdo
dFNvdXJjZSogRkVTcGVjdWxhckxpZ2h0aW5nOjpsaWdodFNvdXJjZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKK3sK
KyAgICBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7Cit9CisKK3ZvaWQgRkVTcGVjdWxhckxp
Z2h0aW5nOjpkdW1wKCkKK3sKK30KKworVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAor
eworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJbZmVTcGVjdWxhckxp
Z2h0aW5nIjsKKyAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwor
ICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgor
ICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3BlY3VsYXJDb25zdGFudCA8PCAi
XCIgIgorICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25l
bnQgPDwgIlwiXVxuIjsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgaW5kZW50ICsgMSk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNWRykg
JiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgiCisj
aWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5nLmgiCiAKLSNp
bmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTM1LDQgKzEzNSw0IEBAIFRleHRTdHJlYW0mIEZFU3Bl
Y3VsYXJMaWdodGluZzo6ZXh0ZXJuYWwKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCShyZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaDo2ODAxNikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBT
VkdGRVNwZWN1bGFyTGlnaHRpbmdfaAorI2RlZmluZSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdfaAor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVMaWdo
dGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFU3BlY3VsYXJMaWdodGlu
ZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
RVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKKyAg
ICAgICAgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworICAg
IHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworCisgICAgQ29sb3IgbGlnaHRpbmdDb2xv
cigpIGNvbnN0OworICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworCisg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUo
ZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OworICAgIHZvaWQg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKKworICAgIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVu
Z3RoWChmbG9hdCk7CisKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OworICAg
IHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQpOworCisgICAgY29uc3QgTGlnaHRTb3Vy
Y2UqIGxpZ2h0U291cmNlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVm
UHRyPExpZ2h0U291cmNlPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8
TGlnaHRTb3VyY2U+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOSwxMSArMTksMTEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKLSNkZWZpbmUgU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nX2gKKyNpZm5kZWYgRkVTcGVjdWxhckxpZ2h0aW5nX2gKKyNkZWZpbmUg
RkVTcGVjdWxhckxpZ2h0aW5nX2gKIAotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNs
dWRlICJGRUxpZ2h0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjQsNiArNjQs
NiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKIAot
I2VuZGlmIC8vIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCisjZW5kaWYgLy8gRkVTcGVjdWxhckxp
Z2h0aW5nX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwCShyZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRVRpbGUuY3BwOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCisjaW5jbHVkZSAiU1ZHRkVUaWxlLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVUaWxlOjpGRVRp
bGUoKQorICAgIDogRmlsdGVyRWZmZWN0KCkKK3sKK30KKworUGFzc1JlZlB0cjxGRVRpbGU+IEZF
VGlsZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVGlsZSk7Cit9CisK
K0Zsb2F0UmVjdCBGRVRpbGU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0
ZXIqIGZpbHRlcikKK3sKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGZpbHRlcik7CisKKyAgICBmaWx0ZXItPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbih0aGlzLCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpKTsKKyAgICByZXR1cm4g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Cit9CisKK3ZvaWQgRkVUaWxlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0
Q29udGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7CisKKyAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhh
cyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKKyAgICAvLyBzaXpl
IG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVj
aWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCisgICAgaWYgKGluLT5pc1NvdXJjZUlucHV0KCkp
IHsKKyAgICAgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9u
KCk7CisgICAgICAgIGZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CisgICAgICAg
IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZWdpb24pOworICAgIH0KKworICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxl
UmVjdC5zaXplKCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRp
bGVJbWFnZS0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CisgICAg
UmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLT5jb3B5
SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAg
IG1hdHJpeC50cmFuc2xhdGUoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgp
IC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksCisgICAgICAgICAgICAgICAg
ICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLnkoKSk7CisgICAgcGF0dGVybi5nZXQoKS0+c2V0UGF0dGVy
blNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CisKKyAgICBmaWx0ZXJDb250ZXh0LT5zZXRGaWxsUGF0
dGVybihwYXR0ZXJuKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnNpemUoKSkpOworfQor
Cit2b2lkIEZFVGlsZTo6ZHVtcCgpCit7Cit9CisKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAiW2ZlVGlsZSI7CisgICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyA8PCAiXVxuIjsK
KyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsg
MSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24gNjgwMTYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAsOCArMjAsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVRpbGUuaCIKKyNpZiBF
TkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVRpbGUuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgpAQCAtMTAyLDUgKzEwMiw1IEBAIFRleHRT
dHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYg
Ly8gRU5BQkxFKEZJTFRFUlMpCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmgJKHJldmlzaW9uIDY4MDE2KQkoZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFVGlsZS5oOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ZFVGlsZV9oCisjZGVmaW5lIFNWR0ZFVGlsZV9oCisK
KyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
Y2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVUaWxlPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShG
aWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBj
b25zdDsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihGaWx0ZXIqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgRkVUaWxlKCk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKworI2VuZGlmIC8vIFNWR0ZFVGlsZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTks
MTAgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFNWR0ZFVGlsZV9oCi0jZGVmaW5lIFNWR0ZFVGlsZV9oCisjaWZuZGVmIEZFVGlsZV9oCisj
ZGVmaW5lIEZFVGlsZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
ZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKIApAQCAtNDUsNiArNDUsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNlbmRp
ZiAvLyBFTkFCTEUoRklMVEVSUykKIAotI2VuZGlmIC8vIFNWR0ZFVGlsZV9oCisjZW5kaWYgLy8g
RkVUaWxlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwOjY4MDE2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHRkVUdXJi
dWxlbmNlLmgiCisKKyNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qCisgICAgUHJvZHVjZXMgcmVzdWx0cyBp
biB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKKyAgICByID0gKGEgKiBy
KSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAorICAgIG0gPSByYW5k
TWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgorICAgIFNlZSBbUGFy
ayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4CisgICAg
VG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgw
NjUKKyAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwg
c2VlZCBpcyAxLgorKi8KK3N0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Citz
dGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAx
CitzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmlt
aXRpdmUgcm9vdCBvZiBtCitzdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0g
LyBhCitzdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorCitGRVR1cmJ1
bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBi
b29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVyRWZmZWN0KCkKKyAgICAsIG1fdHlwZSh0eXBl
KQorICAgICwgbV9iYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKKyAgICAsIG1fYmFzZUZy
ZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCisgICAgLCBtX251bU9jdGF2ZXMobnVtT2N0YXZlcykK
KyAgICAsIG1fc2VlZChzZWVkKQorICAgICwgbV9zdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcykKK3sK
K30KKworUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1
bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5
WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQorCitUdXJi
dWxhbmNlVHlwZSBGRVR1cmJ1bGVuY2U6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5
cGU7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGFuY2VUeXBlIHR5cGUp
Cit7CisgICAgbV90eXBlID0gdHlwZTsKK30KKworZmxvYXQgRkVUdXJidWxlbmNlOjpiYXNlRnJl
cXVlbmN5WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVk7Cit9CisKK3Zv
aWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkK
K3sKKyAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Cit9CisKK2Zsb2F0IEZF
VHVyYnVsZW5jZTo6YmFzZUZyZXF1ZW5jeVgoKSBjb25zdAoreworICAgIHJldHVybiBtX2Jhc2VG
cmVxdWVuY3lYOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxv
YXQgYmFzZUZyZXF1ZW5jeVgpCit7CisgICAgICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVx
dWVuY3lYOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6OnNlZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NlZWQ7IAorfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVk
KQoreworICAgIG1fc2VlZCA9IHNlZWQ7Cit9CisKK2ludCBGRVR1cmJ1bGVuY2U6Om51bU9jdGF2
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX251bU9jdGF2ZXM7Cit9CisKK3ZvaWQgRkVUdXJi
dWxlbmNlOjpzZXROdW1PY3RhdmVzKGJvb2wgbnVtT2N0YXZlcykKK3sKKyAgICBtX251bU9jdGF2
ZXMgPSBudW1PY3RhdmVzOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6c3RpdGNoVGlsZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX3N0aXRjaFRpbGVzOworfQorCit2b2lkIEZFVHVyYnVsZW5j
ZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCit7CisgICAgbV9zdGl0Y2hUaWxlcyA9IHN0
aXRjaDsKK30KKworLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFw
dGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246
CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNl
CisKK0ZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEobG9uZyBwYWludGlu
Z1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAgICA6IHNlZWQocGFpbnRpbmdT
ZWVkKQorICAgICwgd2lkdGgoMCkKKyAgICAsIGhlaWdodCgwKQorICAgICwgd3JhcFgoMCkKKyAg
ICAsIHdyYXBZKDApCisgICAgLCBjaGFubmVsKDApCisgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5n
U2l6ZSkKK3sKK30KKworLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KK2lubGluZSBs
b25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQoreworICAgIGxvbmcgcmVz
dWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2Vl
ZCAvIHNfcmFuZFEpOworICAgIGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAgcmVzdWx0ICs9IHNf
cmFuZE1heGltdW07CisgICAgc2VlZCA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKK3sKKyAgICByZXR1cm4gdCAqIHQg
KiAoMyAtIDIgKiB0KTsKK30KKworaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxv
YXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwor
fQorCitpbmxpbmUgdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisgICAgLy8g
VGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0u
CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5z
ZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAg
ICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFp
bnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVu
dDsKKyAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3Jh
ZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBn
cmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUg
KDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7CisgICAgICAg
ICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRv
bSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Cisg
ICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3FydGYoZ3JhZGllbnRbMF0gKiBncmFk
aWVudFswXSArIGdyYWRpZW50WzFdICogZ3JhZGllbnRbMV0pOworICAgICAgICAgICAgZ3JhZGll
bnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgICAgIGdyYWRpZW50WzFdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgaSA9
IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJh
bmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAgICBB
U1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKKyAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXTsKKyAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzBdOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tT
aXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGNoZWNrTm9pc2UoaW50JiBub2lzZVZhbHVl
LCBpbnQgbGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQoreworICAgIGlmIChub2lzZVZhbHVlID49
IGxpbWl0VmFsdWUpCisgICAgICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFsdWU7CisgICAgaWYgKG5v
aXNlVmFsdWUgPj0gbGltaXRWYWx1ZSAtIDEpCisgICAgICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFs
dWUgLSAxOworfQorCitmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVj
dCBOb2lzZSB7CisgICAgICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOworICAgICAg
ICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZTsKKworICAgICAgICBOb2lzZShmbG9h
dCBjb21wb25lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHBvc2l0aW9uID0gY29t
cG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIG5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIG5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlID0gcG9zaXRpb24gLSBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
OworICAgICAgICB9CisgICAgfTsKKworICAgIE5vaXNlIG5vaXNlWChub2lzZVZlY3Rvci54KCkp
OworICAgIE5vaXNlIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOworICAgIGZsb2F0KiBxOworICAg
IGZsb2F0IHN4LCBzeSwgYSwgYiwgdSwgdjsKKworICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0
IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Cisg
ICAgICAgIGNoZWNrTm9pc2Uobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUsIHBhaW50
aW5nRGF0YS53cmFwWCwgcGFpbnRpbmdEYXRhLndpZHRoKTsKKyAgICAgICAgY2hlY2tOb2lzZShu
b2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSwgcGFpbnRpbmdEYXRhLndyYXBZLCBwYWlu
dGluZ0RhdGEuaGVpZ2h0KTsKKyAgICB9CisKKyAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVn
ZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAg
aW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yWyhub2lz
ZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDEpICYgc19ibG9ja01hc2tdOworCisgICAg
c3ggPSBzbW9vdGhDdXJ2ZShub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOworICAg
IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKwor
ICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgorICAgIGludCB0ZW1w
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtw
YWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUg
KiBxWzFdOworICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0
aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAgcSA9IHBh
aW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07CisgICAgdiA9
IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyBub2lzZVku
bm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzFdOworICAgIGEgPSBsaW5lYXJJbnRlcnBv
bGF0aW9uKHN4LCB1LCB2KTsKKyAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwor
ICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBd
OworICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgKG5v
aXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKKyAgICB0ZW1wID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICB2ID0gKG5vaXNlWC5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZy
YWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07CisgICAgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gs
IHUsIHYpOworICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKK30KKwor
dW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBv
aW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3sKKyAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgp
OworICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsKKyAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gcGFp
bnRpbmdEYXRhLmZpbHRlclNpemUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVIZWlnaHQgPiAw
KTsKKyAgICAvLyBBZGp1c3QgdGhlIGJhc2UgZnJlcXVlbmNpZXMgaWYgbmVjZXNzYXJ5IGZvciBz
dGl0Y2hpbmcuCisgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgLy8gV2hlbiBzdGl0
Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQK
KyAgICAgICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4K
KyAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVgpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0Zy
ZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBtX2Jhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0
aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBt
X2Jhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIC8vIEJhc2VGcmVxdWVu
Y3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAg
ICAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVl
bmN5IC8gbV9iYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lY
ID0gbG93RnJlcXVlbmN5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYmFz
ZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIGlmIChtX2Jh
c2VGcmVxdWVuY3lZKSB7CisgICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYo
dGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAg
IGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5
WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgLyBsb3dG
cmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gbV9iYXNlRnJlcXVlbmN5WSkKKyAgICAgICAgICAg
ICAgICBtX2Jhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OworICAgICAg
ICB9CisgICAgICAgIC8vIFNldCB1cCBUdXJidWxlbmNlSW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgor
ICAgICAgICBwYWludGluZ0RhdGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogbV9iYXNlRnJl
cXVlbmN5WCk7CisgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBw
YWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSByb3VuZGYo
dGlsZUhlaWdodCAqIG1fYmFzZUZyZXF1ZW5jeVkpOworICAgICAgICBwYWludGluZ0RhdGEud3Jh
cFkgPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICB9CisgICAgZmxv
YXQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gMDsKKyAgICBGbG9hdFBvaW50IG5vaXNlVmVj
dG9yKHBvaW50LngoKSAqIG1fYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1
ZW5jeVkpOworICAgIGZsb2F0IHJhdGlvID0gMTsKKyAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBv
Y3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChtX3R5cGUgPT0g
RkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFKQorICAgICAgICAgICAgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikgLyByYXRp
bzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9
IGZhYnNmKG5vaXNlMkQocGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikpIC8gcmF0aW87CisgICAg
ICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7CisgICAgICAgIG5vaXNl
VmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7CisgICAgICAgIHJhdGlvICo9IDI7Cisg
ICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNo
IHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZW9pc2UgYmVmb3JlIHRoZSBtdWx0aXBs
aWNhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmll
cyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgorICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndpZHRo
ICo9IDI7CisgICAgICAgICAgICBwYWludGluZ0RhdGEud3JhcFggPSAyICogcGFpbnRpbmdEYXRh
LndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5oZWlnaHQg
Kj0gMjsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWSA9IDIgKiBwYWludGluZ0RhdGEu
d3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIHZh
bHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQorICAgIC8vIGFu
ZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgorICAgIGlm
IChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFKQorICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKKyAgICAvLyBDbGFtcCByZXN1bHQKKyAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
PSBzdGQ6Om1heChzdGQ6Om1pbih0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDEuZiksIDAuZik7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCAqIDI1NSk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlOjphcHBseShGaWx0ZXIqIGZp
bHRlcikKK3sKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsK
KyAgICBpZiAoIWltYWdlUmVjdC5zaXplKCkud2lkdGgoKSB8fCAhaW1hZ2VSZWN0LnNpemUoKS5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWln
aHQoKSk7CisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIGltYWdlUmVjdC5z
aXplKCkpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisgICAgRmxvYXRSZWN0IGZp
bHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgRmxvYXRQb2ludCBwb2lu
dDsKKyAgICBwb2ludC5zZXRZKGZpbHRlclJlZ2lvbi55KCkpOworICAgIGludCBpbmRleE9mUGl4
ZWxDaGFubmVsID0gMDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQo
KTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CisgICAgICAgIHBv
aW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54
KCkgKyAxKTsKKyAgICAgICAgICAgIGZvciAocGFpbnRpbmdEYXRhLmNoYW5uZWwgPSAwOyBwYWlu
dGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdEYXRhLmNoYW5uZWwsICsraW5kZXhPZlBp
eGVsQ2hhbm5lbCkKKyAgICAgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KGluZGV4
T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5n
RGF0YSwgcG9pbnQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHRJbWFnZSgpLT5wdXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50
KCkpOworfQorCit2b2lkIEZFVHVyYnVsZW5jZTo6ZHVtcCgpCit7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUdXJidWxhbmNlVHlwZSYg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBF
X1VOS05PV046CisgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFOgorICAgICAgICB0cyA8PCAiVFVSQlVM
QU5DRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RB
TE5PSVNFOgorICAgICAgICB0cyA8PCAiTk9JU0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgIltmZVR1cmJ1bGVuY2UiOworICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgdHMgPDwgIiB0eXBl
PVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKKyAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwg
YmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKKyAg
ICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCisgICAgICAgPDwgIm51bU9jdGF2
ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAiXCIgIgorICAgICAgIDw8ICJzdGl0Y2hUaWxlcz1c
IiIgPDwgc3RpdGNoVGlsZXMoKSA8PCAiXCJdXG4iOworICAgIHJldHVybiB0czsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCAr
MjMsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFC
TEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2UuaCIKKyNpZiBFTkFCTEUoRklM
VEVSUykKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkNhbnZhc1BpeGVs
QXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKQEAgLTM4Myw0ICszODMsNCBAQCBUZXh0U3Ry
ZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8v
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmg6NjgwMTYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdGRVR1cmJ1bGVu
Y2VfaAorI2RlZmluZSBTVkdGRVR1cmJ1bGVuY2VfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBUdXJidWxhbmNlVHlwZSB7CisgICAg
RkVUVVJCVUxFTkNFX1RZUEVfVU5LTk9XTiA9IDAsCisgICAgRkVUVVJCVUxFTkNFX1RZUEVfRlJB
Q1RBTE5PSVNFID0gMSwKKyAgICBGRVRVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFID0gMgorfTsK
KworY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVsYW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisKKyAgICBUdXJidWxhbmNlVHlwZSB0
eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKFR1cmJ1bGFuY2VUeXBlKTsKKworICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lZKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShm
bG9hdCk7CisKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0OworICAgIHZvaWQgc2V0
QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOworCisgICAgZmxvYXQgc2VlZCgpIGNvbnN0OworICAgIHZv
aWQgc2V0U2VlZChmbG9hdCk7CisKKyAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0OworICAgIHZv
aWQgc2V0TnVtT2N0YXZlcyhib29sKTsKKworICAgIGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdDsK
KyAgICB2b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24p
IGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAy
NTY7CisgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsK
KworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAgICAgICBsb25nIHNlZWQ7CisgICAgICAg
IGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgICAgIGZsb2F0
IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOworICAgICAgICBpbnQgd2lkdGg7
IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KKyAgICAgICAg
aW50IGhlaWdodDsKKyAgICAgICAgaW50IHdyYXBYOyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAu
CisgICAgICAgIGludCB3cmFwWTsKKyAgICAgICAgaW50IGNoYW5uZWw7CisgICAgICAgIEludFNp
emUgZmlsdGVyU2l6ZTsKKworICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQs
IGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSk7CisgICAgICAgIGlubGluZSBsb25nIHJhbmRv
bSgpOworICAgIH07CisKKyAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBm
bG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisKKyAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFp
bnRpbmdEYXRhJik7CisgICAgZmxvYXQgbm9pc2UyRChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQ
b2ludChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBUdXJidWxhbmNl
VHlwZSBtX3R5cGU7CisgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBtX2Jh
c2VGcmVxdWVuY3lZOworICAgIGludCBtX251bU9jdGF2ZXM7CisgICAgZmxvYXQgbV9zZWVkOwor
ICAgIGJvb2wgbV9zdGl0Y2hUaWxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZH
RkVUdXJidWxlbmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MCArMjEsMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgU1ZHRkVUdXJidWxlbmNlX2gKLSNkZWZpbmUgU1ZHRkVUdXJidWxlbmNlX2gKKyNpZm5kZWYg
RkVUdXJidWxlbmNlX2gKKyNkZWZpbmUgRkVUdXJidWxlbmNlX2gKIAotI2lmIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQorI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogCkBAIC05OCw2ICs5OCw2IEBAIHByaXZh
dGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8g
U1ZHRkVUdXJidWxlbmNlX2gKKyNlbmRpZiAvLyBGRVR1cmJ1bGVuY2VfaApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCShyZXZp
c2lvbiA2ODAxNikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNv
dXJjZS5jcHA6NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgIlNW
R0Rpc3RhbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR1BvaW50TGlnaHRTb3VyY2UuaCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiU1ZHU3BvdExpZ2h0
U291cmNlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdE
YXRhJikKK3sKK30KKwordm9pZCBQb2ludExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikKK3sKKyAg
ICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAtIHgpOworICAg
IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0geSk7CisgICAg
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6KTsKKyAgICBw
YWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7Cit9CisKKy8vIHNwb3QtbGlnaHQg
ZWRnZSBkYXJrZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNvbHV0ZSB0cmVzaG9sZAorLy8gYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKK3N0YXRpYyBjb25z
dCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKKwordm9pZCBTcG90TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit7CisgICAg
cGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3RvciA9IHBhaW50aW5nRGF0YS5jb2xvclZlY3Rv
cjsKKyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFgobV9kaXJlY3Rpb24ueCgp
IC0gbV9wb3NpdGlvbi54KCkpOworICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0
WShtX2RpcmVjdGlvbi55KCkgLSBtX3Bvc2l0aW9uLnkoKSk7CisgICAgcGFpbnRpbmdEYXRhLmRp
cmVjdGlvblZlY3Rvci5zZXRaKG1fZGlyZWN0aW9uLnooKSAtIG1fcG9zaXRpb24ueigpKTsKKyAg
ICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOworCisgICAgaWYgKCFt
X2xpbWl0aW5nQ29uZUFuZ2xlKSB7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGlt
aXQgPSAwLjBmOworICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxp
YXNUcmVzaG9sZDsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmds
ZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8
IDAuMGYpCisgICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IC1saW1pdGluZ0NvbmVBbmds
ZTsKKyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlID4gOTAuMGYpCisgICAgICAgICAgICBs
aW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxpbWl0aW5nQ29uZUFuZ2xlKSk7CisgICAg
ICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZM
aW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOworICAgIH0KKworICAgIC8vIE9wdGltaXphdGlvbiBm
b3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVzCisgICAgaWYgKCFtX3NwZWN1bGFyRXhw
b25lbnQpCisgICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMDsKKyAgICBl
bHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKKyAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAxOworICAgIGVsc2UgLy8gSXQgaXMgbmVpdGhlciAwLjBmIG5v
ciAxLjBmCisgICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMjsKK30KKwor
dm9pZCBTcG90TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KQoreworICAgIHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7CisgICAgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5KTsKKyAgICBwYWludGluZ0RhdGEubGln
aHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHopOworICAgIHBhaW50aW5nRGF0YS5saWdo
dFZlY3Rvci5ub3JtYWxpemUoKTsKKworICAgIGZsb2F0IGNvc2luZU9mQW5nbGUgPSBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yOworICAgIGlm
IChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCkgeworICAgICAg
ICAvLyBObyBsaWdodCBpcyBwcm9kdWNlZCwgc2NhbmxpbmVzIGFyZSBub3QgdXBkYXRlZAorICAg
ICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WCgwLjBmKTsKKyAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbG9yVmVjdG9yLnNldFkoMC4wZik7CisgICAgICAgIHBhaW50aW5nRGF0YS5jb2xv
clZlY3Rvci5zZXRaKDAuMGYpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2V0
IHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwKKyAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgIHN3
aXRjaCAocGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQpIHsKKyAgICBjYXNlIDA6CisgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDAgPT0gMQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAtY29zaW5l
T2ZBbmdsZTsgLy8gLWNvc2luZU9mQW5nbGUgXiAxID09IC1jb3NpbmVPZkFuZ2xlCisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBwb3dmKC1jb3Np
bmVPZkFuZ2xlLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0KQorICAg
ICAgICBsaWdodFN0cmVuZ3RoICo9IChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gY29z
aW5lT2ZBbmdsZSkgLyAocGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIHBhaW50aW5nRGF0
YS5jb25lRnVsbExpZ2h0KTsKKworICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMS4wZikKKyAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7CisKKyAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iu
c2V0WChwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLngoKSAqIGxpZ2h0U3RyZW5ndGgp
OworICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZKHBhaW50aW5nRGF0YS5wcml2YXRl
Q29sb3JWZWN0b3IueSgpICogbGlnaHRTdHJlbmd0aCk7CisgICAgcGFpbnRpbmdEYXRhLmNvbG9y
VmVjdG9yLnNldFoocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci56KCkgKiBsaWdodFN0
cmVuZ3RoKTsKK30KKwordm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit7CisgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJy
YWQobV9hemltdXRoKTsKKyAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9u
KTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChjb3NmKGF6aW11dGgpICogY29z
ZihlbGV2YXRpb24pKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShzaW5mKGF6
aW11dGgpICogY29zZihlbGV2YXRpb24pKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iu
c2V0WihzaW5mKGVsZXZhdGlvbikpOworfQorCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6dXBk
YXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCwgaW50LCBmbG9hdCkKK3sKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0
UG9pbnQzRCYgcCkKK3sKKyAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgp
IDw8ICIgej0iIDw8IHAueigpOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgUG9p
bnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9UE9JTlQtTElHSFRdICI7CisgICAgdHMgPDwgIltwb3Np
dGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisKK1Rl
eHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsKKyAgICB0
cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAgIHRzIDw8ICJb
ZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW3NwZWN1
bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8PCAiXCJdIjsKKyAgICB0cyA8
PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0NvbmVBbmdsZSgpIDw8ICJcIl0i
OworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8
ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOworICAgIHRzIDw8ICJbYXppbXV0aD1cIiIgPDwgYXpp
bXV0aCgpIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZWxldmF0aW9uPVwiIiA8PCBlbGV2YXRpb24o
KSA8PCAiXCJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCShyZXZp
c2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEzICsyMiwxMyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRl
ICJTVkdMaWdodFNvdXJjZS5oIgorI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkxpZ2h0
U291cmNlLmgiCiAKLSNpbmNsdWRlICJTVkdEaXN0YW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRl
ICJTVkdQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkRpc3RhbnRMaWdo
dFNvdXJjZS5oIgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTY2LDQgKzE2Niw0
IEBAIFRleHRTdHJlYW0mIERpc3RhbnRMaWdodFNvdXJjZTo6ZXh0ZXJuYWwKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjgwMTYpCShmcm9tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaDo2ODAxNikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHTGlnaHRTb3VyY2VfaAorI2RlZmluZSBTVkdMaWdodFNvdXJjZV9oCisKKyNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBMaWdodFR5cGUgeworICAgIExTX0RJU1RB
TlQsCisgICAgTFNfUE9JTlQsCisgICAgTFNfU1BPVAorfTsKKworY2xhc3MgVGV4dFN0cmVhbTsK
KworY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNvdXJjZT4gewor
cHVibGljOgorCisgICAgLy8gTGlnaHQgdmVjdG9ycyBtdXN0IGJlIGNhbGN1bGF0ZWQgZm9yIGV2
ZXJ5IHBpeGVsIGR1cmluZworICAgIC8vIHBhaW50aW5nLiBJdCBpcyBleHBlbnNpdmUgdG8gcGFz
cyBhbGwgdGhlc2UgYXJndW1lbnRzIHRvCisgICAgLy8gYSBmcmVxdWVudGx5IGNhbGxlZCBmdW5j
dGlvbiwgZXNwZWNpYWxseSBiZWNhdXNlIG5vdCBhbGwKKyAgICAvLyBsaWdodCBzb3VyY2VzIHJl
cXVpcmUgYWxsIG9mIHRoZW0uIEluc3RlYWQsIHdlIGp1c3QgcGFzcworICAgIC8vIGEgcmVmZXJl
bmNlIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7
CisgICAgICAgIC8vIFNWR0ZFTGlnaHRpbmcgYWxzbyB1c2UgdGhlbQorICAgICAgICBGbG9hdFBv
aW50M0QgbGlnaHRWZWN0b3I7CisgICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAg
ICAgICAgLy8gUHJpdmF0ZSBtZW1iZXJzCisgICAgICAgIEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25W
ZWN0b3I7CisgICAgICAgIEZsb2F0UG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7CisgICAgICAg
IGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKKyAgICAgICAgZmxvYXQgY29uZUZ1bGxMaWdodDsKKyAg
ICAgICAgaW50IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgfTsKKworICAgIExpZ2h0U291cmNlKExp
Z2h0VHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgIHsgfQorCisgICAgdmly
dHVhbCB+TGlnaHRTb3VyY2UoKSB7IH0KKworICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShQYWludGluZ0RhdGEmKSA9IDA7CisgICAgLy8geiBpcyBhIGZsb2F0IG51bWJl
ciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKKyAgICAvLyBz
cGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51bWJlcj4g
aW4gdGhlIFNWRyBzdGFuZGFyZAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEo
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSA9IDA7CisKK3ByaXZhdGU6Cisg
ICAgTGlnaHRUeXBlIG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gU1ZHTGln
aHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwx
MCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdM
aWdodFNvdXJjZV9oCi0jZGVmaW5lIFNWR0xpZ2h0U291cmNlX2gKKyNpZm5kZWYgTGlnaHRTb3Vy
Y2VfaAorI2RlZmluZSBMaWdodFNvdXJjZV9oCiAKLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKyNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC03OSw2ICs3OSw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2VuZGlmIC8vIEVOQUJM
RShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHTGlnaHRTb3VyY2VfaAorI2VuZGlmIC8vIExpZ2h0
U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkocmV2aXNpb24gNjgwMTYpCShmcm9tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHUG9pbnRMaWdodFNvdXJjZS5oOjY4MDE2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0
aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFNWR1BvaW50TGlnaHRTb3VyY2VfaAorI2RlZmluZSBTVkdQb2ludExpZ2h0U291cmNlX2gK
KworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlNWR0xpZ2h0
U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUG9pbnRMaWdodFNvdXJj
ZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50TGlnaHRTb3VyY2UocG9zaXRp
b24pKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0Rh
dGEoUGFpbnRpbmdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQ
YWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOworCisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24p
CisgICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCisgICAgICAgICwgbV9wb3NpdGlvbihw
b3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFNWR1BvaW50TGlnaHRTb3VyY2VfaApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDExICsyMCwxMSBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdQb2lu
dExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCisjaWZuZGVmIFBv
aW50TGlnaHRTb3VyY2VfaAorI2RlZmluZSBQb2ludExpZ2h0U291cmNlX2gKIAotI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCisj
aWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01NCw2ICs1NCw2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorI2Vu
ZGlmIC8vIEVOQUJMRShGSUxURVJTKQogCi0jZW5kaWYgLy8gU1ZHUG9pbnRMaWdodFNvdXJjZV9o
CisjZW5kaWYgLy8gUG9pbnRMaWdodFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA2ODAx
NikJKGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2Uu
aDo2ODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1Nwb3RMaWdodFNvdXJjZV9oCisjZGVmaW5lIFNWR1Nw
b3RMaWdodFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3BvdExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNE
JiBwb3NpdGlvbiwKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcG90TGlnaHRTb3VyY2UocG9zaXRpb24sIGRpcmVjdGlv
biwgc3BlY3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsKKyAgICB9CisKKyAgICBj
b25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fQorICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
aXJlY3Rpb247IH0KKworICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25lQW5nbGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQ
YWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KTsKKworICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3BvdExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQz
RCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uLAorICAgICAgICBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKKyAgICAgICAgOiBM
aWdodFNvdXJjZShMU19TUE9UKQorICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAg
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fc3BlY3VsYXJFeHBvbmVu
dChzcGVjdWxhckV4cG9uZW50KQorICAgICAgICAsIG1fbGltaXRpbmdDb25lQW5nbGUobGltaXRp
bmdDb25lQW5nbGUpCisgICAgeworICAgIH0KKworICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9u
OworICAgIEZsb2F0UG9pbnQzRCBtX2RpcmVjdGlvbjsKKworICAgIGZsb2F0IG1fc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
CisKKyNlbmRpZiAvLyBTVkdTcG90TGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAkocmV2aXNpb24g
NjgwMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDExICsyMCwxMSBAQAogICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTVkdTcG90TGlnaHRTb3VyY2VfaAotI2Rl
ZmluZSBTVkdTcG90TGlnaHRTb3VyY2VfaAorI2lmbmRlZiBTcG90TGlnaHRTb3VyY2VfaAorI2Rl
ZmluZSBTcG90TGlnaHRTb3VyY2VfaAogCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRF
UlMpCi0jaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNp
bmNsdWRlICJMaWdodFNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY3LDYg
KzY3LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMp
CiAKLSNlbmRpZiAvLyBTVkdTcG90TGlnaHRTb3VyY2VfaAorI2VuZGlmIC8vIFNwb3RMaWdodFNv
dXJjZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgJKHJl
dmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNp
bmNsdWRlICJTVkdGRUNvbnZvbHZlTWF0cml4LmgiCisjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJp
eC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJGRURpZmZ1c2VMaWdodGluZy5oIgogI2luY2x1ZGUg
IlNWR0NvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaCIKICNpbmNsdWRl
ICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2Rl
ZmluZSBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaCIKKyNpbmNs
dWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNyArMjEsOCBAQAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCiAjaW5j
bHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRGlzdGFudExp
Z2h0U291cmNlLmgiCisKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgJKHJldmlzaW9uIDY4
MDE2KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVkdGRUZsb29kRWxlbWVudF9oCiAKICNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUZsb29kLmgiCisjaW5j
bHVkZSAiRkVGbG9vZC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
RUxpZ2h0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVt
ZW50LmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogI2RlZmluZSBTVkdGRUxpZ2h0RWxl
bWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJM
aWdodFNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdMaWdo
dFNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBA
CiAjZGVmaW5lIFNWR0ZFTWVyZ2VFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgi
CiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgJ
KHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnRfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVk
ZSAiU1ZHRkVNb3JwaG9sb2d5LmgiCisjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCShyZXZpc2lvbiA2ODAxNikK
KysrIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjZGVmaW5lIFNWR0ZFT2Zmc2V0RWxlbWVudF9oCiAKICNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRU9mZnNldC5oIgogI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0ZF
T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAK
IAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdQb2ludExpZ2h0U291cmNlLmgiCisKKyNp
bmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24g
NjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmcuaCIKKyNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRp
bmcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAKIAogI2lmIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdodFNvdXJjZS5oIgorCisjaW5jbHVkZSAiU3BvdExpZ2h0
U291cmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNkZWZpbmUgU1ZHRkVUaWxlRWxlbWVu
dF9oCiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGRVRp
bGUuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
LSNpbmNsdWRlICJTVkdGRVRpbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyAr
MjIsNyBAQAogI2RlZmluZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50X2gKIAogI2lmIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFVHVyYnVsZW5jZS5oIgorI2lu
Y2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Rpc3RhbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRGlzdGFudExpZ2h0U291cmNlLmgJKHJl
dmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdEaXN0YW50
TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCi0jZGVm
aW5lIFNWR0Rpc3RhbnRMaWdodFNvdXJjZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIERpc3RhbnRMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzdGFudExpZ2h0U291cmNlPiBjcmVhdGUo
ZmxvYXQgYXppbXV0aCwgZmxvYXQgZWxldmF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aCwgZWxldmF0aW9uKSk7Ci0gICAg
fQotCi0gICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aDsgfQotICAg
IGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxldmF0aW9uOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgeik7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIERpc3RhbnRMaWdodFNvdXJjZShm
bG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNf
RElTVEFOVCkKLSAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkKLSAgICAgICAgLCBtX2VsZXZh
dGlvbihlbGV2YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IG1fYXppbXV0aDsKLSAg
ICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRGlz
dGFudExpZ2h0U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAi
U1ZHRkVDb252b2x2ZU1hdHJpeC5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50
U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJ
bnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3Qg
RmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwg
bV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCi0gICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKLSAgICAs
IG1fYmlhcyhiaWFzKQotICAgICwgbV90YXJnZXRPZmZzZXQodGFyZ2V0T2Zmc2V0KQotICAgICwg
bV9lZGdlTW9kZShlZGdlTW9kZSkKLSAgICAsIG1fa2VybmVsVW5pdExlbmd0aChrZXJuZWxVbml0
TGVuZ3RoKQotICAgICwgbV9wcmVzZXJ2ZUFscGhhKHByZXNlcnZlQWxwaGEpCi0gICAgLCBtX2tl
cm5lbE1hdHJpeChrZXJuZWxNYXRyaXgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVDb252b2x2ZU1h
dHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
Ci0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9m
ZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5l
bFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2Vy
bmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb252b2x2ZU1hdHJpeChr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQot
Ci1JbnRTaXplIEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2tlcm5lbFNpemU7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVs
U2l6ZShJbnRTaXplIGtlcm5lbFNpemUpCi17Ci0gICAgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6
ZTsgCi19Ci0KLWNvbnN0IFZlY3RvcjxmbG9hdD4mIEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsTWF0cml4OyAKLX0KLQotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKQotewotICAg
IG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAKLX0KLQotZmxvYXQgRkVDb252b2x2ZU1hdHJpeDo6
ZGl2aXNvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGl2aXNvcjsgCi19Ci0KLXZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcihmbG9hdCBkaXZpc29yKQotewotICAgIG1fZGl2aXNv
ciA9IGRpdmlzb3I7IAotfQotCi1mbG9hdCBGRUNvbnZvbHZlTWF0cml4OjpiaWFzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9iaWFzOyAKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRC
aWFzKGZsb2F0IGJpYXMpCi17Ci0gICAgbV9iaWFzID0gYmlhczsgCi19Ci0KLUludFBvaW50IEZF
Q29udm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGFy
Z2V0T2Zmc2V0OyAKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRUYXJnZXRPZmZzZXQo
SW50UG9pbnQgdGFyZ2V0T2Zmc2V0KQotewotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zm
c2V0OyAKLX0KLQotRWRnZU1vZGVUeXBlIEZFQ29udm9sdmVNYXRyaXg6OmVkZ2VNb2RlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9lZGdlTW9kZTsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUg
PSBlZGdlTW9kZTsgCi19Ci0KLUZsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5p
dExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgCi19Ci0K
LXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50IGtl
cm5lbFVuaXRMZW5ndGgpCi17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExl
bmd0aDsgCi19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cHJlc2VydmVBbHBoYSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJlc2VydmVBbHBoYTsgCi19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCi17Ci0gICAgbV9wcmVz
ZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBoYTsgCi19Ci0KLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24K
LSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSBy
ZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAg
ICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwK
LSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAg
ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMg
Y29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVk
IHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBs
ZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRl
ciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6
IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQg
aW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAg
ICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJl
IHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5
MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29s
dW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2Ug
KHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAg
ICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6
IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTog
MywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5
MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1w
dHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2Yg
dGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxh
dGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90
aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQ
aXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4g
YSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4g
dGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9u
LgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwg
SSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2lu
Y2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2Ug
aXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hh
ciBtYXggPSAyNTUpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4gbWF4OwotICAgIHJldHVy
biBjaGFubmVsOwotfQotCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdB
WVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoQ2FudmFzUGl4ZWxBcnJheSogaW1h
Z2UsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMs
IENhbnZhc1BpeGVsQXJyYXkqIHNyYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0g
cHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRp
dmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAg
aW1hZ2UtPnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsg
YmlhcywgbWF4QWxwaGEpKTsKLQotICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAg
ICAgIGltYWdlLT5zZXQocGl4ZWwsIHNyYy0+Z2V0KHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0vLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
PgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20pCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMK
LSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWwgPSAw
OwotICAgIGludCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNy
ZWFzZSA9IChtX2tlcm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0
aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAs
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rp
dmlzb3IpOwotCi0gICAgZm9yIChpbnQgeSA9IGNsaXBCb3R0b20gKyAxOyB5ID4gMDsgLS15KSB7
Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAg
ICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBtX2tlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAg
ICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsKLSAgICAgICAgICAg
IGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNb
MF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sy
XSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49
IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gbV9rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LT5n
ZXQoa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBtX2tlcm5l
bE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxz
WzJdICs9IG1fa2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+Z2V0KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIHRv
dGFsc1szXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChrZXJuZWxQaXhlbCkpOwotICAgICAg
ICAgICAgICAgICsra2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsK
LSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAga2Vy
bmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0g
bV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihw
YWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWlu
dGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkpOwotICAgICAgICAgICAg
c3RhcnRLZXJuZWxQaXhlbCArPSA0OwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNy
ZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgfQotfQot
Ci1BTFdBWVNfSU5MSU5FIGludCBGRUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAm
JiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHggPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhl
aWdodCkKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsK
LQotICAgIHN3aXRjaCAobV9lZGdlTW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05P
TkUKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAg
ICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+
PSBwYWludGluZ0RhdGEud2lkdGgpCi0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRo
IC0gMTsKLSAgICAgICAgaWYgKHkgPCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVs
c2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGlu
Z0RhdGEuaGVpZ2h0IC0gMTsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgeCkgPDwgMjsKLSAgICBjYXNlIEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwg
MCkKLSAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBh
aW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSAr
PSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
fQotfQotCi0vLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxz
KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQg
eTIpCi17Ci0gICAgaW50IHBpeGVsID0gKHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICog
NDsKLSAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKLSAgICBpbnQgd2lkdGggPSB4MiAtIHgxOwot
ICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOwotICAg
IGludCBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFy
dEtlcm5lbFBpeGVsWSA9IHkxIC0gbV90YXJnZXRPZmZzZXQueSgpOwotICAgIGludCB4SW5jcmVh
c2UgPSAocGFpbnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKLSAgICAvLyBDb250YWlucyB0
aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAs
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rp
dmlzb3IpOwotCi0gICAgZm9yIChpbnQgeSA9IGhlaWdodDsgeSA+IDA7IC0teSkgewotICAgICAg
ICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAtLXgpIHsKLSAgICAgICAgICAgIGludCBrZXJu
ZWxWYWx1ZSA9IG1fa2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5l
bFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAg
IHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAg
aWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7
Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4
ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IG1fa2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS0+
Z2V0KHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IG1fa2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRvdGFsc1syXSArPSBtX2tlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXktPmdldChwaXhlbEluZGV4ICsgMikpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0g
bV9rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxJbmRleCArIDMpKTsKLSAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAg
ICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhl
bFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhl
bFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5h
dGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkpOwotICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAg
ICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVs
UGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7
Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0SW50
ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGlu
dCBjbGlwQm90dG9tKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2Ug
aXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBk
ZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldEludGVy
aW9yUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHky
KQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBo
ZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9y
UGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEp
Ci0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwg
eDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFp
bnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFn
ZSgpLT5zaXplKCkpOwotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0K
LSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsKLSAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCkt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKLQotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53
aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0
KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
LSAgICBwYWludGluZ0RhdGEud2lkdGggPSBpbWFnZVJlY3Qud2lkdGgoKTsKLSAgICBwYWludGlu
Z0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0LmhlaWdodCgpOwotICAgIHBhaW50aW5nRGF0YS5iaWFz
ID0gbV9iaWFzICogMjU1OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwot
ICAgIGludCBjbGlwUmlnaHQgPSBpbWFnZVJlY3Qud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gaW1hZ2VSZWN0LmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA+PSAwICYmIGNsaXBCb3R0b20gPj0g
MCkgewotICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwg
Y2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSAr
IDE7Ci0gICAgICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICAg
ICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55
KCkpOwotICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlUmVjdC5oZWlnaHQoKSkKLSAgICAg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3RhcmdldE9m
ZnNldC54KCkgPiAwKQotICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAw
LCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0g
ICAgICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgIHNl
dE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCks
IGltYWdlUmVjdC53aWR0aCgpLCBjbGlwQm90dG9tKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCi0gICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVj
dC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAg
cmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwg
aW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdEltYWdlKCkt
PnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIElu
dFBvaW50KCkpOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmR1bXAoKQotewotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1v
ZGVUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRURHRU1PREVf
VU5LTk9XTjoKLSAgICAgICAgdHMgPDwgIlVOS05PV04iOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgdHMgPDwgIkRVUExJQ0FURSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgdHMgPDwgIldSQVAi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVER0VNT0RFX05PTkU6Ci0gICAgICAgIHRzIDw8
ICJOT05FIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotVGV4
dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
KTsKLSAgICB0cyA8PCAiW2ZlQ29udm9sdmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJu
ZWxTaXplIDw8ICJcIiAiCi0gICAgICAgPDwgImtlcm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxN
YXRyaXggIDw8ICJcIiAiCi0gICAgICAgPDwgImRpdmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAi
XCIgIgotICAgICAgIDw8ICJiaWFzPVwiIiA8PCBtX2JpYXMgPDwgIlwiICIKLSAgICAgICA8PCAi
dGFyZ2V0PVwiIiA8PCBtX3RhcmdldE9mZnNldCA8PCAiXCIgIgotICAgICAgIDw8ICJlZGdlTW9k
ZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgotICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3Ro
PVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIKLSAgICAgICA8PCAicHJlc2VydmVB
bHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3Qo
MCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0
czsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcp
ICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZF
Q29udm9sdmVNYXRyaXhfaAotI2RlZmluZSBTVkdGRUNvbnZvbHZlTWF0cml4X2gKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRWRnZU1vZGVUeXBlIHsK
LSAgICBFREdFTU9ERV9VTktOT1dOICAgPSAwLAotICAgIEVER0VNT0RFX0RVUExJQ0FURSA9IDEs
Ci0gICAgRURHRU1PREVfV1JBUCAgICAgID0gMiwKLSAgICBFREdFTU9ERV9OT05FICAgICAgPSAz
Ci19OwotCi1jbGFzcyBDYW52YXNQaXhlbEFycmF5OwotCi1jbGFzcyBGRUNvbnZvbHZlTWF0cml4
IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxv
YXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2lu
dCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBJbnRT
aXplIGtlcm5lbFNpemUoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5lbFNpemUoSW50U2l6ZSk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWwoKSBjb25zdDsKLSAgICB2b2lkIHNl
dEtlcm5lbChjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBmbG9hdCBkaXZpc29yKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXREaXZpc29yKGZsb2F0KTsKLQotICAgIGZsb2F0IGJpYXMoKSBjb25z
dDsKLSAgICB2b2lkIHNldEJpYXMoZmxvYXQpOwotCi0gICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQpOwotCi0gICAgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9k
ZVR5cGUpOwotCi0gICAgRmxvYXRQb2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQpOwotCi0gICAgYm9vbCBwcmVzZXJ2
ZUFscGhhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwotCi0gICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0K
LSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFQ29udm9sdmVNYXRy
aXgoY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBv
aW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9y
PGZsb2F0PiYpOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIENhbnZhc1Bp
eGVsQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIGRzdFBp
eGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAg
ICAgZmxvYXQgYmlhczsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20pOwotCi0gICAgQUxXQVlT
X0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOwot
Ci0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNl
dE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5
Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1bmN0aW9ucwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdo
dCwgaW50IGNsaXBCb3R0b20pOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKTsKLQotICAgIEludFNpemUgbV9rZXJuZWxTaXplOwotICAgIGZsb2F0IG1fZGl2aXNvcjsK
LSAgICBmbG9hdCBtX2JpYXM7Ci0gICAgSW50UG9pbnQgbV90YXJnZXRPZmZzZXQ7Ci0gICAgRWRn
ZU1vZGVUeXBlIG1fZWRnZU1vZGU7Ci0gICAgRmxvYXRQb2ludCBtX2tlcm5lbFVuaXRMZW5ndGg7
Ci0gICAgYm9vbCBtX3ByZXNlcnZlQWxwaGE7Ci0gICAgVmVjdG9yPGZsb2F0PiBtX2tlcm5lbE1h
dHJpeDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVDb252b2x2ZU1hdHJpeF9o
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRGlmZnVzZUxp
Z2h0aW5nLmgiCi0KLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAotICAgIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmco
RGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25z
dGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNv
dXJjZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGln
aHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKLSAgICBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
Ci0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxp
Z2h0U291cmNlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaWZmdXNlTGlnaHRpbmco
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKLX0KLQotRkVEaWZmdXNl
TGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygpCi17Ci19Ci0KLUNvbG9yIEZFRGlmZnVzZUxp
Z2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodGluZ0Nv
bG9yOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yKQotewotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5n
Q29sb3I7Ci19Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUoKSBjb25z
dCAKLXsKLSAgICByZXR1cm4gbV9zdXJmYWNlU2NhbGU7Ci19Ci0KLXZvaWQgRkVEaWZmdXNlTGln
aHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCi17Ci0gICAgbV9zdXJm
YWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci19Ci0KLWZsb2F0IEZFRGlmZnVzZUxpZ2h0aW5nOjpk
aWZmdXNlQ29uc3RhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsK
LX0KLQotdm9pZCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCkKLXsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFu
dDsKLX0KLQotZmxvYXQgRkVEaWZmdXNlTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKLX0KLQotdm9pZCBGRURpZmZ1
c2VMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgp
Ci17Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhYOwotfQotCi1m
bG9hdCBGRURpZmZ1c2VMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAg
IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5n
OjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBt
X2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLWNvbnN0IExpZ2h0
U291cmNlKiBGRURpZmZ1c2VMaWdodGluZzo6bGlnaHRTb3VyY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2xpZ2h0U291cmNlLmdldCgpOwotfQotCi12b2lkIEZFRGlmZnVzZUxpZ2h0aW5nOjpz
ZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLXsgICAg
Ci0gICAgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOwotfQotCi12b2lkIEZFRGlmZnVzZUxp
Z2h0aW5nOjpkdW1wKCkKLXsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17
Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZURpZmZ1c2VMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAg
ICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKLSAg
ICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIg
IgotICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhY
IDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotICAgIGlucHV0RWZm
ZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaAkocmV2aXNpb24gNjgwMTYpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdfaAotI2RlZmluZSBTVkdGRURpZmZ1c2VMaWdodGluZ19oCi0KLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUxpZ2h0aW5n
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KLWNsYXNz
IEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsCi0gICAgICAgIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJj
ZT4pOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBDb2xvciBsaWdo
dGluZ0NvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9y
Jik7Ci0KLSAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN1cmZh
Y2VTY2FsZShmbG9hdCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCgpIGNvbnN0OwotICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwot
Ci0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFkoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5l
bFVuaXRMZW5ndGhZKGZsb2F0KTsKLQotICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJj
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJj
ZT4pOwotCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdGRURpZmZ1c2VMaWdodGluZ19oCkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFw
LmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwLmgiCi0KLSNp
bmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5u
ZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBt
X3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxl
Y3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3Is
IHNjYWxlKSk7Ci19Ci0KLUNoYW5uZWxTZWxlY3RvclR5cGUgRkVEaXNwbGFjZW1lbnRNYXA6OnhD
aGFubmVsU2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7
Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIG1feENoYW5uZWxT
ZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci19Ci0KLUNoYW5uZWxTZWxlY3RvclR5cGUgRkVE
aXNwbGFjZW1lbnRNYXA6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBt
X3lDaGFubmVsU2VsZWN0b3I7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFu
bmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQot
ewotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci19Ci0KLWZsb2F0
IEZFRGlzcGxhY2VtZW50TWFwOjpzY2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NhbGU7
Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQotewot
ICAgIG1fc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0gICAgaW4tPmFwcGx5
KGZpbHRlcik7Ci0gICAgaW4yLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghaW4tPnJlc3VsdElt
YWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1feENoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVj
dG9yID09IENIQU5ORUxfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlZmZl
Y3RDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1Bp
eGVsQXJyYXlBKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4
ZWxBcnJheUIoaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZm
ZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKLQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5o
ZWlnaHQoKSk7Ci0KLSAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7Ci0KLSAgICBmbG9hdCBzY2FsZVggPSBtX3NjYWxlIC8gMjU1
LmYgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOwotICAgIGZsb2F0IHNjYWxl
WSA9IG1fc2NhbGUgLyAyNTUuZiAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgp
OwotICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFggPSAoMC41ZiAtIDAuNWYgKiBtX3NjYWxlKSAq
IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7Ci0gICAgZmxvYXQgc2NhbGVBZGp1
c3RtZW50WSA9ICgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCk7Ci0gICAgaW50IHN0cmlkZSA9IGltYWdlUmVjdC53aWR0aCgpICogNDsK
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBp
bWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXggPSBsaW5l
ICsgeCAqIDQ7Ci0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNj
YWxlWCAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3hDaGFubmVsU2VsZWN0b3Ig
LSAxKSArIHNjYWxlQWRqdXN0bWVudFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZVkgKiBzcmNQaXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV95
Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1lbnRZKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBpbWFnZVJlY3Qud2lkdGgoKSB8fCBz
cmNZIDwgMCB8fCBzcmNZID49IGltYWdlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFZhbHVlID0gc3JjUGl4ZWxBcnJheUEtPmdldChz
cmNZICogc3RyaWRlICsgc3JjWCAqIDQgKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VEYXRhLT5kYXRhKCktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHBpeGVsVmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotICAg
IHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgp
LCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpk
dW1wKCkKLXsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBDSEFOTkVMX1VOS05PV046Ci0gICAgICAgIHRzIDw8ICJVTktOT1dOIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDSEFOTkVMX1I6Ci0gICAgICAgIHRzIDw8ICJSRUQi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENIQU5ORUxfRzoKLSAgICAgICAgdHMgPDwgIkdS
RUVOIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDSEFOTkVMX0I6Ci0gICAgICAgIHRzIDw8
ICJCTFVFIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDSEFOTkVMX0E6Ci0gICAgICAgIHRz
IDw8ICJBTFBIQSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0K
LVRleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQpOwotICAgIHRzIDw8ICJbZmVEaXNwbGFjZW1lbnRNYXAiOwotICAgIEZpbHRlckVmZmVj
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBzY2FsZT1cIiIgPDwg
bV9zY2FsZSA8PCAiXCIgIgotICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3hD
aGFubmVsU2VsZWN0b3IgPDwgIlwiICIKLSAgICAgICA8PCAieUNoYW5uZWxTZWxlY3Rvcj1cIiIg
PDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIGlucHV0RWZmZWN0KDEp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpc3BsYWNlbWVudE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVEaXNw
bGFjZW1lbnRNYXBfaAotI2RlZmluZSBTVkdGRURpc3BsYWNlbWVudE1hcF9oCi0KLSNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7Ci0gICAgQ0hBTk5FTF9V
TktOT1dOID0gMCwKLSAgICBDSEFOTkVMX1IgPSAxLAotICAgIENIQU5ORUxfRyA9IDIsCi0gICAg
Q0hBTk5FTF9CID0gMywKLSAgICBDSEFOTkVMX0EgPSA0Ci19OwotCi1jbGFzcyBGRURpc3BsYWNl
bWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
KTsKLQotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsK
LQotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwotICAg
IHZvaWQgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQot
ICAgIGZsb2F0IHNjYWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVEaXNw
bGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKLQotICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV95
Q2hhbm5lbFNlbGVjdG9yOwotICAgIGZsb2F0IG1fc2NhbGU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQot
I2VuZGlmIC8vIFNWR0ZFRGlzcGxhY2VtZW50TWFwX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRUZsb29kLmgiCi0K
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1GRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENv
bG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9m
bG9vZENvbG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9y
JiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBGRUZsb29kKGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwotfQotCi1Db2xvciBGRUZs
b29kOjpmbG9vZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mbG9vZENvbG9yOwotfQot
Ci12b2lkIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IG1fZmxvb2RDb2xvciA9IGNvbG9yOwotfQotCi1mbG9hdCBGRUZsb29kOjpmbG9vZE9wYWNpdHko
KSBjb25zdAotewotICAgIHJldHVybiBtX2Zsb29kT3BhY2l0eTsKLX0KLQotdm9pZCBGRUZsb29k
OjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQotewotICAgIG1fZmxvb2RPcGFj
aXR5ID0gZmxvb2RPcGFjaXR5OwotfQotCi12b2lkIEZFRmxvb2Q6OmFwcGx5KEZpbHRlciopCi17
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwot
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29s
b3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFj
aXR5KCkpOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgpKSwgY29sb3IsIERldmlj
ZUNvbG9yU3BhY2UpOwotfQotCi12b2lkIEZFRmxvb2Q6OmR1bXAoKQotewotfQotCi1UZXh0U3Ry
ZWFtJiBGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8
ICJbZmVGbG9vZCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
KTsKLSAgICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8PCBmbG9vZENvbG9yKCkubmFtZSgpIDw8
ICJcIiAiCi0gICAgICAgPDwgImZsb29kLW9wYWNpdHk9XCIiIDw8IGZsb29kT3BhY2l0eSgpIDw8
ICJcIl1cbiI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNWR0ZFRmxvb2RfaAot
I2RlZmluZSBTVkdGRUZsb29kX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVGbG9vZCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRmxv
b2Q+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0KTsKLQotICAgIENvbG9yIGZsb29kQ29sb3Io
KSBjb25zdDsKLSAgICB2b2lkIHNldEZsb29kQ29sb3IoY29uc3QgQ29sb3IgJik7Ci0KLSAgICBm
bG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdDsKLSAgICB2b2lkIHNldEZsb29kT3BhY2l0eShmbG9h
dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgdmlydHVhbCB2b2lk
IGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRkVG
bG9vZChjb25zdCBDb2xvciYsIGZsb2F0KTsKLQotICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKLSAg
ICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZH
RkVGbG9vZF9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVM
aWdodGluZy5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJp
Z2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTGln
aHRpbmcuaCIKLQotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwg
Y29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKLSAgICBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsCi0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6IEZpbHRl
ckVmZmVjdCgpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xp
Z2h0U291cmNlKGxpZ2h0U291cmNlKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29s
b3IpCi0gICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCi0gICAgLCBtX2RpZmZ1c2VD
b25zdGFudChkaWZmdXNlQ29uc3RhbnQpCi0gICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3Vs
YXJDb25zdGFudCkKLSAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQot
ICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKLSAgICAsIG1fa2Vy
bmVsVW5pdExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCi17Ci19Ci0KLWNvbnN0IHN0YXRpYyBp
bnQgY1BpeGVsU2l6ZSA9IDQ7Ci1jb25zdCBzdGF0aWMgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQg
PSAzOwotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMHhmZik7Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6dXBMZWZ0UGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5F
IGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwUGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
aW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBSaWdodFBpeGVsVmFsdWUoKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0UGl4ZWxW
YWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpjZW50ZXJQaXhlbFZhbHVlKCkKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6cmlnaHRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25MZWZ0
UGl4ZWxWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQo
b2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OmRvd25QaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpkb3duUmlnaHRQaXhlbFZhbHVlKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKLSAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZ
LCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkp
Ci17Ci0gICAgbV9saWdodFNvdXJjZS0+dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSwg
bGlnaHRYLCBsaWdodFksIHN0YXRpY19jYXN0PGZsb2F0PihkYXRhLnBpeGVscy0+Z2V0KGRhdGEu
b2Zmc2V0ICsgMykpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotCi0gICAgZGF0YS5ub3JtYWxWZWN0
b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFgpICogZGF0YS5zdXJm
YWNlU2NhbGUpOwotICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0YXRpY19j
YXN0PGZsb2F0Pihub3JtYWxZKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICBkYXRhLm5vcm1h
bFZlY3Rvci5zZXRaKDEuMGYpOwotICAgIGRhdGEubm9ybWFsVmVjdG9yLm5vcm1hbGl6ZSgpOwot
Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykK
LSAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAoZGF0YS5u
b3JtYWxWZWN0b3IgKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpOwotICAgIGVsc2UgewotICAg
ICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
cjsKLSAgICAgICAgaGFsZndheVZlY3Rvci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsgMS4wZik7
Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iubm9ybWFsaXplKCk7Ci0gICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMS4wZikKLSAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1f
c3BlY3VsYXJDb25zdGFudCAqIChkYXRhLm5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFy
Q29uc3RhbnQgKiBwb3dmKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvciwgbV9zcGVj
dWxhckV4cG9uZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoID4gMS4w
ZikKLSAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gMS4wZjsKLSAgICBpZiAoZGF0YS5saWdo
dFN0cmVuZ3RoIDwgMC4wZikKLSAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gMC4wZjsKLQot
ICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KCkpKTsK
LSAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0ICsgMSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnko
KSkpOwotICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAyLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3IueigpKSk7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKENhbnZhc1BpeGVs
QXJyYXkqIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0g
ICAgaWYgKCFtX2xpZ2h0U291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
SVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhl
bC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhl
IGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gcGl4ZWxzOwotICAg
IGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxv
YXRQb2ludDNEKG1fbGlnaHRpbmdDb2xvci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCks
IG1fbGlnaHRpbmdDb2xvci5ibHVlKCkpOwotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGlu
Z0RhdGEocGFpbnRpbmdEYXRhKTsKLQotICAgIC8vIFRvcC9MZWZ0IGNvcm5lcgotICAgIGRhdGEu
b2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsCi0gICAg
ICAgIC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmln
aHRQaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLTIgKiBkYXRhLmNlbnRlclBp
eGVsVmFsdWUoKSAtIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwotCi0gICAgLy8gVG9wL1JpZ2h0
IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
IC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVm
dFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxl
ZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8g
My4wZiwgLWRhdGEubGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUo
KSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgp
KTsKLQotICAgIC8vIEJvdHRvbS9MZWZ0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUsCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVw
UmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0
YS5yaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQ
aXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQ
aXhlbFZhbHVlKCkgKyBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLQotICAgIC8vIEJvdHRvbS9S
aWdodCBwaXhlbAotICAgIGRhdGEub2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdE
YXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUs
Ci0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51
cFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50
ZXJQaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxW
YWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkg
KyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsK
LSAgICAgICAgLy8gVG9wIGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBjUGl4ZWxTaXplOwot
ICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4
LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRh
LCBwYWludGluZ0RhdGEsIHgsIDAsCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtMiAq
IGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0
YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAg
ICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEubGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRv
d25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93
blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBCb3R0b20gbGluZQot
ICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0g
Y1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4w
ZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAot
ICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRh
LmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyBkYXRhLnJp
Z2h0UGl4ZWxWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0g
MykgewotICAgICAgICAvLyBMZWZ0IGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRp
bmdEYXRhLCAwLCB5LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBQaXhl
bFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhl
bFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBm
IC8gMy4wZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1
ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBSaWdodCBsaW5lCi0gICAgICAgIGRhdGEub2Zm
c2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFp
bnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksCi0gICAgICAgICAgICAgICAg
LTEuMGYgLyAyLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1
ZSgpIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1
ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAt
IDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmRvd25QaXhlbFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdp
ZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzCi0g
ICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5
KSB7Ci0gICAgICAgICAgICBkYXRhLm9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUp
IHsKLSAgICAgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksCi0g
ICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgp
ICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSAr
IDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAtMS4wZiAv
IDQuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgp
IC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSAr
IDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgdG90YWxTaXplID0g
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdo
dGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAzOyBp
IDwgdG90YWxTaXplOyBpICs9IDQpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNP
cGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
b3RhbFNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhMSA9IGRhdGEu
cGl4ZWxzLT5nZXQoaSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEyID0gZGF0YS5waXhl
bHMtPmdldChpICsgMSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEzID0gZGF0YS5waXhl
bHMtPmdldChpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChh
MSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIg
PyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFTGlnaHRpbmc6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKLQotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RE
cmF3aW5nUmVjdCkpOwotICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1h
Z2VEYXRhLT5kYXRhKCkpOwotCi0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0
aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAgICAv
LyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMg
KGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2Vy
bmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgotICAg
IC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVu
dGF0aW9uCi0KLSAgICBpZiAoZHJhd0xpZ2h0aW5nKHNyY1BpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCksIGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKSkKLSAgICAgICAgcmVz
dWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwg
SW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTVkdGRUxpZ2h0aW5n
X2gKLSNkZWZpbmUgU1ZHRkVMaWdodGluZ19oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0jaW5jbHVk
ZSA8d3RmL0Fsd2F5c0lubGluZS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZm
dXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIENhbnZhc1BpeGVsQXJyYXk7Ci0KLWNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7
Ci0KLXByb3RlY3RlZDoKLSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VM
aWdodGluZywKLSAgICAgICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0KLSAgICBzdHJ1Y3Qg
TGlnaHRpbmdEYXRhIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKLSAgICAg
ICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBsaWdodFN0cmVuZ3Ro
OwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCBvZmZzZXQ7Ci0gICAg
ICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoRGVj
cmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAgICAg
ICBBTFdBWVNfSU5MSU5FIGludCB1cExlZnRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19J
TkxJTkUgaW50IHVwUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cFJp
Z2h0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBsZWZ0UGl4ZWxWYWx1
ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBjZW50ZXJQaXhlbFZhbHVlKCk7Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgaW50IHJpZ2h0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNf
SU5MSU5FIGludCBkb3duTGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQgZG93blBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93blJpZ2h0
UGl4ZWxWYWx1ZSgpOwotICAgIH07Ci0KLSAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNz
UmVmUHRyPExpZ2h0U291cmNlPik7Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhDYW52YXNQaXhl
bEFycmF5KiwgaW50LCBpbnQpOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQaXhlbChMaWdo
dGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwKLSAgICAgICAgaW50IGxpZ2h0
WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5vcm1hbFgsIGZsb2F0IGZhY3Rvclks
IGludCBub3JtYWxZKTsKLQotICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBS
ZWZQdHI8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7Ci0KLSAgICBDb2xvciBtX2xpZ2h0aW5n
Q29sb3I7Ci0gICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7Ci0gICAgZmxvYXQgbV9kaWZmdXNlQ29u
c3RhbnQ7Ci0gICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwotICAgIGZsb2F0IG1fc3BlY3Vs
YXJFeHBvbmVudDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwotICAgIGZsb2F0IG1f
a2VybmVsVW5pdExlbmd0aFk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFTGln
aHRpbmdfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2Uu
Y3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNZXJnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTWVyZ2UuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZF
TWVyZ2U6OkZFTWVyZ2UoKSAKLSAgICA6IEZpbHRlckVmZmVjdCgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZFTWVyZ2UpOwotfQotCi12b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewot
ICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChz
aXplID4gMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGluLT5hcHBs
eShmaWx0ZXIpOwotICAgICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVm
ZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVNZXJnZTo6ZHVtcCgpCi17Ci19Ci0KLVRleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRl
bnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltm
ZU1lcmdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwot
ICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChz
aXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRF
ZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJl
dHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTWVyZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTWVyZ2UuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRU1lcmdlX2gKLSNkZWZpbmUgU1ZHRkVNZXJn
ZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgp
OwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZFTWVy
Z2UoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVNZXJnZV9oCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwCShy
ZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3Jw
aG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxU
RVJTKQotI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neS5oIgotCi0jaW5jbHVkZSAiQ2FudmFzUGl4
ZWxBcnJheS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgot
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBzdGQ6Om1pbjsKLXVzaW5nIHN0ZDo6
bWF4OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5
KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSkKLSAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcmFk
aXVzWChyYWRpdXNYKQotICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGRU1vcnBob2xvZ3kodHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwotfQotCi1N
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIEZFTW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV90eXBlOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6c2V0
TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBt
X3R5cGUgPSB0eXBlOwotfQotCi1mbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1goKSBjb25zdAot
ewotICAgIHJldHVybiBtX3JhZGl1c1g7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRp
dXNYKGZsb2F0IHJhZGl1c1gpCi17Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVzWDsKLX0KLQotZmxv
YXQgRkVNb3JwaG9sb2d5OjpyYWRpdXNZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yYWRpdXNZ
OwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQotewot
ICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjphcHBseShG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgaW50
IHJhZGl1c1ggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFkaXVzWCAqIGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RhdGljX2Nhc3Q8aW50Piht
X3JhZGl1c1kgKiBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgaWYg
KHJhZGl1c1ggPD0gMCB8fCByYWRpdXNZIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIElu
dFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIFJlZlB0cjxDYW52
YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5KGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgo
KSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLQotICAgIGludCBlZmZlY3RXaWR0aCA9IGVmZmVjdERy
YXdpbmdSZWN0LndpZHRoKCkgKiA0OwotICAgIAotICAgIC8vIExpbWl0IHRoZSByYWRpdXMgc2l6
ZSB0byBlZmZlY3QgZGltZW5zaW9ucwotICAgIHJhZGl1c1ggPSBtaW4oZWZmZWN0RHJhd2luZ1Jl
Y3Qud2lkdGgoKSAtIDEsIHJhZGl1c1gpOwotICAgIHJhZGl1c1kgPSBtaW4oZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXNZKTsKLSAgICAKLSAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gZXh0cmVtYTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgaW50IHN0YXJ0WSA9IG1heCgwLCB5IC0gcmFkaXVz
WSk7Ci0gICAgICAgIGludCBlbmRZID0gbWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0g
MSwgeSArIHJhZGl1c1kpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFu
bmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwKLSAg
ICAgICAgICAgIGV4dHJlbWEuY2xlYXIoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDw9IHJhZGl1c1g7ICsraikgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sdW1u
RXh0cmVtYSA9IHNyY1BpeGVsQXJyYXktPmdldChzdGFydFkgKiBlZmZlY3RXaWR0aCArIDQgKiBq
ICsgY2hhbm5lbCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0WTsgaSA8PSBl
bmRZOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbCA9IHNy
Y1BpeGVsQXJyYXktPmdldChpICogZWZmZWN0V2lkdGggKyA0ICogaiArIGNoYW5uZWwpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REUgJiYgcGl4ZWwgPD0gY29sdW1uRXh0cmVtYSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
IChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAmJiBwaXhlbCA+PSBjb2x1
bW5FeHRyZW1hKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkV4dHJlbWEgPSBwaXhl
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29s
dW1uRXh0cmVtYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IEtlcm5lbCBpcyBmaWxsZWQsIGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uIAotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpOyArK3gpIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmRYID0gbWluKHggKyByYWRpdXNYLCBlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBj
b2x1bW5FeHRyZW1hID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHN0YXJ0WSAqIGVmZmVjdFdpZHRoICsg
ZW5kWCAqIDQgKyBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnRZ
OyBpIDw9IGVuZFk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBp
eGVsID0gc3JjUGl4ZWxBcnJheS0+Z2V0KGkgKiBlZmZlY3RXaWR0aCArIGVuZFggKiA0ICsgY2hh
bm5lbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobV90eXBlID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSAmJiBwaXhlbCA8PSBjb2x1bW5FeHRyZW1hKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICYmIHBp
eGVsID49IGNvbHVtbkV4dHJlbWEpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRXh0
cmVtYSA9IHBpeGVsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCAt
IHJhZGl1c1ggPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHggKyByYWRpdXNYIDw9IGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbWEpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW50aXJlRXh0cmVtYSA9IGV4dHJlbWFbMF07
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrZXJuZWxJbmRleCA9IDA7IGtlcm5lbElu
ZGV4IDwgZXh0cmVtYS5zaXplKCk7ICsra2VybmVsSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKChtX3R5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFICYmIGV4dHJlbWFb
a2VybmVsSW5kZXhdIDw9IGVudGlyZUV4dHJlbWEpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUgJiYgZXh0cmVtYVtrZXJu
ZWxJbmRleF0gPj0gZW50aXJlRXh0cmVtYSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRp
cmVFeHRyZW1hID0gZXh0cmVtYVtrZXJuZWxJbmRleF07Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQoeSAqIGVmZmVjdFdpZHRoICsgNCAq
IHggKyBjaGFubmVsLCBlbnRpcmVFeHRyZW1hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBGRU1vcnBob2xv
Z3k6OmR1bXAoKQotewotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgotICAg
ICAgICB0cyA8PCAiVU5LTk9XTiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFOgotICAgICAgICB0cyA8PCAiRVJPREUiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU6Ci0gICAgICAgIHRzIDw8
ICJESUxBVEUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1U
ZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
Ci0gICAgdHMgPDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9n
eU9wZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkg
PDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsgICAgCi0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIHJldHVybiB0czsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYg
RU5BQkxFKEZJTFRFUlMpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TW9ycGhvbG9neS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdGRU1vcnBob2xvZ3lfaAotI2RlZmlu
ZSBTVkdGRU1vcnBob2xvZ3lfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKLSAgICBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCi0gICAgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFID0gMSwKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgotfTsKLQot
Y2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7ICAKLSAgICBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0TW9ycGhv
bG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwotCi0gICAgZmxvYXQgcmFkaXVz
WCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmFkaXVzWChmbG9hdCk7Ci0KLSAgICBmbG9hdCByYWRp
dXNZKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSYWRpdXNZKGZsb2F0KTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7Ci0gICAgCi0gICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7Ci0gICAgZmxvYXQgbV9yYWRpdXNYOwotICAg
IGZsb2F0IG1fcmFkaXVzWTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gU1ZHRkVNb3Jw
aG9sb2d5X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZz
ZXQuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVPZmZzZXQuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUZFT2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoKQotICAgICwgbV9keChkeCkKLSAgICAsIG1fZHkoZHkpCi17Ci19Ci0KLVBhc3NSZWZQdHI8
RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRkVPZmZzZXQoZHgsIGR5KSk7Ci19Ci0KLWZsb2F0IEZFT2Zmc2V0
OjpkeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHg7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OnNl
dER4KGZsb2F0IGR4KQotewotICAgIG1fZHggPSBkeDsKLX0KLQotZmxvYXQgRkVPZmZzZXQ6OmR5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9keTsKLX0KLQotdm9pZCBGRU9mZnNldDo6c2V0RHko
ZmxvYXQgZHkpCi17Ci0gICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zmc2V0OjphcHBseShG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZm
ZWN0Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJl
Y3Qgc291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBzb3Vy
Y2VJbWFnZVJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGZpbHRlci0+ZWZm
ZWN0Qm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgbV9keCAqPSBzb3VyY2VJbWFnZVJlY3Qu
d2lkdGgoKTsKLSAgICAgICAgbV9keSAqPSBzb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCk7Ci0gICAg
fQotICAgIG1fZHggKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKLSAgICBt
X2R5ICo9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpOwotCi0gICAgRmxvYXRS
ZWN0IGRzdFJlY3QgPSBGbG9hdFJlY3QobV9keCArIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHkgKyBpbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnko
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLmhlaWdodCgpKTsKLQotICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgZHN0UmVjdCk7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OmR1bXAoKQotewotfQot
Ci1UZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsK
LSAgICB0cyA8PCAiW2ZlT2Zmc2V0IjsgCi0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIg
PDwgZHkoKSA8PCAiXCJdXG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaAkocmV2aXNp
b24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgU1ZHRkVPZmZzZXRfaAotI2RlZmluZSBTVkdGRU9mZnNldF9oCi0KLSNpZiBFTkFCTEUoU1ZH
KSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGRU9mZnNldCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFT2Zm
c2V0PiBjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KTsKLQotICAgIGZsb2F0IGR4KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7Ci0KLSAgICBmbG9hdCBkeSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0RHkoZmxvYXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwotICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7Ci0KLSAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7Ci0KLSAgICBmbG9hdCBtX2R4
OwotICAgIGZsb2F0IG1fZHk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFT2Zm
c2V0X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFU3BlY3VsYXJMaWdodGluZy5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nLmgiCi0KLSNpbmNsdWRlICJTVkdMaWdodFNvdXJjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5n
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCi0gICAgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsCi0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGln
aHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5n
LCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1
bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRT
b3VyY2UpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFy
TGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKLSAgICBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsCi0gICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUs
IHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsCi0gICAgICAgIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKLX0KLQotRkVTcGVjdWxh
ckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkKLXsKLX0KLQotQ29sb3IgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saWdodGlu
Z0NvbG9yOwotfQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdo
dGluZ0NvbG9yOwotfQotCi1mbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6OnN1cmZhY2VTY2FsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOwotfQotCi12b2lkIEZFU3BlY3Vs
YXJMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKLXsKLSAgICBt
X3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsKLX0KLQotZmxvYXQgRkVTcGVjdWxhckxpZ2h0
aW5nOjpzcGVjdWxhckNvbnN0YW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zcGVjdWxhckNv
bnN0YW50OwotfQotCi12b2lkIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFu
dChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNw
ZWN1bGFyQ29uc3RhbnQ7Ci19Ci0KLWZsb2F0IEZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJF
eHBvbmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsKLX0KLQot
dm9pZCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCkKLXsKLSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50
OwotfQotCi1mbG9hdCBGRVNwZWN1bGFyTGlnaHRpbmc6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKLX0KLQotdm9pZCBGRVNwZWN1
bGFyTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
KQotewotICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLX0KLQot
ZmxvYXQgRkVTcGVjdWxhckxpZ2h0aW5nOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLXZvaWQgRkVTcGVjdWxhckxpZ2h0
aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAg
ICBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2VybmVsVW5pdExlbmd0aFk7Ci19Ci0KLWNvbnN0IExp
Z2h0U291cmNlKiBGRVNwZWN1bGFyTGlnaHRpbmc6OmxpZ2h0U291cmNlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsKLX0KLQotdm9pZCBGRVNwZWN1bGFyTGlnaHRp
bmc6OnNldExpZ2h0U291cmNlKFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQot
ewotICAgIG1fbGlnaHRTb3VyY2UgPSBsaWdodFNvdXJjZTsKLX0KLQotdm9pZCBGRVNwZWN1bGFy
TGlnaHRpbmc6OmR1bXAoKQotewotfQotCi1UZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0
Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIltmZVNwZWN1bGFy
TGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7
Ci0gICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAi
Ci0gICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8
ICJcIiAiCi0gICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBv
bmVudCA8PCAiXCJdXG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJM
aWdodGluZy5oCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKLSNk
ZWZpbmUgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0ZFTGlnaHRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUo
Y29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRp
bmcoKTsKLQotICAgIENvbG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldExp
Z2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQp
OwotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3Bl
Y3VsYXJFeHBvbmVudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwotCi0gICAgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdDsKLSAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZ
KGZsb2F0KTsKLQotICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwotCi0gICAg
dmlydHVhbCB2b2lkIGR1bXAoKTsKLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFU3BlY3VsYXJMaWdodGluZ19oCkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCShyZXZpc2lvbiA2ODAxNikKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVRpbGUuaCIK
LQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1GRVRpbGU6OkZFVGlsZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQot
ewotfQotCi1QYXNzUmVmUHRyPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVUaWxlKTsKLX0KLQotRmxvYXRSZWN0IEZFVGlsZTo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciogZmlsdGVyKQotewotICAgIGlucHV0RWZm
ZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKLQotICAg
IGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIGZpbHRlci0+
ZmlsdGVyUmVnaW9uKCkpOwotICAgIHJldHVybiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LX0KLQotdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBp
ZiAoIWluLT5yZXN1bHRJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJD
b250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxw
aGFJbWFnZSgpKTsKLQotICAgIEludFJlY3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGlu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLQotICAgIC8vIFNvdXJjZSBpbnB1
dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdp
b24gYnV0IGdpdmVzIHRoZQotICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBi
YWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4K
LSAgICBpZiAoaW4tPmlzU291cmNlSW5wdXQoKSkgewotICAgICAgICBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKLSAgICAgICAgZmlsdGVyUmVnaW9uLnNj
YWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGZpbHRlclJlZ2lvbik7Ci0gICAgfQotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGls
ZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBJbnRQb2ludCgpKTsKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBh
dHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShpbi0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsK
LSAgICBwYXR0ZXJuLmdldCgpLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0obWF0cml4KTsKLQot
ICAgIGZpbHRlckNvbnRleHQtPnNldEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNv
bnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkuc2l6ZSgpKSk7Ci19Ci0KLXZvaWQgRkVUaWxlOjpkdW1wKCkKLXsKLX0K
LQotVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwot
ICAgIHRzIDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMpOwotICAgIHRzIDw8ICJdXG4iOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLQotICAgIHJldHVybiB0czsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxF
KEZJTFRFUlMpCi0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUu
aAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFNWR0ZFVGlsZV9oCi0jZGVmaW5lIFNWR0ZFVGlsZV9oCi0KLSNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgRkVUaWxl
IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVUaWxlPiBjcmVhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0
ZXIqKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgRkVUaWxlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQot
I2VuZGlmIC8vIFNWR0ZFVGlsZV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwzODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdGRVR1
cmJ1bGVuY2UuaCIKLQotI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRz
IGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAq
IHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJh
bmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQ
YXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAg
ICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYx
ODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5h
bCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsK
LXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAt
IDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHBy
aW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8g
bSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KLUZFVHVy
YnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVx
dWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQs
IGJvb2wgc3RpdGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV90eXBlKHR5
cGUpCi0gICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICwgbV9iYXNl
RnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3RhdmVz
KQotICAgICwgbV9zZWVkKHNlZWQpCi0gICAgLCBtX3N0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQot
ewotfQotCi1QYXNzUmVmUHRyPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVy
YnVsYW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwg
YmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLVR1
cmJ1bGFuY2VUeXBlIEZFVHVyYnVsZW5jZTo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dHlwZTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsYW5jZVR5cGUgdHlw
ZSkKLXsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQotCi1mbG9hdCBGRVR1cmJ1bGVuY2U6OmJhc2VG
cmVxdWVuY3lZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WTsKLX0KLQot
dm9pZCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZ
KQotewotICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKLX0KLQotZmxvYXQg
RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFz
ZUZyZXF1ZW5jeVg7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WChm
bG9hdCBiYXNlRnJlcXVlbmN5WCkKLXsKLSAgICAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZy
ZXF1ZW5jeVg7Ci19Ci0KLWZsb2F0IEZFVHVyYnVsZW5jZTo6c2VlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc2VlZDsgCi19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNl
ZWQpCi17Ci0gICAgbV9zZWVkID0gc2VlZDsKLX0KLQotaW50IEZFVHVyYnVsZW5jZTo6bnVtT2N0
YXZlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbnVtT2N0YXZlczsKLX0KLQotdm9pZCBGRVR1
cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMoYm9vbCBudW1PY3RhdmVzKQotewotICAgIG1fbnVtT2N0
YXZlcyA9IG51bU9jdGF2ZXM7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RpdGNoVGlsZXM7Ci19Ci0KLXZvaWQgRkVUdXJidWxl
bmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKLXsKLSAgICBtX3N0aXRjaFRpbGVzID0g
c3RpdGNoOwotfQotCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFk
YXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlv
bjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVu
Y2UKLQotRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YShsb25nIHBhaW50
aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKQotICAgIDogc2VlZChwYWludGlu
Z1NlZWQpCi0gICAgLCB3aWR0aCgwKQotICAgICwgaGVpZ2h0KDApCi0gICAgLCB3cmFwWCgwKQot
ICAgICwgd3JhcFkoMCkKLSAgICAsIGNoYW5uZWwoMCkKLSAgICAsIGZpbHRlclNpemUocGFpbnRp
bmdTaXplKQotewotfQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5l
IGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyBy
ZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChz
ZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0g
c19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICog
dCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihm
bG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7
Ci19Ci0KLWlubGluZSB2b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQotewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAv
LyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAx
XS4KLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwot
ICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBw
YWludGluZ0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRp
ZW50OwotICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAg
ICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBn
cmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAg
IGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkg
JSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAg
ICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFu
ZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsK
LSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzcXJ0ZihncmFkaWVudFswXSAqIGdy
YWRpZW50WzBdICsgZ3JhZGllbnRbMV0gKiBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFk
aWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0g
Lz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBp
ID0gc19ibG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEu
cmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAg
IEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAg
ICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8
IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
aV1bMF07Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9j
a1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgY2hlY2tOb2lzZShpbnQmIG5vaXNlVmFs
dWUsIGludCBsaW1pdFZhbHVlLCBpbnQgbmV3VmFsdWUpCi17Ci0gICAgaWYgKG5vaXNlVmFsdWUg
Pj0gbGltaXRWYWx1ZSkKLSAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZTsKLSAgICBpZiAo
bm9pc2VWYWx1ZSA+PSBsaW1pdFZhbHVlIC0gMSkKLSAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdW
YWx1ZSAtIDE7Ci19Ci0KLWZsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCi17Ci0gICAgc3Ry
dWN0IE5vaXNlIHsKLSAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0gICAg
ICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlOwotCi0gICAgICAgIE5vaXNlKGZs
b2F0IGNvbXBvbmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBj
b21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgbm9pc2VQb3NpdGlvbkludGVn
ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAgICAgbm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgPSBwb3NpdGlvbiAtIG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWU7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2Ugbm9pc2VYKG5vaXNlVmVjdG9yLngo
KSk7Ci0gICAgTm9pc2Ugbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0gICAgZmxvYXQqIHE7Ci0g
ICAgZmxvYXQgc3gsIHN5LCBhLCBiLCB1LCB2OwotCi0gICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1
c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0gICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgY2hlY2tOb2lzZShub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSwgcGFp
bnRpbmdEYXRhLndyYXBYLCBwYWludGluZ0RhdGEud2lkdGgpOwotICAgICAgICBjaGVja05vaXNl
KG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlLCBwYWludGluZ0RhdGEud3JhcFksIHBh
aW50aW5nRGF0YS5oZWlnaHQpOwotICAgIH0KLQotICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50
ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlICY9IHNfYmxvY2tNYXNrOwotICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAg
ICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbKG5v
aXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107Ci0KLSAg
ICBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7Ci0g
ICAgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOwot
Ci0gICAgLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi0gICAgaW50IHRl
bXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKLSAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRp
b25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSAqIHFbMV07Ci0gICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExh
dHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKLSAgICB2
ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07Ci0gICAgYSA9IGxpbmVhckludGVy
cG9sYXRpb24oc3gsIHUsIHYpOwotICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07
Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVt
cF07Ci0gICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyAo
bm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOwotICAgIHRlbXAg
PSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVku
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwotICAgIHYgPSAobm9pc2VYLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKLSAgICBiID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7Ci0gICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwotfQot
Ci11bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLndpZHRo
KCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0aCA+IDApOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBw
YWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZUhlaWdodCA+
IDApOwotICAgIC8vIEFkanVzdCB0aGUgYmFzZSBmcmVxdWVuY2llcyBpZiBuZWNlc3NhcnkgZm9y
IHN0aXRjaGluZy4KLSAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAvLyBXaGVuIHN0
aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3Rl
ZAotICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3Vz
LgotICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCkgewotICAgICAgICAgICAgZmxvYXQgbG93
RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdp
ZHRoOwotICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAq
IG1fYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgLy8gQmFzZUZyZXF1
ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0g
ICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVx
dWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgICAgIG1fYmFzZUZyZXF1ZW5j
eVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9i
YXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
YmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29y
Zih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICAg
ICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBtX2Jhc2VGcmVxdWVu
Y3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgICAgICBpZiAobV9iYXNlRnJlcXVlbmN5WSAvIGxv
d0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBtX2Jhc2VGcmVxdWVuY3lZKQotICAgICAgICAg
ICAgICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9iYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gU2V0IHVwIFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2YWx1ZXMu
Ci0gICAgICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBtX2Jhc2VG
cmVxdWVuY3lYKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSAr
IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IHJvdW5k
Zih0aWxlSGVpZ2h0ICogbV9iYXNlRnJlcXVlbmN5WSk7Ci0gICAgICAgIHBhaW50aW5nRGF0YS53
cmFwWSA9IHNfcGVybGluTm9pc2UgKyBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgIH0KLSAgICBm
bG9hdCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAwOwotICAgIEZsb2F0UG9pbnQgbm9pc2VW
ZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNlRnJl
cXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7
IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9
PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCi0gICAgICAgICAgICB0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJh
dGlvOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
Kz0gZmFic2Yobm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsKLSAg
ICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9p
c2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsK
LSAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0
Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRp
cGxpY2F0aW9uIGFuZAotICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlm
aWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBwYWludGluZ0RhdGEud2lk
dGggKj0gMjsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWCA9IDIgKiBwYWludGluZ0Rh
dGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmhlaWdo
dCAqPSAyOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLndyYXBZID0gMiAqIHBhaW50aW5nRGF0
YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUg
dmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8g
YW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAg
aWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCi0gICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYg
KyAwLjVmOwotICAgIC8vIENsYW1wIHJlc3VsdAotICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCA9IHN0ZDo6bWF4KHN0ZDo6bWluKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMS5mKSwgMC5m
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMjU1KTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlciog
ZmlsdGVyKQotewotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkp
OwotICAgIGlmICghaW1hZ2VSZWN0LnNpemUoKS53aWR0aCgpIHx8ICFpbWFnZVJlY3Quc2l6ZSgp
LmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0Lmhl
aWdodCgpKTsKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgaW1hZ2VSZWN0
LnNpemUoKSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKLSAgICBGbG9hdFBvaW50IHBv
aW50OwotICAgIHBvaW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7Ci0gICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSAwOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAg
cG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50
LngoKSArIDEpOwotICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBh
aW50aW5nRGF0YS5jaGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9m
UGl4ZWxDaGFubmVsKQotICAgICAgICAgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQoaW5k
ZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRp
bmdEYXRhLCBwb2ludCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1
dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9p
bnQoKSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKLXsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFR1cmJ1bGFuY2VUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRkVUVVJCVUxFTkNFX1RZ
UEVfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwgIlVOS05PV04iOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZFVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0U6Ci0gICAgICAgIHRzIDw8ICJUVVJC
VUxBTkNFIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFD
VEFMTk9JU0U6Ci0gICAgICAgIHRzIDw8ICJOT0lTRSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIHR5
cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgotICAgICAgIDw8ICJiYXNlRnJlcXVlbmN5PVwiIiA8
PCBiYXNlRnJlcXVlbmN5WCgpIDw8ICIsICIgPDwgYmFzZUZyZXF1ZW5jeVkoKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJzZWVkPVwiIiA8PCBzZWVkKCkgPDwgIlwiICIKLSAgICAgICA8PCAibnVtT2N0
YXZlcz1cIiIgPDwgbnVtT2N0YXZlcygpIDw8ICJcIiAiCi0gICAgICAgPDwgInN0aXRjaFRpbGVz
PVwiIiA8PCBzdGl0Y2hUaWxlcygpIDw8ICJcIl1cbiI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxl
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1
cmJ1bGVuY2UuaAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVu
aUBpbmYudS1zemVnZWQuaHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHRkVUdXJidWxlbmNlX2gKLSNkZWZpbmUgU1ZH
RkVUdXJidWxlbmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWVudW0gVHVyYnVsYW5jZVR5cGUgewotICAgIEZFVFVSQlVMRU5DRV9UWVBF
X1VOS05PV04gPSAwLAotICAgIEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSA9IDEsCi0g
ICAgRkVUVVJCVUxFTkNFX1RZUEVfVFVSQlVMRU5DRSA9IDIKLX07Ci0KLWNsYXNzIEZFVHVyYnVs
ZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGFuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGlu
dCwgZmxvYXQsIGJvb2wpOwotCi0gICAgVHVyYnVsYW5jZVR5cGUgdHlwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0VHlwZShUdXJidWxhbmNlVHlwZSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQpOwotCi0gICAgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgoKSBjb25zdDsKLSAgICB2b2lkIHNldEJhc2VGcmVxdWVuY3lYKGZs
b2F0KTsKLQotICAgIGZsb2F0IHNlZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldFNlZWQoZmxvYXQp
OwotCi0gICAgaW50IG51bU9jdGF2ZXMoKSBjb25zdDsKLSAgICB2b2lkIHNldE51bU9jdGF2ZXMo
Ym9vbCk7Ci0KLSAgICBib29sIHN0aXRjaFRpbGVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGl0
Y2hUaWxlcyhib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpOwotCi0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2OwotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7Ci0KLSAgICBzdHJ1Y3QgUGFp
bnRpbmdEYXRhIHsKLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVj
dG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICog
c19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgaW50IHdpZHRoOyAvLyBIb3cgbXVjaCB0byBz
dWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCi0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAg
ICAgIGludCB3cmFwWDsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgotICAgICAgICBpbnQgd3Jh
cFk7Ci0gICAgICAgIGludCBjaGFubmVsOwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0K
LSAgICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBw
YWludGluZ1NpemUpOwotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0g
ICAgRkVUdXJidWxlbmNlKFR1cmJ1bGFuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQs
IGJvb2wpOwotCi0gICAgaW5saW5lIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAg
IGZsb2F0IG5vaXNlMkQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHVu
c2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRh
JiwgY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgVHVyYnVsYW5jZVR5cGUgbV90eXBlOwotICAg
IGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WTsKLSAg
ICBpbnQgbV9udW1PY3RhdmVzOwotICAgIGZsb2F0IG1fc2VlZDsKLSAgICBib29sIG1fc3RpdGNo
VGlsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLQotI2VuZGlmIC8vIFNWR0ZFVHVyYnVsZW5jZV9oCklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmNw
cAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xp
Z2h0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLSNpbmNsdWRlICJT
VkdEaXN0YW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdQb2ludExpZ2h0U291cmNlLmgi
Ci0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1Nwb3RMaWdo
dFNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5n
RGF0YSYpCi17Ci19Ci0KLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRh
KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopCi17Ci0g
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKLSAg
ICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwotICAg
IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0gICAg
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOwotfQotCi0vLyBzcG90LWxpZ2h0
IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4gYWJzb2x1dGUgdHJlc2hvbGQKLS8vIGFjY29y
ZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCi1zdGF0aWMgY29u
c3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7Ci0KLXZvaWQgU3BvdExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAg
IHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IgPSBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3I7Ci0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5zZXRYKG1fZGlyZWN0aW9uLngo
KSAtIG1fcG9zaXRpb24ueCgpKTsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNl
dFkobV9kaXJlY3Rpb24ueSgpIC0gbV9wb3NpdGlvbi55KCkpOwotICAgIHBhaW50aW5nRGF0YS5k
aXJlY3Rpb25WZWN0b3Iuc2V0WihtX2RpcmVjdGlvbi56KCkgLSBtX3Bvc2l0aW9uLnooKSk7Ci0g
ICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGlmICgh
bV9saW1pdGluZ0NvbmVBbmdsZSkgewotICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxp
bWl0ID0gMC4wZjsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFs
aWFzVHJlc2hvbGQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5n
bGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUg
PCAwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5n
bGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQotICAgICAgICAgICAg
bGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRP
ZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAg
ICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2Zm
TGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKLSAgICB9Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcwotICAgIGlmICghbV9zcGVjdWxhckV4
cG9uZW50KQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7Ci0gICAg
ZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKLSAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBu
b3IgMS4wZgotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7Ci19Ci0K
LXZvaWQgU3BvdExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikKLXsKLSAgICBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAtIHgpOwotICAgIHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0geSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6KTsKLSAgICBwYWludGluZ0RhdGEubGln
aHRWZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yICogcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcjsKLSAgICBp
ZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAgICAg
ICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgoMC4wZik7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRZKDAuMGYpOwotICAgICAgICBwYWludGluZ0RhdGEuY29s
b3JWZWN0b3Iuc2V0WigwLjBmKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNl
dCB0aGUgY29sb3Igb2YgdGhlIHBpeGVsCi0gICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICBz
d2l0Y2ggKHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50KSB7Ci0gICAgY2FzZSAwOgotICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsgLy8gLWNvc2luZU9mQW5nbGUgXiAwID09IDEKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBsaWdodFN0cmVuZ3RoID0gLWNvc2lu
ZU9mQW5nbGU7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMSA9PSAtY29zaW5lT2ZBbmdsZQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBsaWdodFN0cmVuZ3RoID0gcG93ZigtY29z
aW5lT2ZBbmdsZSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCkKLSAg
ICAgICAgbGlnaHRTdHJlbmd0aCAqPSAocGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGNv
c2luZU9mQW5nbGUpIC8gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBwYWludGluZ0Rh
dGEuY29uZUZ1bGxMaWdodCk7Ci0KLSAgICBpZiAobGlnaHRTdHJlbmd0aCA+IDEuMGYpCi0gICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOwotCi0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9y
LnNldFgocGFpbnRpbmdEYXRhLnByaXZhdGVDb2xvclZlY3Rvci54KCkgKiBsaWdodFN0cmVuZ3Ro
KTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iuc2V0WShwYWludGluZ0RhdGEucHJpdmF0
ZUNvbG9yVmVjdG9yLnkoKSAqIGxpZ2h0U3RyZW5ndGgpOwotICAgIHBhaW50aW5nRGF0YS5jb2xv
clZlY3Rvci5zZXRaKHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JWZWN0b3IueigpICogbGlnaHRT
dHJlbmd0aCk7Ci19Ci0KLXZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIGZsb2F0IGF6aW11dGggPSBkZWcy
cmFkKG1fYXppbXV0aCk7Ci0gICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlv
bik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgoY29zZihhemltdXRoKSAqIGNv
c2YoZWxldmF0aW9uKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihh
emltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnNldFooc2luZihlbGV2YXRpb24pKTsKLX0KLQotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OnVw
ZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQsIGludCwgZmxvYXQpCi17Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9h
dFBvaW50M0QmIHApCi17Ci0gICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnko
KSA8PCAiIHo9IiA8PCBwLnooKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIFBv
aW50TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Ci17Ci0gICAgdHMgPDwgIlt0eXBlPVBPSU5ULUxJR0hUXSAiOwotICAgIHRzIDw8ICJbcG9z
aXRpb249XCIiIDw8IHBvc2l0aW9uKCkgPDwgIlwiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1U
ZXh0U3RyZWFtJiBTcG90TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIlt0eXBlPVNQT1QtTElHSFRdICI7Ci0gICAg
dHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAi
W2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0aW9uKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltzcGVj
dWxhckV4cG9uZW50PVwiIiA8PCBzcGVjdWxhckV4cG9uZW50KCkgPDwgIlwiXSI7Ci0gICAgdHMg
PDwgIltsaW1pdGluZ0NvbmVBbmdsZT1cIiIgPDwgbGltaXRpbmdDb25lQW5nbGUoKSA8PCAiXCJd
IjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIERpc3RhbnRMaWdodFNvdXJjZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8
PCAiW3R5cGU9RElTVEFOVC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IGF6
aW11dGgoKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAiW2VsZXZhdGlvbj1cIiIgPDwgZWxldmF0aW9u
KCkgPDwgIlwiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHTGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0xpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY4
MDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtp
dC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpZm5kZWYgU1ZHTGlnaHRTb3VyY2VfaAotI2RlZmluZSBTVkdMaWdodFNvdXJjZV9o
Ci0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBMaWdodFR5cGUgewotICAg
IExTX0RJU1RBTlQsCi0gICAgTFNfUE9JTlQsCi0gICAgTFNfU1BPVAotfTsKLQotY2xhc3MgVGV4
dFN0cmVhbTsKLQotY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNv
dXJjZT4gewotcHVibGljOgotCi0gICAgLy8gTGlnaHQgdmVjdG9ycyBtdXN0IGJlIGNhbGN1bGF0
ZWQgZm9yIGV2ZXJ5IHBpeGVsIGR1cmluZwotICAgIC8vIHBhaW50aW5nLiBJdCBpcyBleHBlbnNp
dmUgdG8gcGFzcyBhbGwgdGhlc2UgYXJndW1lbnRzIHRvCi0gICAgLy8gYSBmcmVxdWVudGx5IGNh
bGxlZCBmdW5jdGlvbiwgZXNwZWNpYWxseSBiZWNhdXNlIG5vdCBhbGwKLSAgICAvLyBsaWdodCBz
b3VyY2VzIHJlcXVpcmUgYWxsIG9mIHRoZW0uIEluc3RlYWQsIHdlIGp1c3QgcGFzcwotICAgIC8v
IGEgcmVmZXJlbmNlIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlCi0gICAgc3RydWN0IFBhaW50
aW5nRGF0YSB7Ci0gICAgICAgIC8vIFNWR0ZFTGlnaHRpbmcgYWxzbyB1c2UgdGhlbQotICAgICAg
ICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3I7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZl
Y3RvcjsKLSAgICAgICAgLy8gUHJpdmF0ZSBtZW1iZXJzCi0gICAgICAgIEZsb2F0UG9pbnQzRCBk
aXJlY3Rpb25WZWN0b3I7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7
Ci0gICAgICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKLSAgICAgICAgZmxvYXQgY29uZUZ1bGxM
aWdodDsKLSAgICAgICAgaW50IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgfTsKLQotICAgIExpZ2h0
U291cmNlKExpZ2h0VHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsgfQot
Ci0gICAgdmlydHVhbCB+TGlnaHRTb3VyY2UoKSB7IH0KLQotICAgIExpZ2h0VHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKSA9IDA7Ci0gICAgLy8geiBpcyBhIGZs
b2F0IG51bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIK
LSAgICAvLyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMg
PG51bWJlcj4gaW4gdGhlIFNWRyBzdGFuZGFyZAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWlu
dGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSA9IDA7Ci0KLXBy
aXZhdGU6Ci0gICAgTGlnaHRUeXBlIG1fdHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYg
Ly8gU1ZHTGlnaHRTb3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdQb2ludExpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdQb2ludExpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBTVkdQb2ludExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU1ZHUG9pbnRMaWdodFNvdXJjZV9oCi0K
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJTVkdMaWdodFNv
dXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvaW50TGlnaHRTb3VyY2Ug
OiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBv
aW50TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb2ludExpZ2h0U291cmNlKHBvc2l0aW9u
KSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb247IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRh
KFBhaW50aW5nRGF0YSYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KTsKLQotICAgIHZpcnR1YWwgVGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgUG9pbnRMaWdodFNvdXJjZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQot
ICAgICAgICA6IExpZ2h0U291cmNlKExTX1BPSU5UKQotICAgICAgICAsIG1fcG9zaXRpb24ocG9z
aXRpb24pCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTVkdQb2ludExpZ2h0U291cmNlX2gKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHU3BvdExpZ2h0U291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdTcG90TGlnaHRTb3VyY2UuaAko
cmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR1Nwb3RM
aWdodFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNv
bT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHU3BvdExpZ2h0U291cmNlX2gKLSNkZWZpbmUg
U1ZHU3BvdExpZ2h0U291cmNlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJT
KQotI2luY2x1ZGUgIlNWR0xpZ2h0U291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgU3BvdExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50M0QmIHBvc2l0aW9uLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwb3RMaWdodFNvdXJjZShwb3NpdGlvbiwgZGly
ZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50LCBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAgIH0KLQot
ICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2RpcmVjdGlvbjsgfQotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQotICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3QgeyByZXR1cm4gbV9saW1pdGluZ0NvbmVBbmdsZTsgfQotCi0gICAgdmlydHVhbCB2
b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopOwot
Ci0gICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQ
b2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sCi0gICAgICAg
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAg
ICA6IExpZ2h0U291cmNlKExTX1NQT1QpCi0gICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikK
LSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9zcGVjdWxhckV4
cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgICwgbV9saW1pdGluZ0NvbmVBbmdsZShs
aW1pdGluZ0NvbmVBbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1fcG9z
aXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fZGlyZWN0aW9uOwotCi0gICAgZmxvYXQgbV9zcGVj
dWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKLQotI2VuZGlmIC8vIFNWR1Nwb3RMaWdodFNvdXJjZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>