<?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>63666</bug_id>
          
          <creation_ts>2011-06-29 16:01:11 -0700</creation_ts>
          <short_desc>Move XMLDocumentParser to new folder xml/parser/</short_desc>
          <delta_ts>2011-07-01 13:09:11 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vicki Pfau">jeffrey+webkit</reporter>
          <assigned_to name="Vicki Pfau">jeffrey+webkit</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429948</commentid>
    <comment_count>0</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-29 16:01:11 -0700</bug_when>
    <thetext>Move XMLDocumentParser to new folder xml/parser/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429949</commentid>
    <comment_count>1</comment_count>
      <attachid>99168</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-29 16:03:28 -0700</bug_when>
    <thetext>Created attachment 99168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429967</commentid>
    <comment_count>2</comment_count>
      <attachid>99177</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-29 16:27:47 -0700</bug_when>
    <thetext>Created attachment 99177
Patch

Rearranged Xcode project patch so hopefully merging doesn&apos;t fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429971</commentid>
    <comment_count>3</comment_count>
      <attachid>99177</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 16:34:36 -0700</bug_when>
    <thetext>Comment on attachment 99177
Patch

Attachment 99177 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8965199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429983</commentid>
    <comment_count>4</comment_count>
      <attachid>99177</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-06-29 16:45:02 -0700</bug_when>
    <thetext>Comment on attachment 99177
Patch

Attachment 99177 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8960352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430017</commentid>
    <comment_count>5</comment_count>
      <attachid>99188</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-29 17:17:39 -0700</bug_when>
    <thetext>Created attachment 99188
Patch

For some reason, the files I moved weren&apos;t getting detected. Here&apos;s a patch with the files moved properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430026</commentid>
    <comment_count>6</comment_count>
      <attachid>99188</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 17:27:29 -0700</bug_when>
    <thetext>Comment on attachment 99188
Patch

Attachment 99188 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8958438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430081</commentid>
    <comment_count>7</comment_count>
      <attachid>99188</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-29 18:37:24 -0700</bug_when>
    <thetext>Comment on attachment 99188
Patch

Attachment 99188 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8958462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430541</commentid>
    <comment_count>8</comment_count>
      <attachid>99332</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-30 10:51:47 -0700</bug_when>
    <thetext>Created attachment 99332
Patch

Hopefully won&apos;t break this time. I don&apos;t know if the changes to the Windows build are correct (XMLDocumentParser is still on the dom config). Furthermore, I moved XMLDocumentParser.h from an &quot;internal&quot; header in the gypi to just another source file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430557</commentid>
    <comment_count>9</comment_count>
      <attachid>99332</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-30 11:17:21 -0700</bug_when>
    <thetext>Comment on attachment 99332
Patch

Attachment 99332 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8963556</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430677</commentid>
    <comment_count>10</comment_count>
      <attachid>99365</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-30 14:19:47 -0700</bug_when>
    <thetext>Created attachment 99365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430678</commentid>
    <comment_count>11</comment_count>
      <attachid>99365</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-06-30 14:29:12 -0700</bug_when>
    <thetext>Comment on attachment 99365
Patch

Attachment 99365 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8957851</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430758</commentid>
    <comment_count>12</comment_count>
      <attachid>99385</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-06-30 15:57:44 -0700</bug_when>
    <thetext>Created attachment 99385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431020</commentid>
    <comment_count>13</comment_count>
      <attachid>99385</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-01 00:22:18 -0700</bug_when>
    <thetext>Comment on attachment 99385
Patch

I presume you tested compile on mac.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431041</commentid>
    <comment_count>14</comment_count>
      <attachid>99385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 01:00:51 -0700</bug_when>
    <thetext>Comment on attachment 99385
Patch

Rejecting attachment 99385 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
dom/DocumentFragment.o
Source/WebCore/dom/Document.cpp:149: fatal error: XMLDocumentParser.h: No such file or directory
compilation terminated.
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/dom/Document.o] Error 1
make: *** Waiting for unfinished jobs....
Source/WebCore/dom/DocumentFragment.cpp:30: fatal error: XMLDocumentParser.h: No such file or directory
compilation terminated.
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/dom/DocumentFragment.o] Error 1

Full output: http://queues.webkit.org/results/8965745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431291</commentid>
    <comment_count>15</comment_count>
      <attachid>99492</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-07-01 11:34:21 -0700</bug_when>
    <thetext>Created attachment 99492
Patch

added xml/parser to the gyp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431294</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-01 11:35:31 -0700</bug_when>
    <thetext>Sorry the build system suckage has caused you such pain.  Adding a new folder is one of the trickier things (up there with adding a new kind of generated file).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431382</commentid>
    <comment_count>17</comment_count>
      <attachid>99492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 13:09:03 -0700</bug_when>
    <thetext>Comment on attachment 99492
Patch

Clearing flags on attachment: 99492

Committed r90269: &lt;http://trac.webkit.org/changeset/90269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431383</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 13:09:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99168</attachid>
            <date>2011-06-29 16:03:28 -0700</date>
            <delta_ts>2011-06-29 16:27:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63666-20110629160327.patch</filename>
            <type>text/plain</type>
            <size>35169</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk5NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTli
MmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYwZTBiN2JiNC4uZjdkMDE2Y2U4ODczNjUyNGJhNzBi
ZjJhNDZhYmRmNWI4ZmRmOGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwNiw5ICs2MDYs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5j
cHAKICAgICBkb20vV2hlZWxFdmVudC5jcHAKICAgICBkb20vV2luZG93RXZlbnRDb250ZXh0LmNw
cAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcAogCiAgICAg
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCiAKQEAgLTEzODgsNiAr
MTM4NSwxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CiAgICAgeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAogICAgIHhtbC9YU0xUVW5pY29kZVNv
cnQuY3BwCisKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorICAgIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAKICkKIAogU0VUKFdlYkNvcmVfQ1NTX1BST1BFUlRZX05BTUVT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNDE5MzUyMjVkZmJkYzEyNWZlYWQ4Y2JlMzBhYzg0YTZiN2I5YWQ1OC4u
ZWY0YzczZDJlMTU1MmJmYTk2ZWY3OGU0NmZiNjEyYTFlYzI1NjAwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3MiBAQAorMjAxMS0wNi0yOSAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
WE1MRG9jdW1lbnRQYXJzZXIgdG8gbmV3IGZvbGRlciB4bWwvcGFyc2VyLworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NjYKKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRs
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmV4aXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXVzZVBhcnNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1M
UGFyc2VyQ29udGV4dDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250
ZXh0OjpYTUxQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElz
WEhUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNY
SFRNTERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzZXRJ
c1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OndlbGxGb3JtZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6On5QZW5kaW5nQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEVuZEVsZW1lbnROU0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENoYXJh
Y3RlcnNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBl
bmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjphcHBlbmRDREFUQUJsb2NrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kRXJyb3JDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDYWxsYmFja3MpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrOjp+UGVu
ZGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdTdGFydEVsZW1lbnROU0NhbGxiYWNrOjp+UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVu
dE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6
UGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s6On5QZW5kaW5nQ2hhcmFj
dGVyc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrOjp+UGVuZGluZ1By
b2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OlBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjazo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxi
YWNrOjp+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6On5QZW5k
aW5nQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6
OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ0ludGVybmFsU3Vic2V0Q2FsbGJhY2s6On5QZW5kaW5nSW50ZXJu
YWxTdWJzZXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQ
ZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpyZWFkT3V0Qnl0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c3dpdGNoVG9VVEYxNik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbGxv
d0V4dGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWFkRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xvc2VGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmVycm9yRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBhcnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dG9BdG9taWNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNkYXRhQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFja0Fyb3VuZExp
YlhNTEVudGl0eUJ1Zyk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEVsZW1lbnROc0hhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kRWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJzSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNkYXRhQmxvY2tIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ondh
cm5pbmdIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZhdGFsRXJyb3JIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vcm1hbEVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRYSFRNTEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRYSFRNTEVudGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0RG9jdW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZERvY3VtZW50SGFuZGxl
cik6CisgICAgICAgIChXZWJDb3JlOjppbnRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9y
YWJsZVdoaXRlc3BhY2VIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjphdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5k
ZWNsYXJlZEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3Vw
cG9ydHNYTUxWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
flhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
Ojpkb1dyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFs
aXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZpeEZyb21R
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
Omhhc0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0
ZCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyU2NvcGU6OlhNTERvY3VtZW50UGFyc2Vy
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6flhNTERv
Y3VtZW50UGFyc2VyU2NvcGUpOgorCiAyMDExLTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzIwYmNmMTY0ZmI5YmExODBhYmE1YjUxYTA1MGQ3YmIz
NGQ4OTAyNS4uODllMzgxOWM5MTk4MWU1MDRmYTY3MTI1OTM1NGY3OWVhZmI2OGVlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMzI0LDExICsxMzI0LDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQuY3BwIFwKQEAgLTM5NTQsNyArMzk0OSwxMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisJU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKIAogaWYgVEFSR0VUX1gxMQogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2Fm
ODhhZjZkOWYwNGVjM2VkLi5kN2MxMDRkYzVlZWIzOTE5NmEzYjk0YjZhNWFhMTAyY2I3NzkyNjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NTgsNyArNTU4LDYgQEAKICAgICAgICAgICAgICdkb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCcsCiAgICAgICAgICAgICAnZG9tL1VzZXJUeXBpbmdHZXN0
dXJlSW5kaWNhdG9yLmgnLAogICAgICAgICAgICAgJ2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oJywK
LSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaCcsCkBAIC0xMDk5LDYgKzEwOTgsNyBAQAogICAgICAgICAgICAgJ3N2Zy9wcm9w
ZXJ0aWVzL1NWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmgnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAg
ICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lkbF9maWxlcyc6IFsKICAgICAg
ICAgICAgICdjc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsJywKQEAgLTI2MzcsMTEgKzI2MzcsNiBAQAog
ICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9XaW5kb3dF
dmVudENvbnRleHQuY3BwJywKICAgICAgICAgICAgICdkb20vV2luZG93RXZlbnRDb250ZXh0Lmgn
LAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAnLAotICAgICAgICAgICAg
J2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwJywKLSAgICAgICAgICAgICdkb20vWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCcs
CiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
JywKICAgICAgICAgICAgICdkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCcsCkBAIC02MTI3
LDYgKzYxMjIsMTEgQEAKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
JywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oJywKICAg
ICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAnLAorICAgICAgICAgICAgJ3htbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICd4bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmNwcCcsCiAgICAgICAg
ICAgICAneG1sL0RPTVBhcnNlci5oJywKICAgICAgICAgICAgICd4bWwvTmF0aXZlWFBhdGhOU1Jl
c29sdmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGJjMTA2ZjY0ZTkzZDhhZjBmMGQ5OGFiNWZj
ZGIxZjA1NjZiMDExODcuLjdlNGY0MTgxMzc3YjRjYjdiOTRhNTM0N2ExZWQ4MjY3ZTE3MjhkMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC01NjQsNyArNTY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgZG9t
L1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBcCiAg
ICAgZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNl
ci5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBc
CiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCkBAIC0xMTk2LDcgKzExOTUsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
Y3BwIFwKLSAgICB4bWwvWE1MU2VyaWFsaXplci5jcHAKKyAgICB4bWwvWE1MU2VyaWFsaXplci5j
cHAgXAorICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIAogCiBIRUFERVJTICs9
IFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaCBcCkBAIC0x
NTQ3LDcgKzE1NDcsNiBAQCBIRUFERVJTICs9IFwKICAgICBkb20vV2ViS2l0QW5pbWF0aW9uRXZl
bnQuaCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBkb20vV2hlZWxF
dmVudC5oIFwKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgZWRpdGluZy9BcHBl
bmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5o
IFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggXApAQCAtMjQ5MSw2ICsyNDkwLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmggXAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAor
ICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgeG1sL0RPTVBhcnNlci5o
IFwKICAgICB4bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggXAogICAgIHhtbC9YTUxIdHRwUmVx
dWVzdC5oIFwKQEAgLTI1OTEsNyArMjU5MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1dpZGdldFF0LmNwcAogCiAhY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9MSUJYTUwyPTEp
IHsKLSAgICBTT1VSQ0VTICs9IGRvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorICAgIFNPVVJD
RVMgKz0geG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xKSB7CkBAIC0zMTAyLDggKzMxMDIsOCBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICB4bWwvWFNM
SW1wb3J0UnVsZS5jcHAgXAogICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAgXAog
ICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcAorICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIFwKKyAgICAgICAgICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZS5jcHAKIAogICAgICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICAgICAgeG1sL1hT
TEltcG9ydFJ1bGUuaCBcCkBAIC0zMTExLDcgKzMxMTEsNyBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuaCBcCiAg
ICAgICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5oIFwKICAgICAgICAgICAgICAgICB4
bWwvWE1MVHJlZVZpZXdlci5oIFwKLSAgICAgICAgICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oCisgICAgICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNj
b3BlLmgKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2YjMyODI3MjUzMzg0Njdl
YjQzMWYxYjAzYWI1MjZmMmNjZDI5Yjg2Li4yYmViZTU5ZjZjZGQ2MDFiYTE5OTBiM2FiMmY3N2Yz
Njc4MjA0YWU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNDkxMzAsNyArNDkxMzAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCiAJCQkJPgog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5MTgy
LDE1ICs0OTE4MiwxNSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50UGFyc2VyLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC00OTI0Miw3ICs0OTI0Miw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNzk0MWYw
ZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi5hMTIxZGE4MmFjNjk3YmVjMDY2MGRi
YTYzOGZhZWJmOTI2ZTRkMmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0NjI4QTEwM0NE
MURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9y
aWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8q
IE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnku
aCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwM0YxRkU5
MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4
IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IH07CisJ
CTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODMx
M0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi87IH07CisJ
CTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg1MTNC
QTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsgfTsKKwkJMDBC
OTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2MTNCQTg2N0Yw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1MkJGQ0U5MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhE
IC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VCMTI4QUJGMjEw
MEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9s
b2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlERjEy
ODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJCTUyMUQ0NkY4
MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxSaW5n
LmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUzMjVFNEQ4MTNB
NkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4
VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUw
QTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBB
MEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8q
IFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURCRDEz
MDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0xNDgyLDggKzE0
ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjIzMTMxREI5
MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEzMURCOTZEMDA0
NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAg
Ki87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZE
MDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBF
M0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAv
KiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRNTENv
bnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICovOyB9OwogCQk1
RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REQw
QUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsgfTsK
IAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4N0JCODIxMUUz
RUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpAQCAtMzA0Myw3
ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4
dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5
OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNB
IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQwMkRF
M0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0Ew
MkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hl
UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3LDYgQEAKIAkJ
OTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVD
QSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VE
ZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAz
MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJDMDgyNDVFNTkw
MDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9j
dW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlBQkMgLyogUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Ki87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1
NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5M0YxOUFFNjA4
MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAv
KiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3LDExIEBACiAJ
CTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBP
cmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmln
aW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDNGMUZFOTEx
RTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5
MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNCQTg2N0YwMDM1
QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgcGF0aCA9
IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVudE1vY2su
aDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2
Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFt
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1QTU3NEYyMzEz
MURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1
NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90ZXNE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAw
NDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1
bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQxNUUz
QUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYgLyogV2ViQ29y
ZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAvKiBXZWJDb3Jl
RXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAvKiBFeHBvcnRG
aWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4
cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBv
cnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRl
eHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRFNDQ3NjAx
ODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAv
KiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkxMjUxRjEyRDAw
M0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBC
dXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzAw
LDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNCQTg2N0YwMDM1
QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmgg
Ki8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNlcjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAv
KiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTAwQjkzMTgw
MTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThEMThFNzAwMjI5
NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAwMjI5NDdEIC8q
IERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAvKiBET01QYXJz
ZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdCMzA0MTAwMEZF
RUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1NjcxMjdCMzA0MTAw
MEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5MDJERTQ0NzYw
MTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0QzMEEwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBGN0EwRTgwMURG
MzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0JCQkJNUQxNUUz
QTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAotCQkJ
CTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
MzAzMiw4ICsyMzA0MCw2IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQx
MkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYg
LyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUw
MEI5OTE4RiAvKiBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMzA4Nyw2ICsyMzA5Myw4IEBACiAJCQkJMDg2Mzk1MTYxM0I1
RkU1NzAwQkIzNDREIC8qIFNWR0FuaW1hdGVkUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMx
QTJGOUMxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1QUJCNzg3MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkzMTg4MTNCQThEQkEw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDBCOTMx
OEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjU3OTYsOSArMjU4MDQsNiBAQAogCQkJCTUxMTIyNDc4MTBDRkI4RjQwMDgwOTlE
NyAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzMwOUUyMzA5OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5D
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAv
KiBYTGlua05hbWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QUJDMDgyNDVFNTkwMDFF
OUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1NEM1MEY3
QjBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTVEMTVFM0FCMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAv
KiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTM2QTAwQzExMzREQkQy
MDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNERkQ0OEYwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0
VXBsb2FkLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU4NTUsNiArMjU4NjAsOSBAQAogCQkJCTQz
MUEyRjlEMTNCNkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzMUEyRkQ3MTNCNzcwN0EwMDc3OTFFNCAvKiBTVkdB
bmltYXRlZExlbmd0aExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxQTMwMjExM0I4OURD
QzAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwMEI5MzE4NzEzQkE4REIzMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxODkxM0JBOERCQzAwMzVBOTQ4IC8qIFhNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwMEI5MzE4QjEzQkE4
REM5MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmluZGV4IDExZjcwNGUxMjU0OGNhNGY1MWY2ZDIx
YThjYzlkZDhiNTI0MThjZmQuLmUyZTRiYWFkMWJiNDI5ODZmMDVmODBhMTY3NGJkMGM0NTZhYjMw
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAtMTQyLDUgKzE0MiwzIEBACiAj
aW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCIKICNpbmNsdWRlICJXaGVlbEV2ZW50
LmNwcCIKICNpbmNsdWRlICJXaW5kb3dFdmVudENvbnRleHQuY3BwIgotI2luY2x1ZGUgIlhNTERv
Y3VtZW50UGFyc2VyLmNwcCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99177</attachid>
            <date>2011-06-29 16:27:47 -0700</date>
            <delta_ts>2011-06-29 17:17:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63666-20110629162746.patch</filename>
            <type>text/plain</type>
            <size>34543</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk5NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTli
MmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYwZTBiN2JiNC4uZjdkMDE2Y2U4ODczNjUyNGJhNzBi
ZjJhNDZhYmRmNWI4ZmRmOGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwNiw5ICs2MDYs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5j
cHAKICAgICBkb20vV2hlZWxFdmVudC5jcHAKICAgICBkb20vV2luZG93RXZlbnRDb250ZXh0LmNw
cAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcAogCiAgICAg
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCiAKQEAgLTEzODgsNiAr
MTM4NSwxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CiAgICAgeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAogICAgIHhtbC9YU0xUVW5pY29kZVNv
cnQuY3BwCisKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorICAgIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAKICkKIAogU0VUKFdlYkNvcmVfQ1NTX1BST1BFUlRZX05BTUVT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNDE5MzUyMjVkZmJkYzEyNWZlYWQ4Y2JlMzBhYzg0YTZiN2I5YWQ1OC4u
ZWY0YzczZDJlMTU1MmJmYTk2ZWY3OGU0NmZiNjEyYTFlYzI1NjAwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3MiBAQAorMjAxMS0wNi0yOSAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
WE1MRG9jdW1lbnRQYXJzZXIgdG8gbmV3IGZvbGRlciB4bWwvcGFyc2VyLworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NjYKKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRs
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmV4aXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXVzZVBhcnNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1M
UGFyc2VyQ29udGV4dDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250
ZXh0OjpYTUxQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElz
WEhUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNY
SFRNTERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzZXRJ
c1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OndlbGxGb3JtZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6On5QZW5kaW5nQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEVuZEVsZW1lbnROU0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENoYXJh
Y3RlcnNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBl
bmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjphcHBlbmRDREFUQUJsb2NrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kRXJyb3JDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDYWxsYmFja3MpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrOjp+UGVu
ZGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdTdGFydEVsZW1lbnROU0NhbGxiYWNrOjp+UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVu
dE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6
UGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s6On5QZW5kaW5nQ2hhcmFj
dGVyc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrOjp+UGVuZGluZ1By
b2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OlBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjazo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxi
YWNrOjp+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6On5QZW5k
aW5nQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6
OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ0ludGVybmFsU3Vic2V0Q2FsbGJhY2s6On5QZW5kaW5nSW50ZXJu
YWxTdWJzZXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQ
ZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpyZWFkT3V0Qnl0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c3dpdGNoVG9VVEYxNik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbGxv
d0V4dGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWFkRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xvc2VGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmVycm9yRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBhcnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dG9BdG9taWNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNkYXRhQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFja0Fyb3VuZExp
YlhNTEVudGl0eUJ1Zyk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEVsZW1lbnROc0hhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kRWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJzSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNkYXRhQmxvY2tIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ondh
cm5pbmdIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZhdGFsRXJyb3JIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vcm1hbEVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRYSFRNTEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRYSFRNTEVudGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0RG9jdW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZERvY3VtZW50SGFuZGxl
cik6CisgICAgICAgIChXZWJDb3JlOjppbnRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9y
YWJsZVdoaXRlc3BhY2VIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjphdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5k
ZWNsYXJlZEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3Vw
cG9ydHNYTUxWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
flhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
Ojpkb1dyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFs
aXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZpeEZyb21R
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
Omhhc0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0
ZCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyU2NvcGU6OlhNTERvY3VtZW50UGFyc2Vy
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6flhNTERv
Y3VtZW50UGFyc2VyU2NvcGUpOgorCiAyMDExLTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzIwYmNmMTY0ZmI5YmExODBhYmE1YjUxYTA1MGQ3YmIz
NGQ4OTAyNS4uODllMzgxOWM5MTk4MWU1MDRmYTY3MTI1OTM1NGY3OWVhZmI2OGVlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMzI0LDExICsxMzI0LDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQuY3BwIFwKQEAgLTM5NTQsNyArMzk0OSwxMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisJU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKIAogaWYgVEFSR0VUX1gxMQogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2Fm
ODhhZjZkOWYwNGVjM2VkLi5kN2MxMDRkYzVlZWIzOTE5NmEzYjk0YjZhNWFhMTAyY2I3NzkyNjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NTgsNyArNTU4LDYgQEAKICAgICAgICAgICAgICdkb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCcsCiAgICAgICAgICAgICAnZG9tL1VzZXJUeXBpbmdHZXN0
dXJlSW5kaWNhdG9yLmgnLAogICAgICAgICAgICAgJ2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oJywK
LSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaCcsCkBAIC0xMDk5LDYgKzEwOTgsNyBAQAogICAgICAgICAgICAgJ3N2Zy9wcm9w
ZXJ0aWVzL1NWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmgnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAg
ICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lkbF9maWxlcyc6IFsKICAgICAg
ICAgICAgICdjc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsJywKQEAgLTI2MzcsMTEgKzI2MzcsNiBAQAog
ICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9XaW5kb3dF
dmVudENvbnRleHQuY3BwJywKICAgICAgICAgICAgICdkb20vV2luZG93RXZlbnRDb250ZXh0Lmgn
LAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAnLAotICAgICAgICAgICAg
J2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwJywKLSAgICAgICAgICAgICdkb20vWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCcs
CiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
JywKICAgICAgICAgICAgICdkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCcsCkBAIC02MTI3
LDYgKzYxMjIsMTEgQEAKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
JywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oJywKICAg
ICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAnLAorICAgICAgICAgICAgJ3htbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICd4bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmNwcCcsCiAgICAgICAg
ICAgICAneG1sL0RPTVBhcnNlci5oJywKICAgICAgICAgICAgICd4bWwvTmF0aXZlWFBhdGhOU1Jl
c29sdmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGJjMTA2ZjY0ZTkzZDhhZjBmMGQ5OGFiNWZj
ZGIxZjA1NjZiMDExODcuLjdlNGY0MTgxMzc3YjRjYjdiOTRhNTM0N2ExZWQ4MjY3ZTE3MjhkMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC01NjQsNyArNTY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgZG9t
L1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBcCiAg
ICAgZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNl
ci5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBc
CiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCkBAIC0xMTk2LDcgKzExOTUsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
Y3BwIFwKLSAgICB4bWwvWE1MU2VyaWFsaXplci5jcHAKKyAgICB4bWwvWE1MU2VyaWFsaXplci5j
cHAgXAorICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIAogCiBIRUFERVJTICs9
IFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaCBcCkBAIC0x
NTQ3LDcgKzE1NDcsNiBAQCBIRUFERVJTICs9IFwKICAgICBkb20vV2ViS2l0QW5pbWF0aW9uRXZl
bnQuaCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBkb20vV2hlZWxF
dmVudC5oIFwKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgZWRpdGluZy9BcHBl
bmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5o
IFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggXApAQCAtMjQ5MSw2ICsyNDkwLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmggXAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAor
ICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgeG1sL0RPTVBhcnNlci5o
IFwKICAgICB4bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggXAogICAgIHhtbC9YTUxIdHRwUmVx
dWVzdC5oIFwKQEAgLTI1OTEsNyArMjU5MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1dpZGdldFF0LmNwcAogCiAhY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9MSUJYTUwyPTEp
IHsKLSAgICBTT1VSQ0VTICs9IGRvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorICAgIFNPVVJD
RVMgKz0geG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xKSB7CkBAIC0zMTAyLDggKzMxMDIsOCBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICB4bWwvWFNM
SW1wb3J0UnVsZS5jcHAgXAogICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAgXAog
ICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcAorICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIFwKKyAgICAgICAgICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZS5jcHAKIAogICAgICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICAgICAgeG1sL1hT
TEltcG9ydFJ1bGUuaCBcCkBAIC0zMTExLDcgKzMxMTEsNyBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuaCBcCiAg
ICAgICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5oIFwKICAgICAgICAgICAgICAgICB4
bWwvWE1MVHJlZVZpZXdlci5oIFwKLSAgICAgICAgICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oCisgICAgICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNj
b3BlLmgKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2YjMyODI3MjUzMzg0Njdl
YjQzMWYxYjAzYWI1MjZmMmNjZDI5Yjg2Li4yYmViZTU5ZjZjZGQ2MDFiYTE5OTBiM2FiMmY3N2Yz
Njc4MjA0YWU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNDkxMzAsNyArNDkxMzAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCiAJCQkJPgog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5MTgy
LDE1ICs0OTE4MiwxNSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50UGFyc2VyLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC00OTI0Miw3ICs0OTI0Miw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNzk0MWYw
ZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi45MTc1ZmRjMjk4NWE4NjFmZDAwZGIw
NzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0NjI4QTEwM0NE
MURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9y
aWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8q
IE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnku
aCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwM0YxRkU5
MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4
IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IH07CisJ
CTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODMx
M0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi87IH07CisJ
CTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg1MTNC
QTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsgfTsKKwkJMDBC
OTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2MTNCQTg2N0Yw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1MkJGQ0U5MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhE
IC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VCMTI4QUJGMjEw
MEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9s
b2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlERjEy
ODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJCTUyMUQ0NkY4
MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxSaW5n
LmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUzMjVFNEQ4MTNB
NkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4
VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUw
QTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBB
MEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8q
IFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURCRDEz
MDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0xNDgyLDggKzE0
ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjIzMTMxREI5
MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEzMURCOTZEMDA0
NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAg
Ki87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZE
MDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBF
M0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAv
KiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRNTENv
bnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICovOyB9OwogCQk1
RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REQw
QUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsgfTsK
IAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4N0JCODIxMUUz
RUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpAQCAtMzA0Myw3
ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4
dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5
OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNB
IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQwMkRF
M0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0Ew
MkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hl
UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3LDYgQEAKIAkJ
OTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVD
QSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VE
ZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAz
MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJDMDgyNDVFNTkw
MDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9j
dW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlBQkMgLyogUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Ki87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1
NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5M0YxOUFFNjA4
MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAv
KiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3LDExIEBACiAJ
CTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBP
cmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmln
aW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDNGMUZFOTEx
RTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5
MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNCQTg2N0YwMDM1
QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgcGF0aCA9
IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVudE1vY2su
aDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2
Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFt
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1QTU3NEYyMzEz
MURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1
NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90ZXNE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAw
NDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1
bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQxNUUz
QUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYgLyogV2ViQ29y
ZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAvKiBXZWJDb3Jl
RXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAvKiBFeHBvcnRG
aWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4
cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBv
cnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRl
eHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRFNDQ3NjAx
ODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAv
KiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkxMjUxRjEyRDAw
M0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBC
dXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzAw
LDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNCQTg2N0YwMDM1
QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmgg
Ki8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNlcjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAv
KiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTAwQjkzMTgw
MTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThEMThFNzAwMjI5
NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAwMjI5NDdEIC8q
IERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAvKiBET01QYXJz
ZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdCMzA0MTAwMEZF
RUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1NjcxMjdCMzA0MTAw
MEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5MDJERTQ0NzYw
MTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0QzMEEwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBGN0EwRTgwMURG
MzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0JCQkJNUQxNUUz
QTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAotCQkJ
CTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
MzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQx
MkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDgg
LyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkzMThDMTNCQThE
Q0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5OTE4RiAvKiBYTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc5Niw5ICsy
NTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0
OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU0QzUwRjdCMEU4MDFERjMwMDk4MzJBMCAv
KiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUQxNUUz
QUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxOEIxM0JB
OERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBF
MzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCAxMWY3MDRlMTI1NDhjYTRmNTFmNmQy
MWE4Y2M5ZGQ4YjUyNDE4Y2ZkLi5lMmU0YmFhZDFiYjQyOTg2ZjA1ZjgwYTE2NzRiZDBjNDU2YWIz
MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKQEAgLTE0Miw1ICsxNDIsMyBAQAog
I2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAiV2hlZWxFdmVu
dC5jcHAiCiAjaW5jbHVkZSAiV2luZG93RXZlbnRDb250ZXh0LmNwcCIKLSNpbmNsdWRlICJYTUxE
b2N1bWVudFBhcnNlci5jcHAiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAi
Cg==
</data>
<flag name="commit-queue"
          id="93608"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99188</attachid>
            <date>2011-06-29 17:17:39 -0700</date>
            <delta_ts>2011-06-30 10:51:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>movexml.patch</filename>
            <type>text/plain</type>
            <size>242021</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk5NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTli
MmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYwZTBiN2JiNC4uZjdkMDE2Y2U4ODczNjUyNGJhNzBi
ZjJhNDZhYmRmNWI4ZmRmOGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwNiw5ICs2MDYs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5j
cHAKICAgICBkb20vV2hlZWxFdmVudC5jcHAKICAgICBkb20vV2luZG93RXZlbnRDb250ZXh0LmNw
cAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcAogCiAgICAg
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCiAKQEAgLTEzODgsNiAr
MTM4NSwxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CiAgICAgeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAogICAgIHhtbC9YU0xUVW5pY29kZVNv
cnQuY3BwCisKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorICAgIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAKICkKIAogU0VUKFdlYkNvcmVfQ1NTX1BST1BFUlRZX05BTUVT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNDE5MzUyMjVkZmJkYzEyNWZlYWQ4Y2JlMzBhYzg0YTZiN2I5YWQ1OC4u
ZWY0YzczZDJlMTU1MmJmYTk2ZWY3OGU0NmZiNjEyYTFlYzI1NjAwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3MiBAQAorMjAxMS0wNi0yOSAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
WE1MRG9jdW1lbnRQYXJzZXIgdG8gbmV3IGZvbGRlciB4bWwvcGFyc2VyLworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NjYKKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRs
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmV4aXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXVzZVBhcnNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1M
UGFyc2VyQ29udGV4dDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250
ZXh0OjpYTUxQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElz
WEhUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNY
SFRNTERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzZXRJ
c1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OndlbGxGb3JtZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6On5QZW5kaW5nQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEVuZEVsZW1lbnROU0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENoYXJh
Y3RlcnNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBl
bmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjphcHBlbmRDREFUQUJsb2NrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kRXJyb3JDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDYWxsYmFja3MpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrOjp+UGVu
ZGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdTdGFydEVsZW1lbnROU0NhbGxiYWNrOjp+UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVu
dE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6
UGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s6On5QZW5kaW5nQ2hhcmFj
dGVyc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrOjp+UGVuZGluZ1By
b2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OlBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjazo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxi
YWNrOjp+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6On5QZW5k
aW5nQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6
OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ0ludGVybmFsU3Vic2V0Q2FsbGJhY2s6On5QZW5kaW5nSW50ZXJu
YWxTdWJzZXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQ
ZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpyZWFkT3V0Qnl0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c3dpdGNoVG9VVEYxNik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbGxv
d0V4dGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWFkRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xvc2VGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmVycm9yRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBhcnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dG9BdG9taWNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNkYXRhQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFja0Fyb3VuZExp
YlhNTEVudGl0eUJ1Zyk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEVsZW1lbnROc0hhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kRWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJzSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNkYXRhQmxvY2tIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ondh
cm5pbmdIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZhdGFsRXJyb3JIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vcm1hbEVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRYSFRNTEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRYSFRNTEVudGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0RG9jdW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZERvY3VtZW50SGFuZGxl
cik6CisgICAgICAgIChXZWJDb3JlOjppbnRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9y
YWJsZVdoaXRlc3BhY2VIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjphdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5k
ZWNsYXJlZEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3Vw
cG9ydHNYTUxWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
flhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
Ojpkb1dyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFs
aXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZpeEZyb21R
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
Omhhc0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0
ZCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyU2NvcGU6OlhNTERvY3VtZW50UGFyc2Vy
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6flhNTERv
Y3VtZW50UGFyc2VyU2NvcGUpOgorCiAyMDExLTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzIwYmNmMTY0ZmI5YmExODBhYmE1YjUxYTA1MGQ3YmIz
NGQ4OTAyNS4uODllMzgxOWM5MTk4MWU1MDRmYTY3MTI1OTM1NGY3OWVhZmI2OGVlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMzI0LDExICsxMzI0LDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQuY3BwIFwKQEAgLTM5NTQsNyArMzk0OSwxMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisJU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKIAogaWYgVEFSR0VUX1gxMQogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2Fm
ODhhZjZkOWYwNGVjM2VkLi5kN2MxMDRkYzVlZWIzOTE5NmEzYjk0YjZhNWFhMTAyY2I3NzkyNjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NTgsNyArNTU4LDYgQEAKICAgICAgICAgICAgICdkb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCcsCiAgICAgICAgICAgICAnZG9tL1VzZXJUeXBpbmdHZXN0
dXJlSW5kaWNhdG9yLmgnLAogICAgICAgICAgICAgJ2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oJywK
LSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaCcsCkBAIC0xMDk5LDYgKzEwOTgsNyBAQAogICAgICAgICAgICAgJ3N2Zy9wcm9w
ZXJ0aWVzL1NWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmgnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAg
ICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lkbF9maWxlcyc6IFsKICAgICAg
ICAgICAgICdjc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsJywKQEAgLTI2MzcsMTEgKzI2MzcsNiBAQAog
ICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9XaW5kb3dF
dmVudENvbnRleHQuY3BwJywKICAgICAgICAgICAgICdkb20vV2luZG93RXZlbnRDb250ZXh0Lmgn
LAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAnLAotICAgICAgICAgICAg
J2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwJywKLSAgICAgICAgICAgICdkb20vWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCcs
CiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
JywKICAgICAgICAgICAgICdkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCcsCkBAIC02MTI3
LDYgKzYxMjIsMTEgQEAKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
JywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oJywKICAg
ICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAnLAorICAgICAgICAgICAgJ3htbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICd4bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmNwcCcsCiAgICAgICAg
ICAgICAneG1sL0RPTVBhcnNlci5oJywKICAgICAgICAgICAgICd4bWwvTmF0aXZlWFBhdGhOU1Jl
c29sdmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGJjMTA2ZjY0ZTkzZDhhZjBmMGQ5OGFiNWZj
ZGIxZjA1NjZiMDExODcuLjdlNGY0MTgxMzc3YjRjYjdiOTRhNTM0N2ExZWQ4MjY3ZTE3MjhkMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC01NjQsNyArNTY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgZG9t
L1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBcCiAg
ICAgZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNl
ci5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBc
CiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCkBAIC0xMTk2LDcgKzExOTUsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
Y3BwIFwKLSAgICB4bWwvWE1MU2VyaWFsaXplci5jcHAKKyAgICB4bWwvWE1MU2VyaWFsaXplci5j
cHAgXAorICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIAogCiBIRUFERVJTICs9
IFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaCBcCkBAIC0x
NTQ3LDcgKzE1NDcsNiBAQCBIRUFERVJTICs9IFwKICAgICBkb20vV2ViS2l0QW5pbWF0aW9uRXZl
bnQuaCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBkb20vV2hlZWxF
dmVudC5oIFwKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgZWRpdGluZy9BcHBl
bmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5o
IFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggXApAQCAtMjQ5MSw2ICsyNDkwLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmggXAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAor
ICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgeG1sL0RPTVBhcnNlci5o
IFwKICAgICB4bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggXAogICAgIHhtbC9YTUxIdHRwUmVx
dWVzdC5oIFwKQEAgLTI1OTEsNyArMjU5MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1dpZGdldFF0LmNwcAogCiAhY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9MSUJYTUwyPTEp
IHsKLSAgICBTT1VSQ0VTICs9IGRvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorICAgIFNPVVJD
RVMgKz0geG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xKSB7CkBAIC0zMTAyLDggKzMxMDIsOCBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICB4bWwvWFNM
SW1wb3J0UnVsZS5jcHAgXAogICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAgXAog
ICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIFwKLSAgICAgICAgICAgIGRvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcAorICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIFwKKyAgICAgICAgICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZS5jcHAKIAogICAgICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICAgICAgeG1sL1hT
TEltcG9ydFJ1bGUuaCBcCkBAIC0zMTExLDcgKzMxMTEsNyBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfWFNMVD0xKSB7CiAgICAgICAgICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuaCBcCiAg
ICAgICAgICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5oIFwKICAgICAgICAgICAgICAgICB4
bWwvWE1MVHJlZVZpZXdlci5oIFwKLSAgICAgICAgICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oCisgICAgICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNj
b3BlLmgKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2YjMyODI3MjUzMzg0Njdl
YjQzMWYxYjAzYWI1MjZmMmNjZDI5Yjg2Li4yYmViZTU5ZjZjZGQ2MDFiYTE5OTBiM2FiMmY3N2Yz
Njc4MjA0YWU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNDkxMzAsNyArNDkxMzAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCiAJCQkJPgog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5MTgy
LDE1ICs0OTE4MiwxNSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50UGFyc2VyLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC00OTI0Miw3ICs0OTI0Miw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNzk0MWYw
ZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi45MTc1ZmRjMjk4NWE4NjFmZDAwZGIw
NzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0NjI4QTEwM0NE
MURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9y
aWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8q
IE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnku
aCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwM0YxRkU5
MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4
IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IH07CisJ
CTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODMx
M0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi87IH07CisJ
CTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg1MTNC
QTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsgfTsKKwkJMDBC
OTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2MTNCQTg2N0Yw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1MkJGQ0U5MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhE
IC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VCMTI4QUJGMjEw
MEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9s
b2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlERjEy
ODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJCTUyMUQ0NkY4
MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxSaW5n
LmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUzMjVFNEQ4MTNB
NkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4
VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUw
QTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBB
MEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8q
IFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURCRDEz
MDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0xNDgyLDggKzE0
ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjIzMTMxREI5
MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEzMURCOTZEMDA0
NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAg
Ki87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZE
MDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBF
M0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAv
KiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRNTENv
bnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICovOyB9OwogCQk1
RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REQw
QUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsgfTsK
IAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4N0JCODIxMUUz
RUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpAQCAtMzA0Myw3
ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4
dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5
OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNB
IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQwMkRF
M0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0Ew
MkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hl
UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3LDYgQEAKIAkJ
OTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVD
QSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VE
ZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAz
MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJDMDgyNDVFNTkw
MDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9j
dW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlBQkMgLyogUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Ki87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1
NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5M0YxOUFFNjA4
MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAv
KiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3LDExIEBACiAJ
CTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBP
cmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmln
aW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDNGMUZFOTEx
RTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5
MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNCQTg2N0YwMDM1
QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4MTI4
QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgcGF0aCA9
IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVudE1vY2su
aDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2
Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFt
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1QTU3NEYyMzEz
MURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1
NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90ZXNE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAw
NDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1
bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQxNUUz
QUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYgLyogV2ViQ29y
ZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAvKiBXZWJDb3Jl
RXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAvKiBFeHBvcnRG
aWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4
cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBv
cnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRl
eHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRFNDQ3NjAx
ODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAv
KiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkxMjUxRjEyRDAw
M0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBC
dXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzAw
LDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNCQTg2N0YwMDM1
QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmgg
Ki8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNlcjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAv
KiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTAwQjkzMTgw
MTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThEMThFNzAwMjI5
NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAwMjI5NDdEIC8q
IERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAvKiBET01QYXJz
ZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdCMzA0MTAwMEZF
RUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1NjcxMjdCMzA0MTAw
MEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5MDJERTQ0NzYw
MTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0QzMEEwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBGN0EwRTgwMURG
MzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0JCQkJNUQxNUUz
QTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAotCQkJ
CTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
MzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQx
MkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDgg
LyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkzMThDMTNCQThE
Q0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5OTE4RiAvKiBYTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc5Niw5ICsy
NTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0
OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU0QzUwRjdCMEU4MDFERjMwMDk4MzJBMCAv
KiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUQxNUUz
QUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxOEIxM0JB
OERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBF
MzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCAxMWY3MDRlMTI1NDhjYTRmNTFmNmQy
MWE4Y2M5ZGQ4YjUyNDE4Y2ZkLi5lMmU0YmFhZDFiYjQyOTg2ZjA1ZjgwYTE2NzRiZDBjNDU2YWIz
MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKQEAgLTE0Miw1ICsxNDIsMyBAQAog
I2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAiV2hlZWxFdmVu
dC5jcHAiCiAjaW5jbHVkZSAiV2luZG93RXZlbnRDb250ZXh0LmNwcCIKLSNpbmNsdWRlICJYTUxE
b2N1bWVudFBhcnNlci5jcHAiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2MzdiMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1A
d2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgotCi0jaW5jbHVk
ZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAi
Q29tbWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJJbWFnZUxvYWRlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5o
IgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50Lmgi
Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1jb25zdCBpbnQgbWF4RXJyb3JzID0gMjU7
Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZShDb250YWluZXJOb2Rl
KiBuKQotewotICAgIEFTU0VSVChuKTsKLSAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7Ci0gICAg
aWYgKG4gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbi0+cmVmKCk7Ci0gICAgbV9jdXJyZW50Tm9k
ZVN0YWNrLmFwcGVuZChtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnROb2RlID0gbjsKLSAg
ICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSA+IG1heERPTVRyZWVEZXB0aCkKLSAgICAg
ICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFeGNlc3NpdmUgbm9kZSBuZXN0aW5nLiIsIGxpbmVOdW1i
ZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BD
dXJyZW50Tm9kZSgpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnROb2RlKQotICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkpOwotCi0gICAgaWYgKG1fY3Vy
cmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsK
LQotICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlU3RhY2subGFzdCgpOwotICAgIG1f
Y3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCi17Ci0gICAgaWYgKG1fY3VycmVudE5vZGUgJiYg
bV9jdXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQotICAgICAgICBtX2N1cnJlbnROb2RlLT5kZXJl
ZigpOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwotICAgIG1fbGVhZlRleHROb2RlID0gMDsKLQot
ICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpKSB7IC8vIEFib3J0ZWQgcGFyc2luZy4K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkgLSAxOyBp
ICE9IDA7IC0taSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1tpXS0+ZGVyZWYoKTsK
LSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFja1swXSAmJiBtX2N1cnJlbnROb2RlU3RhY2tb
MF0gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1swXS0+ZGVy
ZWYoKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrLmNsZWFyKCk7Ci0gICAgfQotfQotCi12
b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcykKLXsKLSAgICBTdHJpbmcgcGFyc2VTdHJp
bmcgPSBzLnRvU3RyaW5nKCk7Ci0KLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gfHwgIW1fc2F3
Rmlyc3RFbGVtZW50KQotICAgICAgICBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtICs9IHBh
cnNlU3RyaW5nOwotCi0gICAgaWYgKGlzU3RvcHBlZCgpIHx8IG1fc2F3WFNMVHJhbnNmb3JtKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9w
ZW5kaW5nU3JjLmFwcGVuZChzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvV3Jp
dGUocy50b1N0cmluZygpKTsKLQotICAgIC8vIEFmdGVyIHBhcnNpbmcsIGdvIGFoZWFkIGFuZCBk
aXNwYXRjaCBpbWFnZSBiZWZvcmVsb2FkIGV2ZW50cy4KLSAgICBJbWFnZUxvYWRlcjo6ZGlzcGF0
Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgaW50IGxpbmVOdW1i
ZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgaGFuZGxlRXJyb3IodHlwZSwgbSwgVGV4dFBv
c2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJlciks
IFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIpKSk7Ci19
Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKEVycm9yVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKQotewotICAgIGlmICh0eXBlID09
IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJyb3JQb3NpdGlv
bi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9jb2x1
bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyAr
PSAid2FybmluZyBvbiBsaW5lICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5tX2xpbmUub25l
QmFzZWRJbnQoKSkgKyAiIGF0IGNvbHVtbiAiICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9j
b2x1bW4ub25lQmFzZWRJbnQoKSkgKyAiOiAiICsgbTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgZmF0YWw6Ci0gICAgICAgICAgICBjYXNlIG5vbkZhdGFsOgotICAg
ICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSAiZXJyb3Igb24gbGluZSAiICsgU3RyaW5n
OjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4gIiAr
IFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjogIiAr
IG07Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xhc3RFcnJvclBvc2l0aW9uID0gcG9zaXRpb247
Ci0gICAgICAgICsrbV9lcnJvckNvdW50OwotICAgIH0KLQotICAgIGlmICh0eXBlICE9IHdhcm5p
bmcpCi0gICAgICAgIG1fc2F3RXJyb3IgPSB0cnVlOwotCi0gICAgaWYgKHR5cGUgPT0gZmF0YWwp
Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVu
dGVyVGV4dCgpCi17Ci0jaWYgIVVTRShRWE1MU1RSRUFNKQotICAgIEFTU0VSVChtX2J1ZmZlcmVk
VGV4dC5zaXplKCkgPT0gMCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoIW1fbGVhZlRleHROb2RlKTsK
LSAgICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCAiIik7Ci0gICAg
bV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobV9sZWFmVGV4dE5vZGUuZ2V0KCkpOwotfQot
Ci0jaWYgIVVTRShRWE1MU1RSRUFNKQotc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29u
c3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkgCi17IAotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUpOyAK
LX0KLSNlbmRpZgotCi0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0KCkKLXsKLSAg
ICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sZWFmVGV4
dE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2xlYWZUZXh0Tm9kZS0+YXBwZW5kRGF0YSh0b1N0cmlu
ZyhtX2J1ZmZlcmVkVGV4dC5kYXRhKCksIG1fYnVmZmVyZWRUZXh0LnNpemUoKSksIGVjKTsKLSAg
ICBWZWN0b3I8eG1sQ2hhcj4gZW1wdHk7Ci0gICAgbV9idWZmZXJlZFRleHQuc3dhcChlbXB0eSk7
Ci0jZW5kaWYKLQotICAgIGlmIChtX3ZpZXcgJiYgIW1fbGVhZlRleHROb2RlLT5hdHRhY2hlZCgp
KQotICAgICAgICBtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoKCk7Ci0KLSAgICBtX2xlYWZUZXh0Tm9k
ZSA9IDA7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCgpCi17Ci0gICAgY2xl
YXJDdXJyZW50Tm9kZVN0YWNrKCk7Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpkZXRh
Y2goKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAgICAvLyBYTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIgd2lsbCBkbyBiYWQgdGhpbmdzIHRvIHRoZSBkb2N1bWVudCBp
ZiBkb0VuZCgpIGlzIGNhbGxlZC4KLSAgICAvLyBJIGRvbid0IGJlbGlldmUgWE1MRG9jdW1lbnRQ
YXJzZXJRdCBuZWVkcyBkb0VuZCBjYWxsZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuCi0gICAgQVNT
RVJUKCFtX3BhcnNpbmdGcmFnbWVudCk7Ci0KLSAgICBkb0VuZCgpOwotCi0gICAgLy8gZG9FbmQo
KSBjb3VsZCBwcm9jZXNzIGEgc2NyaXB0IHRhZywgdGh1cyBwYXVzaW5nIHBhcnNpbmcuCi0gICAg
aWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zYXdFcnJv
cikKLSAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgZXhpdFRleHQoKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQo
UmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAgfQotCi0gICAgaWYgKGlzUGFyc2luZygpKQot
ICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygpOwotICAgIGRvY3VtZW50KCktPnNldFJlYWR5
U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsKLSAgICBjbGVhckN1cnJlbnROb2RlU3RhY2so
KTsKLSAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCgh
bV9wYXJzZXJTdG9wcGVkKSBoZXJlLCBzaW5jZSBpdCBkb2VzIG5vdAotICAgIC8vIG1ha2VzIHNl
bnNlIHRvIGNhbGwgYW55IG1ldGhvZHMgb24gRG9jdW1lbnRQYXJzZXIgb25jZSBpdCdzIGJlZW4g
c3RvcHBlZC4KLSAgICAvLyBIb3dldmVyLCBGcmFtZUxvYWRlcjo6c3RvcCBjYWxscyBEb2N1bWVu
dFBhcnNlcjo6ZmluaXNoIHVuY29uZGl0aW9uYWxseS4KLQotICAgIGlmIChtX3BhcnNlclBhdXNl
ZCkKLSAgICAgICAgbV9maW5pc2hDYWxsZWQgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgZW5k
KCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCi17Ci0g
ICAgcmV0dXJuIG1fZmluaXNoQ2FsbGVkOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxFbGVt
ZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlcykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxlbWVu
dCA9IGRvYy0+Y3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAicGFyc2VyZXJy
b3IiLCB4aHRtbE5hbWVzcGFjZVVSSSksIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNlOiBwcmU7IGJv
cmRlcjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJnaW46IDFlbTsg
YmFja2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6IGJsYWNrIik7Ci0KLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gaDMgPSBkb2MtPmNyZWF0ZUVsZW1lbnQo
aDNUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChoMy5nZXQoKSwg
ZWMpOwotICAgIGgzLT5hcHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKCJUaGlzIHBhZ2Ug
Y29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6IiksIGVjKTsKLQotICAgIFJlZlB0cjxFbGVt
ZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKLSAgICByZXBv
cnRFbGVtZW50LT5hcHBlbmRDaGlsZChmaXhlZC5nZXQoKSwgZWMpOwotICAgIGZpeGVkLT5zZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4
Iik7Ci0gICAgZml4ZWQtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoZXJyb3JNZXNz
YWdlcyksIGVjKTsKLQotICAgIGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7
Ci0gICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKLSAgICBoMy0+
YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiQmVsb3cgaXMgYSByZW5kZXJpbmcgb2Yg
dGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9yLiIpLCBlYyk7Ci0KLSAgICByZXR1cm4gcmVw
b3J0RWxlbWVudDsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JNZXNz
YWdlQmxvY2soKQotewotI2lmIFVTRShRWE1MU1RSRUFNKQotICAgIGlmIChtX3BhcnNpbmdGcmFn
bWVudCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgLy8gT25lIG9yIG1vcmUgZXJyb3Jz
IG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjb2RlLiBEaXNwbGF5IGFuIGVycm9yIGJs
b2NrIHRvIHRoZSB1c2VyIGFib3ZlCi0gICAgLy8gdGhlIG5vcm1hbCBjb250ZW50ICh0aGUgRE9N
IHRyZWUgaXMgY3JlYXRlZCBtYW51YWxseSBhbmQgaW5jbHVkZXMgbGluZS9jb2wgaW5mbyByZWdh
cmRpbmcKLSAgICAvLyB3aGVyZSB0aGUgZXJyb3JzIGFyZSBsb2NhdGVkKQotCi0gICAgLy8gQ3Jl
YXRlIGVsZW1lbnRzIGZvciBkaXNwbGF5Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVu
dCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKLSAgICAgICAgZG9j
dW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7Ci0gICAgICAgIFJlZlB0cjxFbGVt
ZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwotICAg
ICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBkb2N1bWVu
dEVsZW1lbnQgPSBib2R5LmdldCgpOwotICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGVsc2Ug
aWYgKGRvY3VtZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSkgewotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50
PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwotICAgICAg
ICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBib2R5LT5hcHBl
bmRDaGlsZChkb2N1bWVudEVsZW1lbnQsIGVjKTsKLSAgICAgICAgZG9jdW1lbnQtPmFwcGVuZENo
aWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Ci0gICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJv
ZHkuZ2V0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1l
bnQgPSBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKGRvY3VtZW50LCBtX2Vycm9yTWVzc2Fn
ZXMpOwotICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRv
Y3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAg
aWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChwVGFnLCBmYWxz
ZSk7Ci0gICAgICAgIHBhcmFncmFwaC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIndoaXRlLXNw
YWNlOiBub3JtYWwiKTsKLSAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZChkb2N1bWVudC0+
Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBv
ZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBnaXZl
biBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpLCBlYyk7Ci0gICAgICAgIHJlcG9y
dEVsZW1lbnQtPmFwcGVuZENoaWxkKHBhcmFncmFwaC5yZWxlYXNlKCksIGVjKTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotfQotCi12b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogdW51c2VkUmVz
b3VyY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51c2VkUmVzb3Vy
Y2UgPT0gbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wZW5kaW5nU2NyaXB0LT5hY2Nl
c3NDb3VudCgpID4gMCk7Ci0KLSAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUobV9wZW5k
aW5nU2NyaXB0LmdldCgpKTsKLSAgICBib29sIGVycm9yT2NjdXJyZWQgPSBtX3BlbmRpbmdTY3Jp
cHQtPmVycm9yT2NjdXJyZWQoKTsKLSAgICBib29sIHdhc0NhbmNlbGVkID0gbV9wZW5kaW5nU2Ny
aXB0LT53YXNDYW5jZWxlZCgpOwotCi0gICAgbV9wZW5kaW5nU2NyaXB0LT5yZW1vdmVDbGllbnQo
dGhpcyk7Ci0gICAgbV9wZW5kaW5nU2NyaXB0ID0gMDsKLQotICAgIFJlZlB0cjxFbGVtZW50PiBl
ID0gbV9zY3JpcHRFbGVtZW50OwotICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0KLSAgICBTY3Jp
cHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGUuZ2V0KCkpOwotICAg
IEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLQotICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0
aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2VwdCBhbGl2ZSBldmVuIGlmIGRldGFjaGVkLgot
ICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKLSAgICAKLSAgICBp
ZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hFcnJvckV2
ZW50KCk7Ci0gICAgZWxzZSBpZiAoIXdhc0NhbmNlbGVkKSB7Ci0gICAgICAgIHNjcmlwdEVsZW1l
bnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgIHNjcmlwdEVsZW1lbnQtPmRp
c3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLQot
ICAgIGlmICghaXNEZXRhY2hlZCgpICYmICFtX3JlcXVlc3RpbmdTY3JpcHQpCi0gICAgICAgIHJl
c3VtZVBhcnNpbmcoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9y
U2NyaXB0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1NjcmlwdDsKLX0KLQotdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJzaW5nKCkKLXsKLSAgICBpZiAobV9wYXJzaW5n
RnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyc2VyUGF1c2VkID0gdHJ1ZTsK
LX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0
IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250
ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Np
b24pCi17Ci0gICAgaWYgKCFjaHVuay5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIEhUTUw1IFhNTCBGcmFnbWVu
dCBwYXJzaW5nIGFsZ29yaXRobToKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUteGh0bWwtc3ludGF4Lmh0bWwjeG1s
LWZyYWdtZW50LXBhcnNpbmctYWxnb3JpdGhtCi0gICAgLy8gRm9yIG5vdyB3ZSBoYXZlIGEgaGFj
ayBmb3Igc2NyaXB0L3N0eWxlIGlubmVySFRNTCBzdXBwb3J0OgotICAgIGlmIChjb250ZXh0RWxl
bWVudCAmJiAoY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRh
ZykgfHwgY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkp
IHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlckFkZENoaWxkKGZyYWdtZW50LT5kb2N1bWVudCgp
LT5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IFhNTERvY3VtZW50UGFyc2Vy
OjpjcmVhdGUoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsK
LSAgICBib29sIHdlbGxGb3JtZWQgPSBwYXJzZXItPmFwcGVuZEZyYWdtZW50U291cmNlKGNodW5r
KTsKLSAgICAvLyBEbyBub3QgY2FsbCBmaW5pc2goKS4gIEN1cnJlbnQgZmluaXNoKCkgYW5kIGRv
RW5kKCkgaW1wbGVtZW50YXRpb25zIHRvdWNoIHRoZSBtYWluIERvY3VtZW50L2xvYWRlcgotICAg
IC8vIGFuZCBjYW4gY2F1c2UgY3Jhc2hlcyBpbiB0aGUgZnJhZ21lbnQgY2FzZS4KLSAgICBwYXJz
ZXItPmRldGFjaCgpOyAvLyBBbGxvd3MgfkRvY3VtZW50UGFyc2VyIHRvIGFzc2VydCBpdCB3YXMg
ZGV0YWNoZWQgYmVmb3JlIGRlc3RydWN0aW9uLgotICAgIHJldHVybiB3ZWxsRm9ybWVkOyAvLyBh
cHBlbmRGcmFnbWVudFNvdXJjZSgpJ3Mgd2VsbEZvcm1lZCBpcyBtb3JlIHBlcm1pc3NpdmUgdGhh
biB3ZWxsRm9ybWVkKCkuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNh
Y2RkMjVjNTVkYzAzNWI4ZjMyYTc0MTc1YTQ2ZDk4OWVlYjI3NWMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBY
TUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKLQotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKLSNpbmNsdWRl
ICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi0jaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgotI2Vs
c2UKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRhaW5lck5vZGU7
Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNz
IERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFz
cyBGcmFtZVZpZXc7Ci1jbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOwotY2xhc3MgVGV4dDsKLQotI2lm
ICFVU0UoUVhNTFNUUkVBTSkKLSAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJl
ZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhh
bmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4
bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7Ci0gICAgICAgIH5YTUxQYXJzZXJDb250
ZXh0KCk7Ci0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4
bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCi0gICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRl
eHQ7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJs
aWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQg
ewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKLSAgICAgICAg
fQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlz
c2lvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7Ci0KLSAg
ICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tzOgotICAgICAgICBlbnVtIEVycm9yVHlwZSB7
IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9OwotICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVy
cm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5O
dW1iZXIpOwotICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7Ci0KLSAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1l
bnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQotICAgICAg
ICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50
OyB9Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1l
bnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9Ci0gICAg
ICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERv
Y3VtZW50OyB9Ci0jZW5kaWYKLQotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9
IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dl
ZCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5
IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KLSAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQo
KSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQotCi0gICAgICAgIFRleHRQb3NpdGlvbjAg
dGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9u
T25lQmFzZWQoKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNp
b24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBYTUxEb2N1bWVudFBh
cnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24pOwotCi0gICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKLSAgICAgICAgdmlydHVhbCB2
b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzdG9wUGFyc2luZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0g
ICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAgICAgaW50IGNvbHVt
bk51bWJlcigpIGNvbnN0OwotCi0gICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQK
LSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0K
LSAgICAgICAgdm9pZCBlbmQoKTsKLQotICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOwotICAg
ICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKLQotICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50
U291cmNlKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi1wcml2YXRlOgot
ICAgICAgICB2b2lkIHBhcnNlKCk7Ci0gICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOwotICAg
ICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VFbmRFbGVt
ZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQgcGFy
c2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7Ci0g
ICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsK
LSAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOwotICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7
Ci0jZWxzZQotcHVibGljOgotICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCi0g
ICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0
IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOwotICAgICAgICB2b2lkIHN0YXJ0RWxl
bWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJl
Zml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0
cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0
ZXMpOwotICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOwotICAgICAgICB2b2lkIGNoYXJhY3Rl
cnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc2luZ0lu
c3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7Ci0g
ICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKLSAgICAg
ICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOwotICAgICAgICB2b2lkIHN0YXJ0RG9j
dW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGlu
dCBzdGFuZGFsb25lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFy
KiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1J
RCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKLSNlbmRpZgotICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsg
PSBDU3RyaW5nKCkpOwotCi0gICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5v
ZGUqKTsKLSAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICB2b2lkIGNsZWFy
Q3VycmVudE5vZGVTdGFjaygpOwotCi0gICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxv
Y2soKTsKLQotICAgICAgICB2b2lkIGVudGVyVGV4dCgpOwotICAgICAgICB2b2lkIGV4aXRUZXh0
KCk7Ci0KLSAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2b2lk
IGRvRW5kKCk7Ci0KLSAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7Ci0KLSAgICAgICAgU3RyaW5n
IG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07Ci0KLSNpZiBVU0UoUVhNTFNUUkVBTSkKLSAg
ICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKLSAgICAgICAgYm9vbCBtX3dyb3RlVGV4
dDsKLSNlbHNlCi0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKLSAgICAgICAgUmVm
UHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdD
YWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKLSAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1f
YnVmZmVyZWRUZXh0OwotI2VuZGlmCi0gICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5v
ZGU7Ci0gICAgICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOwot
Ci0gICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKLQotICAgICAgICBib29sIG1f
c2F3RXJyb3I7Ci0gICAgICAgIGJvb2wgbV9zYXdDU1M7Ci0gICAgICAgIGJvb2wgbV9zYXdYU0xU
cmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAgICAgIGJvb2wg
bV9pc1hIVE1MRG9jdW1lbnQ7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGJvb2wgbV9p
c1hIVE1MTVBEb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsK
LSNlbmRpZgotCi0gICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7Ci0gICAgICAgIGJvb2wgbV9y
ZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOwotCi0gICAgICAg
IGludCBtX2Vycm9yQ291bnQ7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3Np
dGlvbjsKLSAgICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKLQotICAgICAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKLSAgICAgICAgUmVm
UHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb247Ci0KLSAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKLSAg
ICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKLQotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFj
ZU1hcDsKLSAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VN
YXA7Ci0gICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7Ci0gICAgICAgIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Ci0gICAgfTsKLQot
I2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNl
TG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKLSNlbmRp
ZgotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5n
JiwgYm9vbCYgYXR0cnNPSyk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZjM5ZmI0
ZWM3ZGVlMDcwYTgzNTE1YWUwYzRmNDEwZjZiNzI4NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgPHBta0Bwb3N0LmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkNE
QVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1l
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCi0jaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCi0jaW5jbHVkZSAiWE1M
TlNOYW1lcy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKLSNpbmNsdWRl
IDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShYU0xUKQotI2luY2x1
ZGUgIlhNTFRyZWVWaWV3ZXIuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0jaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNl
bmRpZgotCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVuZGlu
Z0NhbGxiYWNrcyk7Ci1wdWJsaWM6Ci0gICAgflBlbmRpbmdDYWxsYmFja3MoKSB7IH0KLSAgICBz
dGF0aWMgUGFzc093blB0cjxQZW5kaW5nQ2FsbGJhY2tzPiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2FsbGJhY2tzKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBhcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHhtbExv
Y2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkks
IGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNlcywgaW50IG5iX2F0dHJpYnV0ZXMsIGludCBuYl9k
ZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBhdHRyaWJ1dGVzKQotICAgIHsKLSAgICAgICAgT3du
UHRyPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5l
dyBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnht
bExvY2FsTmFtZSA9IHhtbFN0cmR1cCh4bWxMb2NhbE5hbWUpOwotICAgICAgICBjYWxsYmFjay0+
eG1sUHJlZml4ID0geG1sU3RyZHVwKHhtbFByZWZpeCk7Ci0gICAgICAgIGNhbGxiYWNrLT54bWxV
UkkgPSB4bWxTdHJkdXAoeG1sVVJJKTsKLSAgICAgICAgY2FsbGJhY2stPm5iX25hbWVzcGFjZXMg
PSBuYl9uYW1lc3BhY2VzOwotICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlcyA9IHN0YXRpY19j
YXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9uYW1lc3BhY2Vz
ICogMikpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX25hbWVzcGFjZXMgKiAyIDsg
aSsrKQotICAgICAgICAgICAgY2FsbGJhY2stPm5hbWVzcGFjZXNbaV0gPSB4bWxTdHJkdXAobmFt
ZXNwYWNlc1tpXSk7Ci0gICAgICAgIGNhbGxiYWNrLT5uYl9hdHRyaWJ1dGVzID0gbmJfYXR0cmli
dXRlczsKLSAgICAgICAgY2FsbGJhY2stPm5iX2RlZmF1bHRlZCA9IG5iX2RlZmF1bHRlZDsKLSAg
ICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXMgPSBzdGF0aWNfY2FzdDx4bWxDaGFyKio+KHhtbE1h
bGxvYyhzaXplb2YoeG1sQ2hhciopICogbmJfYXR0cmlidXRlcyAqIDUpKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAgICAgIC8vIEVh
Y2ggYXR0cmlidXRlIGhhcyA1IGVsZW1lbnRzIGluIHRoZSBhcnJheToKLSAgICAgICAgICAgIC8v
IG5hbWUsIHByZWZpeCwgdXJpLCB2YWx1ZSBhbmQgYW4gZW5kIHBvaW50ZXIuCi0KLSAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQotICAgICAgICAgICAgICAgIGNhbGxiYWNr
LT5hdHRyaWJ1dGVzW2kgKiA1ICsgal0gPSB4bWxTdHJkdXAoYXR0cmlidXRlc1tpICogNSArIGpd
KTsKLQotICAgICAgICAgICAgaW50IGxlbiA9IGF0dHJpYnV0ZXNbaSAqIDUgKyA0XSAtIGF0dHJp
YnV0ZXNbaSAqIDUgKyAzXTsKLQotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAq
IDUgKyAzXSA9IHhtbFN0cm5kdXAoYXR0cmlidXRlc1tpICogNSArIDNdLCBsZW4pOwotICAgICAg
ICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyA0XSA9IGNhbGxiYWNrLT5hdHRyaWJ1
dGVzW2kgKiA1ICsgM10gKyBsZW47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2NhbGxiYWNrcy5h
cHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEVuZEVs
ZW1lbnROU0NhbGxiYWNrKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChhZG9w
dFB0cihuZXcgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKLSAg
ICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrPiBjYWxsYmFjayA9
IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKTsKLQotICAgICAgICBjYWxs
YmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsKLSAgICAgICAgY2FsbGJhY2stPmxlbiA9IGxl
bjsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKGNvbnN0
IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKLSAgICB7Ci0gICAgICAgIE93
blB0cjxQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRQdHIobmV3IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk7Ci0KLSAgICAg
ICAgY2FsbGJhY2stPnRhcmdldCA9IHhtbFN0cmR1cCh0YXJnZXQpOwotICAgICAgICBjYWxsYmFj
ay0+ZGF0YSA9IHhtbFN0cmR1cChkYXRhKTsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQo
Y2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENEQVRBQmxvY2tD
YWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotICAgIHsKLSAgICAgICAgT3duUHRy
PFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRp
bmdDREFUQUJsb2NrQ2FsbGJhY2spOwotCi0gICAgICAgIGNhbGxiYWNrLT5zID0geG1sU3RybmR1
cChzLCBsZW4pOwotICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVuOwotCi0gICAgICAgIG1fY2Fs
bGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBw
ZW5kQ29tbWVudENhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMpCi0gICAgewotICAgICAgICBPd25Q
dHI8UGVuZGluZ0NvbW1lbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGlu
Z0NvbW1lbnRDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxTdHJkdXAocyk7
Ci0KLSAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBhcHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKGNvbnN0IHhtbENoYXIq
IG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlE
KQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjayk7Ci0K
LSAgICAgICAgY2FsbGJhY2stPm5hbWUgPSB4bWxTdHJkdXAobmFtZSk7Ci0gICAgICAgIGNhbGxi
YWNrLT5leHRlcm5hbElEID0geG1sU3RyZHVwKGV4dGVybmFsSUQpOwotICAgICAgICBjYWxsYmFj
ay0+c3lzdGVtSUQgPSB4bWxTdHJkdXAoc3lzdGVtSUQpOwotCi0gICAgICAgIG1fY2FsbGJhY2tz
LmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kRXJy
b3JDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHhtbENo
YXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQotICAgIHsKLSAg
ICAgICAgT3duUHRyPFBlbmRpbmdFcnJvckNhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5l
dyBQZW5kaW5nRXJyb3JDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm1lc3NhZ2UgPSB4
bWxTdHJkdXAobWVzc2FnZSk7Ci0gICAgICAgIGNhbGxiYWNrLT50eXBlID0gdHlwZTsKLSAgICAg
ICAgY2FsbGJhY2stPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBjYWxsYmFjay0+
Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotCi0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbEFuZFJlbW92ZUZp
cnN0Q2FsbGJhY2soWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICB7Ci0gICAgICAgIE93
blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7
Ci0gICAgICAgIGNhbGxiYWNrLT5jYWxsKHBhcnNlcik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuaXNFbXB0eSgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgUGVuZGluZ0NhbGxiYWNrcygpIHsgfQotCi0gICAgc3RydWN0IFBlbmRpbmdDYWxsYmFj
ayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDYWxsYmFjaygpIHsgfQotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKSA9IDA7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5n
Q2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFj
aygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sTG9jYWxOYW1lKTsKLSAgICAg
ICAgICAgIHhtbEZyZWUoeG1sUHJlZml4KTsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sVVJJKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAqIDI7IGkrKykK
LSAgICAgICAgICAgICAgICB4bWxGcmVlKG5hbWVzcGFjZXNbaV0pOwotICAgICAgICAgICAgeG1s
RnJlZShuYW1lc3BhY2VzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0
cmlidXRlczsgaSsrKQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisr
KQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXNbaSAqIDUgKyBqXSk7Ci0g
ICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcGFyc2VyLT5zdGFydEVsZW1lbnROcyh4bWxMb2NhbE5hbWUsIHhtbFByZWZpeCwg
eG1sVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9uYW1lc3Bh
Y2VzLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4obmFtZXNwYWNlcyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5iX2RlZmF1bHRlZCwg
Y29uc3RfY2FzdDxjb25zdCB4bWxDaGFyKio+KGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHhtbENoYXIqIHhtbExvY2FsTmFtZTsKLSAgICAgICAgeG1sQ2hhciogeG1sUHJlZml4
OwotICAgICAgICB4bWxDaGFyKiB4bWxVUkk7Ci0gICAgICAgIGludCBuYl9uYW1lc3BhY2VzOwot
ICAgICAgICB4bWxDaGFyKiogbmFtZXNwYWNlczsKLSAgICAgICAgaW50IG5iX2F0dHJpYnV0ZXM7
Ci0gICAgICAgIGludCBuYl9kZWZhdWx0ZWQ7Ci0gICAgICAgIHhtbENoYXIqKiBhdHRyaWJ1dGVz
OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrIDogcHVi
bGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3Vt
ZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+ZW5kRWxl
bWVudE5zKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IFBlbmRpbmdDaGFyYWN0
ZXJzQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmlydHVhbCB+
UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZy
ZWUocyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVu
dFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXItPmNoYXJhY3Rl
cnMocywgbGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0gICAgICAgIGlu
dCBsZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9u
Q2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmlydHVhbCB+UGVu
ZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgeG1sRnJlZSh0YXJnZXQpOwotICAgICAgICAgICAgeG1sRnJlZShkYXRhKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+cHJvY2Vzc2luZ0luc3RydWN0aW9uKHRh
cmdldCwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiB0YXJnZXQ7Ci0gICAg
ICAgIHhtbENoYXIqIGRhdGE7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nQ0RBVEFCbG9j
a0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBl
bmRpbmdDREFUQUJsb2NrQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB4bWxGcmVl
KHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQ
YXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLT5jZGF0YUJsb2Nr
KHMsIGxlbik7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiBzOwotICAgICAgICBpbnQg
bGVuOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0NvbW1lbnRDYWxsYmFjayA6IHB1Ymxp
YyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nQ29tbWVudENhbGxi
YWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgeG1sRnJlZShzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+Y29tbWVudChzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHhtbENoYXIqIHM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nSW50ZXJuYWxTdWJz
ZXRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5Q
ZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHht
bEZyZWUobmFtZSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGV4dGVybmFsSUQpOwotICAgICAgICAg
ICAgeG1sRnJlZShzeXN0ZW1JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBw
YXJzZXItPmludGVybmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHhtbENoYXIqIG5hbWU7Ci0gICAgICAgIHhtbENoYXIqIGV4dGVybmFs
SUQ7Ci0gICAgICAgIHhtbENoYXIqIHN5c3RlbUlEOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVu
ZGluZ0Vycm9yQ2FsbGJhY2s6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0
dWFsIH5QZW5kaW5nRXJyb3JDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZy
ZWUobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxE
b2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXItPmhh
bmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2UpLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXI6OkVycm9yVHlwZSB0eXBlOwotICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwotICAgICAgICBp
bnQgbGluZU51bWJlcjsKLSAgICAgICAgaW50IGNvbHVtbk51bWJlcjsKLSAgICB9OwotCi0gICAg
RGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKLX07Ci0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW50IGdsb2JhbERlc2NyaXB0
b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9hZGVyVGhyZWFkID0gMDsK
LQotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCi17Ci0gICAgLy8gT25seSBtYXRj
aCBsb2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdpdGhpbiBYTUxE
b2N1bWVudFBhcnNlciB0byBhdm9pZAotICAgIC8vIGludGVyZmVyaW5nIHdpdGggY2xpZW50IGFw
cGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJldHVybiBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
OjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIgJiYgY3VycmVudFRocmVhZCgpID09IGxpYnht
bExvYWRlclRocmVhZDsKLX0KLQotY2xhc3MgT2Zmc2V0QnVmZmVyIHsKLXB1YmxpYzoKLSAgICBP
ZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBiKSA6IG1fYnVmZmVyKGIpLCBtX2N1cnJl
bnRPZmZzZXQoMCkgeyB9Ci0KLSAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIqIG91dHB1dEJ1ZmZl
ciwgdW5zaWduZWQgYXNrZWRUb1JlYWQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBieXRlc0xl
ZnQgPSBtX2J1ZmZlci5zaXplKCkgLSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IGxlblRvQ29weSA9IG1pbihhc2tlZFRvUmVhZCwgYnl0ZXNMZWZ0KTsKLSAgICAgICAgaWYgKGxl
blRvQ29weSkgewotICAgICAgICAgICAgbWVtY3B5KG91dHB1dEJ1ZmZlciwgbV9idWZmZXIuZGF0
YSgpICsgbV9jdXJyZW50T2Zmc2V0LCBsZW5Ub0NvcHkpOwotICAgICAgICAgICAgbV9jdXJyZW50
T2Zmc2V0ICs9IGxlblRvQ29weTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGVuVG9Db3B5
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7Ci0gICAgdW5z
aWduZWQgbV9jdXJyZW50T2Zmc2V0OwotfTsKLQotc3RhdGljIHZvaWQgc3dpdGNoVG9VVEYxNih4
bWxQYXJzZXJDdHh0UHRyIGN0eHQpCi17Ci0gICAgLy8gSGFjayBhcm91bmQgbGlieG1sMidzIGxh
Y2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1hbnVhbGx5Ci0gICAgLy8gcmVzZXR0
aW5nIHRoZSBlbmNvZGluZyB0byBVVEYtMTYgYmVmb3JlIGV2ZXJ5IGNodW5rLiAgT3RoZXJ3aXNl
IGxpYnhtbAotICAgIC8vIHdpbGwgZGV0ZWN0IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IjxlbmNvZGluZyBuYW1lPiI/PiBibG9ja3MKLSAgICAvLyBhbmQgc3dpdGNoIGVuY29kaW5ncywg
Y2F1c2luZyB0aGUgcGFyc2UgdG8gZmFpbC4KLSAgICBjb25zdCBVQ2hhciBCT00gPSAweEZFRkY7
Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0
LCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRSA6IFhNTF9D
SEFSX0VOQ09ESU5HX1VURjE2QkUpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRBbGxvd0V4dGVy
bmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5z
dHJpbmcoKTsKLQotICAgIC8vIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBsaWJ4bWwgYXNrcyBm
b3IgdGhpcyBVUkwsIHRoZQotICAgIC8vICJYTUxfWE1MX0RFRkFVTFRfQ0FUQUxPRyIsIG9uIGlu
aXRpYWxpemF0aW9uLgotICAgIGlmICh1cmxTdHJpbmcgPT0gImZpbGU6Ly8vZXRjL3htbC9jYXRh
bG9nIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT24gV2luZG93cywgbGlieG1s
IGNvbXB1dGVzIGEgVVJMIHJlbGF0aXZlIHRvIHdoZXJlIGl0cyBETEwgcmVzaWRlcy4KLSAgICBp
ZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIiwgZmFsc2UpICYmIHVybFN0cmluZy5l
bmRzV2l0aCgiL2V0Yy9jYXRhbG9nIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBUaGUgbW9zdCBjb21tb24gRFRELiAgVGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiBo
YW1tZXJpbmcgd3d3LnczYy5vcmcKLSAgICAvLyBieSByZXF1ZXN0aW5nIHRoaXMgVVJMIGZvciBl
dmVyeSBYSFRNTCBkb2N1bWVudC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6
Ly93d3cudzMub3JnL1RSL3hodG1sIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBTaW1pbGFybHksIHRoZXJlIGlzbid0IG11Y2ggcG9pbnQgaW4gcmVxdWVzdGluZyB0
aGUgU1ZHIERURC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cudzMu
b3JnL0dyYXBoaWNzL1NWRyIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gVGhlIGxpYnhtbCBkb2Vzbid0IGdpdmUgdXMgYSBsb3Qgb2YgY29udGV4dCBmb3IgZGVjaWRp
bmcgd2hldGhlciB0bwotICAgIC8vIGFsbG93IHRoaXMgcmVxdWVzdC4gIEluIHRoZSB3b3JzdCBj
YXNlLCB0aGlzIGxvYWQgY291bGQgYmUgZm9yIGFuCi0gICAgLy8gZXh0ZXJuYWwgZW50aXR5IGFu
ZCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGNvdWxkIHNpbXBseSByZWFkIHRoZQotICAgIC8vIHJl
dHJpZXZlZCBjb250ZW50LiAgSWYgd2UgaGFkIG1vcmUgY29udGV4dCwgd2UgY291bGQgcG90ZW50
aWFsbHkgYWxsb3cKLSAgICAvLyB0aGUgcGFyc2VyIHRvIGxvYWQgYSBEVEQuICBBcyB0aGluZ3Mg
c3RhbmQsIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIHJvdXRlIGFuZCBhbGxvdyBz
YW1lLW9yaWdpbiByZXF1ZXN0cyBvbmx5LgotICAgIGlmICghWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6
Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJs
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQotewotICAgIEFTU0VSVChY
TUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsKLQotICAgIEtV
UkwgdXJsKEtVUkwoKSwgdXJpKTsKLQotICAgIGlmICghc2hvdWxkQWxsb3dFeHRlcm5hbExvYWQo
dXJsKSkKLSAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOwotCi0gICAgUmVzb3VyY2VF
cnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOwotCi0KLSAgICB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRS
ZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZSgwKTsK
LSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIHRoZSBvcmlnaW5hbCBnbG9iYWwg
ZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgotCi0gICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZUxvYWRl
ci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2ZSB0
byBjaGVjayB0aGUgVVJMIGFnYWluIGFmdGVyIHRoZSBsb2FkIHRvIGNhdGNoIHJlZGlyZWN0cy4K
LSAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
Mz4uCi0gICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZChyZXNwb25zZS51cmwoKSkpCi0g
ICAgICAgIHJldHVybiAmZ2xvYmFsRGVzY3JpcHRvcjsKLQotICAgIHJldHVybiBuZXcgT2Zmc2V0
QnVmZmVyKGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJlYWRGdW5jKHZvaWQqIGNvbnRleHQsIGNo
YXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICAvLyBEbyAwLWJ5dGUgcmVhZHMgaW4gY2FzZSBv
ZiBhIG51bGwgZGVzY3JpcHRvcgotICAgIGlmIChjb250ZXh0ID09ICZnbG9iYWxEZXNjcmlwdG9y
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE9mZnNldEJ1ZmZlciogZGF0YSA9IHN0YXRpY19j
YXN0PE9mZnNldEJ1ZmZlcio+KGNvbnRleHQpOwotICAgIHJldHVybiBkYXRhLT5yZWFkT3V0Qnl0
ZXMoYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHdyaXRlRnVuYyh2b2lkKiwgY29uc3Qg
Y2hhciosIGludCkKLXsKLSAgICAvLyBBbHdheXMganVzdCBkbyAwLWJ5dGUgd3JpdGVzCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xvc2VGdW5jKHZvaWQqIGNvbnRleHQpCi17Ci0g
ICAgaWYgKGNvbnRleHQgIT0gJmdsb2JhbERlc2NyaXB0b3IpIHsKLSAgICAgICAgT2Zmc2V0QnVm
ZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7Ci0gICAgICAg
IGRlbGV0ZSBkYXRhOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShYU0xU
KQotc3RhdGljIHZvaWQgZXJyb3JGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgLi4uKQotewotICAg
IC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMgc29t
ZXdoZXJlLgotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGRpZEluaXQgPSBmYWxzZTsKLQotUGFz
c1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQ
YXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAg
aWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAgICAgICAgeG1sUmVn
aXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywgY2xvc2VG
dW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVu
RnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQg
PSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwotICAgIH0KLQotICAg
IHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoaGFuZGxl
cnMsIDAsIDAsIDAsIDApOwotICAgIHBhcnNlci0+X3ByaXZhdGUgPSB1c2VyRGF0YTsKLSAgICBw
YXJzZXItPnJlcGxhY2VFbnRpdGllcyA9IHRydWU7Ci0gICAgc3dpdGNoVG9VVEYxNihwYXJzZXIp
OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBhcnNlcikpOwot
fQotCi0KLS8vIENodW5rIHNob3VsZCBiZSBlbmNvZGVkIGluIFVURi04Ci1QYXNzUmVmUHRyPFhN
TFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcih4bWxT
QVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgQ1N0cmluZyYgY2h1
bmspCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAg
ICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFk
RnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0
Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxM
b2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwot
ICAgIH0KLQotICAgIC8vIGFwcGVuZEZyYWdtZW50U291cmNlKCkgY2hlY2tzIHRoYXQgdGhlIGxl
bmd0aCBkb2Vzbid0IG92ZXJmbG93IGFuIGludC4KLSAgICB4bWxQYXJzZXJDdHh0UHRyIHBhcnNl
ciA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoY2h1bmsuZGF0YSgpLCBjaHVuay5sZW5ndGgo
KSk7Ci0KLSAgICBpZiAoIXBhcnNlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDb3B5
IHRoZSBzYXggaGFuZGxlcgotICAgIG1lbWNweShwYXJzZXItPnNheCwgaGFuZGxlcnMsIHNpemVv
Zih4bWxTQVhIYW5kbGVyKSk7Ci0KLSAgICAvLyBTZXQgcGFyc2VyIG9wdGlvbnMuCi0gICAgLy8g
WE1MX1BBUlNFX05PRElDVDogZGVmYXVsdCBkaWN0aW9uYXJ5IG9wdGlvbi4KLSAgICAvLyBYTUxf
UEFSU0VfTk9FTlQ6IGZvcmNlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMuCi0gICAgeG1sQ3R4dFVz
ZU9wdGlvbnMocGFyc2VyLCBYTUxfUEFSU0VfTk9ESUNUIHwgWE1MX1BBUlNFX05PRU5UKTsKLQot
ICAgIC8vIEludGVybmFsIGluaXRpYWxpemF0aW9uCi0gICAgcGFyc2VyLT5zYXgyID0gMTsKLSAg
ICBwYXJzZXItPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7IC8vIFdlIGFyZSBwYXJzaW5n
IGEgQ09OVEVOVAotICAgIHBhcnNlci0+ZGVwdGggPSAwOwotICAgIHBhcnNlci0+c3RyX3htbCA9
IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sIiwgMyk7Ci0gICAgcGFy
c2VyLT5zdHJfeG1sbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgQkFEX0NBU1QgInht
bG5zIiwgNSk7Ci0gICAgcGFyc2VyLT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1cChwYXJzZXIt
PmRpY3QsIFhNTF9YTUxfTkFNRVNQQUNFLCAzNik7Ci0gICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVz
ZXJEYXRhOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBhcnNl
cikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIFhN
TERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQotewotICAgIHJldHVybiB2ZXJzaW9uID09ICIxLjAiOwotfQotCi1YTUxEb2N1bWVudFBhcnNl
cjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1l
VmlldykKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkKLSAgICAsIG1f
dmlldyhmcmFtZVZpZXcpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fcGVuZGluZ0NhbGxi
YWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKLSAgICAsIG1fY3VycmVudE5vZGUoZG9j
dW1lbnQpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQotICAgICwgbV9zYXdDU1MoZmFsc2UpCi0g
ICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKLSAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZh
bHNlKQotICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCi0jaWYgRU5BQkxFKFhIVE1MTVAp
Ci0gICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQotICAgICwgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24oZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQotICAg
ICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQotICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2Up
Ci0gICAgLCBtX2Vycm9yQ291bnQoMCkKLSAgICAsIG1fbGFzdEVycm9yUG9zaXRpb24oVGV4dFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkK
LSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9z
aXRpb24oKSkKLSAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRp
bmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLX0KLQotWE1MRG9jdW1l
bnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBF
bGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0
aW5nUGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV9jb250ZXh0KDApCi0gICAgLCBt
X3BlbmRpbmdDYWxsYmFja3MoUGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKCkpCi0gICAgLCBtX2N1
cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3
Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0Zp
cnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVO
QUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1f
aGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNl
ZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNo
Q2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBv
c2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5k
aW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAg
ICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZnJh
Z21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVu
dCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVu
dEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQot
ICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOwot
ICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAg
IH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFzdCgpOyAhZWxlbVN0YWNrLmlz
RW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewotICAgICAgICBpZiAoTmFtZWROb2Rl
TWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9PSB4bWxuc0F0b20pCi0gICAgICAgICAgICAg
ICAgICAgIG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuc2V0KGF0dHItPmxvY2FsTmFtZSgpLCBhdHRy
LT52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElm
IHRoZSBwYXJlbnQgZWxlbWVudCBpcyBub3QgaW4gZG9jdW1lbnQgdHJlZSwgdGhlcmUgbWF5IGJl
IG5vIHhtbG5zIGF0dHJpYnV0ZTsganVzdCBkZWZhdWx0IHRvIHRoZSBwYXJlbnQncyBuYW1lc3Bh
Y2UuCi0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFjZVVSSS5pc051bGwoKSAmJiAhcGFyZW50RWxl
bWVudC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBwYXJl
bnRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0KLQotWE1MUGFyc2VyQ29udGV4dDo6flhNTFBh
cnNlckNvbnRleHQoKQotewotICAgIGlmIChtX2NvbnRleHQtPm15RG9jKQotICAgICAgICB4bWxG
cmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAgIHhtbEZyZWVQYXJzZXJDdHh0KG1fY29udGV4
dCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewotICAg
IC8vIFRoZSBYTUxEb2N1bWVudFBhcnNlciB3aWxsIGFsd2F5cyBiZSBkZXRhY2hlZCBiZWZvcmUg
YmVpbmcgZGVzdHJveWVkLgotICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgp
KTsKLSAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotCi0gICAgLy8gRklYTUU6IG1fcGVuZGlu
Z1NjcmlwdCBoYW5kbGluZyBzaG91bGQgYmUgbW92ZWQgaW50byBYTUxEb2N1bWVudFBhcnNlci5j
cHAhCi0gICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5y
ZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUo
Y29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKLXsKLSAgICBBU1NFUlQoIWlzRGV0YWNoZWQoKSk7
Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KCk7
Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBsaWJ4bWwgY29udGV4dCBmcm9tIGRlbGV0aW9uIGR1cmlu
ZyBhIGNhbGxiYWNrCi0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNvbnRleHQgPSBtX2Nv
bnRleHQ7Ci0KLSAgICAvLyBsaWJYTUwgdGhyb3dzIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gc3dp
dGNoIHRoZSBlbmNvZGluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIGlmIChwYXJzZVN0cmlu
Zy5sZW5ndGgoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0aGUgcGFyc2Vy
IHRvIGRldGFjaCBkdXJpbmcgeG1sUGFyc2VDaHVuawotICAgICAgICAvLyBrZWVwIHRoaXMgYWxp
dmUgdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBkb25lLgotICAgICAgICBSZWZQdHI8WE1MRG9jdW1l
bnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgc3dpdGNoVG9VVEYxNihjb250ZXh0
LT5jb250ZXh0KCkpOwotICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgICAgICB4bWxQYXJzZUNodW5rKGNv
bnRleHQtPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocGFyc2VTdHJp
bmcuY2hhcmFjdGVycygpKSwgc2l6ZW9mKFVDaGFyKSAqIHBhcnNlU3RyaW5nLmxlbmd0aCgpLCAw
KTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0ICh3aGljaCBtYXkgYmUgcnVuIHVuZGVyIHRoZSB4
bWxQYXJzZUNodW5rIGNhbGxzdGFjaykgbWF5Ci0gICAgICAgIC8vIGNhdXNlIHRoZSBwYXJzZXIg
dG8gYmUgc3RvcHBlZCBvciBkZXRhY2hlZC4KLSAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBoZXJl
PyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291cmNlPwotICAg
IGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdF
cnJvcigpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0
IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQotICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwg
IkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGluZSwgY29udGV4
dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3Ry
aW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3Ry
aW5nKSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHht
bENoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGluZSBBdG9taWNT
dHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSBBdG9taWNTdHJp
bmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nKQotewotICAgIHJldHVybiBB
dG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmlu
ZykpOwotfQotCi1zdHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgewotICAgIGNvbnN0IHhtbENoYXIq
IHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgX3ht
bFNBWDJOYW1lc3BhY2UgeG1sU0FYMk5hbWVzcGFjZTsKLQotc3RhdGljIGlubGluZSB2b2lkIGhh
bmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IHhtbENoYXIq
KiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfbmFtZXNwYWNlcywgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAg
IHhtbFNBWDJOYW1lc3BhY2UqIG5hbWVzcGFjZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJO
YW1lc3BhY2UqPihsaWJ4bWxOYW1lc3BhY2VzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5i
X25hbWVzcGFjZXM7IGkrKykgewotICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUU5hbWUg
PSB4bWxuc0F0b207Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkgPSB0b0F0b21p
Y1N0cmluZyhuYW1lc3BhY2VzW2ldLnVyaSk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2VzW2ldLnBy
ZWZpeCkKLSAgICAgICAgICAgIG5hbWVzcGFjZVFOYW1lID0gInhtbG5zOiIgKyB0b1N0cmluZyhu
YW1lc3BhY2VzW2ldLnByZWZpeCk7Ci0gICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5T
KFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNl
VVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0
aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQot
c3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB7Ci0gICAgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1l
OwotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci0g
ICAgY29uc3QgeG1sQ2hhciogdmFsdWU7Ci0gICAgY29uc3QgeG1sQ2hhciogZW5kOwotfTsKLXR5
cGVkZWYgc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB4bWxTQVgyQXR0cmlidXRlczsKLQotc3Rh
dGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1l
bnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzLCBpbnQgbmJfYXR0cmlidXRlcywg
RXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQ
ZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gcmVpbnRl
cnByZXRfY2FzdDx4bWxTQVgyQXR0cmlidXRlcyo+KGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRlczsgaSsrKSB7Ci0gICAgICAgIGludCB2YWx1
ZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlidXRlc1tpXS5lbmQgLSBhdHRyaWJ1dGVz
W2ldLnZhbHVlKTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJWYWx1ZSA9IHRvQXRvbWljU3Ry
aW5nKGF0dHJpYnV0ZXNbaV0udmFsdWUsIHZhbHVlTGVuZ3RoKTsKLSAgICAgICAgU3RyaW5nIGF0
dHJQcmVmaXggPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnByZWZpeCk7Ci0gICAgICAgIEF0b21p
Y1N0cmluZyBhdHRyVVJJID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBBdG9taWNTdHJpbmcoKSA6
IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udXJpKTsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmli
dXRlc1tpXS5sb2NhbG5hbWUpIDogYXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0
ZXNbaV0ubG9jYWxuYW1lKTsKLQotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhh
dHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwot
ICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxl
bWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJl
Zml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3BhY2Vz
LCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxp
YnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tz
LT5hcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKHhtbExvY2FsTmFtZSwgeG1sUHJlZml4LCB4
bWxVUkksIG5iX25hbWVzcGFjZXMsIGxpYnhtbE5hbWVzcGFjZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRyaWJ1dGVzLCBu
Yl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLy8gY2hlY2sgaWYgdGhlIERPQ1RZUEUgRGVjbGFy
YXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudCBleGlzdHMKLSAgICBpZiAoIW1faGFzRG9jVHlwZURl
Y2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIHsKLSAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0gdG9BdG9taWNT
dHJpbmcoeG1sTG9jYWxOYW1lKTsKLSAgICBBdG9taWNTdHJpbmcgdXJpID0gdG9BdG9taWNTdHJp
bmcoeG1sVVJJKTsKLSAgICBBdG9taWNTdHJpbmcgcHJlZml4ID0gdG9BdG9taWNTdHJpbmcoeG1s
UHJlZml4KTsKLQotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsK
LSAgICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkpCi0gICAgICAgICAgICB1cmkgPSBtX3ByZWZp
eFRvTmFtZXNwYWNlTWFwLmdldChwcmVmaXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1
cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVAp
Ci0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0g
ICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEt
MjAwNjEwMjAtQS5wZGYsCi0gICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUg
cm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAotICAgICAgICAvLyBlbnN1cmUgdGhlIG5h
bWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcKLSAg
ICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKLSAgICAgICAg
aWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKLSAgICAg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1s
JyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFt
ZXNwYWNlVVJJOwotICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwotICAg
ICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBib29sIGlzRmlyc3RFbGVtZW50ID0gIW1fc2F3
Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKLQotICAgIFF1YWxp
ZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7Ci0gICAgUmVmUHRyPEVsZW1l
bnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsK
LSAgICBpZiAoIW5ld0VsZW1lbnQpIHsKLSAgICAgICAgc3RvcFBhcnNpbmcoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGhhbmRsZUVs
ZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0KCksIGxpYnhtbE5hbWVzcGFjZXMsIG5iX25h
bWVzcGFjZXMsIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGlmIChlYykgewotICAg
ICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxl
RWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sQXR0cmlidXRlcywgbmJf
YXR0cmlidXRlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuZXdF
bGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAo
c2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0
aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0Vs
ZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwot
ICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0Vs
ZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
LSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5z
ZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50ICYm
IGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIGRvY3VtZW50
KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgp
OwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQotewotICAgIGlm
IChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyUGF1c2Vk
KSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRW5kRWxlbWVudE5TQ2FsbGJh
Y2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEphdmFTY3JpcHQgY2FuIGRl
dGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2VkCi0gICAgLy8g
YmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPFhNTERvY3VtZW50UGFy
c2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250
YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRp
bmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgp
OwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1f
dmlldykgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgp
KTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiBy
ZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBj
YXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRv
Y3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1l
bnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBsb2FkIGV4
dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KS4KLSAgICBB
U1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsK
LQotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJl
U2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lU
eXBlSW5UeXBlQXR0cmlidXRlKTsKLSAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7Ci0j
aWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRU
eXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0
ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVt
ZW50KHRydWUpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFNjcmlw
dCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuCi0gICAgICAgIC8vIHRoZSBsaWJ4
bWwyIGFuZCBRdCBYTUxEb2N1bWVudFBhcnNlciBpbXBsZW1lbnRhdGlvbnMuCi0KLSAgICAgICAg
aWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0gICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBv
c2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4
ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQt
PmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsK
LSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAg
ICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBs
b2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgotICAgICAgICAgICAgaWYgKG1fcGVu
ZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotCi0gICAgICAgIC8vIEphdmFT
Y3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgotICAgICAgICBpZiAoaXNEZXRhY2hl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQg
PSBmYWxzZTsKLSAgICBwb3BDdXJyZW50Tm9kZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0gICAgaWYgKGlz
U3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsK
LSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2socywg
bGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9sZWFmVGV4dE5vZGUp
Ci0gICAgICAgIGVudGVyVGV4dCgpOwotICAgIG1fYnVmZmVyZWRUZXh0LmFwcGVuZChzLCBsZW4p
OwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplcnJvcihFcnJvclR5cGUgdHlwZSwgY29u
c3QgY2hhciogbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQotewotICAgIGlmIChpc1N0b3BwZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgQ09NUElMRVIoTVNWQykgfHwgQ09NUElMRVIoUlZDVCkg
fHwgQ09NUElMRVIoTUlOR1cpCi0gICAgY2hhciBtWzEwMjRdOwotICAgIHZzbnByaW50ZihtLCBz
aXplb2YobSkgLSAxLCBtZXNzYWdlLCBhcmdzKTsKLSNlbHNlCi0gICAgY2hhciogbTsKLSAgICBp
ZiAodmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdzKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwot
I2VuZGlmCi0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpCi0gICAgICAgIG1fcGVuZGluZ0NhbGxi
YWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0PGNvbnN0IHht
bENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsK
LQotI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIUNPTVBJTEVSKE1J
TkdXKQotICAgIGZyZWUobSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hh
ciogZGF0YSkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3BhcnNlclBhdXNlZCkgewotICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVu
ZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRsZSBleGNl
cHRpb25zCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Ci0gICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBlYyk7Ci0gICAgaWYg
KGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwaS0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUp
OwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQocGkuZ2V0KCkpOwotICAgIGlm
IChtX3ZpZXcgJiYgIXBpLT5hdHRhY2hlZCgpKQotICAgICAgICBwaS0+YXR0YWNoKCk7Ci0KLSAg
ICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0KLSAgICBpZiAocGktPmlzQ1NTKCkpCi0g
ICAgICAgIG1fc2F3Q1NTID0gdHJ1ZTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBtX3Nhd1hTTFRy
YW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAgICBpZiAobV9z
YXdYU0xUcmFuc2Zvcm0gJiYgIWRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkp
Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmIChp
c1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7
Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kQ0RBVEFCbG9ja0NhbGxiYWNrKHMs
IGxlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAg
UmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVk
KCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDb21tZW50Q2FsbGJhY2socyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgUmVmUHRyPENvbW1lbnQ+IG5ld05v
ZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwotICAgIG1fY3Vy
cmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcg
JiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KGNvbnN0IHhtbENoYXIqIHZl
cnNpb24sIGNvbnN0IHhtbENoYXIqIGVuY29kaW5nLCBpbnQgc3RhbmRhbG9uZSkKLXsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlmICh2ZXJzaW9uKQotICAgICAgICBkb2N1bWVu
dCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZlcnNpb24pLCBlYyk7Ci0gICAgZG9jdW1lbnQo
KS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25lID09IDEsIGVjKTsgLy8gcG9zc2libGUgdmFs
dWVzIGFyZSAwLCAxLCBhbmQgLTEKLSAgICBpZiAoZW5jb2RpbmcpCi0gICAgICAgIGRvY3VtZW50
KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7Ci19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSAgICBleGl0VGV4dCgpOwotI2lmIEVOQUJM
RShYSFRNTE1QKQotICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hh
ciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVt
SUQpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRJbnRl
cm5hbFN1YnNldENhbGxiYWNrKG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkb2N1bWVudCgpKSB7Ci0jaWYgRU5BQkxFKFhIVE1M
TVApCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOwotICAgICAg
ICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5hbWUpOwotICAgICAgICBpZiAoZXh0SWQgPT0g
Ii0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iCi0gICAgICAgICAgICB8fCBl
eHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIpIHsKLSAgICAg
ICAgICAgIGlmIChkdGROYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewot
ICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xh
cmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwg
Y29sdW1uTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpCi0gICAg
ICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwotCi0gICAgICAgICAg
ICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0g
ICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwgdG9TdHJpbmco
c3lzdGVtSUQpKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIFhNTERvY3VtZW50UGFyc2Vy
KiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQg
PSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8WE1MRG9jdW1lbnRQYXJzZXIqPihjdHh0LT5fcHJpdmF0ZSk7Ci19Ci0KLS8vIFRo
aXMgaXMgYSBoYWNrIGFyb3VuZCBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTkyMTkKLS8vIE90aGVyd2lzZSBsaWJ4bWwgc2VlbXMgdG8gY2FsbCBhbGwgdGhlIFNB
WCBjYWxsYmFja3MgdHdpY2UgZm9yIGFueSByZXBsYWNlZCBlbnRpdHkuCi1zdGF0aWMgaW5saW5l
IGJvb2wgaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyh2b2lkKiBjbG9zdXJlKQotewotI2lmIExJ
QlhNTF9WRVJTSU9OID49IDIwNjI3Ci0gICAgVU5VU0VEX1BBUkFNKGNsb3N1cmUpOwotCi0gICAg
Ly8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gbGlieG1sIDIuNi4yNy4KLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihj
bG9zdXJlKS0+bm9kZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzdGFydEVsZW1lbnROc0hh
bmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1lLCBjb25zdCB4bWxD
aGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIqIHVyaSwgaW50IG5iX25hbWVzcGFjZXMsIGNvbnN0
IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRl
ZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGhhY2tBcm91
bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBh
cnNlcihjbG9zdXJlKS0+c3RhcnRFbGVtZW50TnMobG9jYWxuYW1lLCBwcmVmaXgsIHVyaSwgbmJf
bmFtZXNwYWNlcywgbmFtZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLCBsaWJ4
bWxBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFuZGxlcih2b2lk
KiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciosIGNvbnN0IHhtbENoYXIq
KQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVuZEVsZW1lbnROcygpOwotfQot
Ci1zdGF0aWMgdm9pZCBjaGFyYWN0ZXJzSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxD
aGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNs
b3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNoYXJh
Y3RlcnMocywgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFu
ZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0IHhtbENoYXIq
IGRhdGEpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+cHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKHRhcmdldCwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNkYXRhQmxvY2tIYW5kbGVy
KHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0gICAgaWYgKGhh
Y2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdldFBhcnNlcihjbG9zdXJlKS0+Y2RhdGFCbG9jayhzLCBsZW4pOwotfQotCi1zdGF0aWMgdm9p
ZCBjb21tZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBjb21tZW50KQot
ewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNvbW1lbnQoY29tbWVudCk7Ci19Ci0K
LVdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpCi1zdGF0aWMgdm9pZCB3YXJuaW5nSGFuZGxlcih2
b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBh
cmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJl
KS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Ondhcm5pbmcsIG1lc3NhZ2UsIGFyZ3MpOwotICAg
IHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKLXN0YXRpYyB2
b2lkIGZhdGFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Us
IC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7
Ci0gICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6ZmF0YWws
IG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9Q
UklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIG5vcm1hbEVycm9ySGFuZGxlcih2b2lkKiBjbG9zdXJl
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZh
X3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZXJyb3IoWE1M
RG9jdW1lbnRQYXJzZXI6Om5vbkZhdGFsLCBtZXNzYWdlLCBhcmdzKTsKLSAgICB2YV9lbmQoYXJn
cyk7Ci19Ci0KLS8vIFVzaW5nIGEgc3RhdGljIGVudGl0eSBhbmQgbWFya2luZyBpdCBYTUxfSU5U
RVJOQUxfUFJFREVGSU5FRF9FTlRJVFkgaXMKLS8vIGEgaGFjayB0byBhdm9pZCBtYWxsb2MvZnJl
ZS4gVXNpbmcgYSBnbG9iYWwgdmFyaWFibGUgbGlrZSB0aGlzIGNvdWxkIGNhdXNlIHRyb3VibGUK
LS8vIGlmIGxpYnhtbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdlcmUgdG8gY2hhbmdlCi1zdGF0
aWMgeG1sQ2hhciBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdFs1XSA9IHswLCAwLCAwLCAwLCAwfTsK
LQotc3RhdGljIHhtbEVudGl0eVB0ciBzaGFyZWRYSFRNTEVudGl0eSgpCi17Ci0gICAgc3RhdGlj
IHhtbEVudGl0eSBlbnRpdHk7Ci0gICAgaWYgKCFlbnRpdHkudHlwZSkgewotICAgICAgICBlbnRp
dHkudHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAgICAgICAgZW50aXR5Lm9yaWcgPSBzaGFyZWRY
SFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmNvbnRlbnQgPSBzaGFyZWRYSFRNTEVu
dGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmV0eXBlID0gWE1MX0lOVEVSTkFMX1BSRURFRklO
RURfRU5USVRZOwotICAgIH0KLSAgICByZXR1cm4gJmVudGl0eTsKLX0KLQotc3RhdGljIHhtbEVu
dGl0eVB0ciBnZXRYSFRNTEVudGl0eShjb25zdCB4bWxDaGFyKiBuYW1lKQotewotICAgIFVDaGFy
IGMgPSBkZWNvZGVOYW1lZEVudGl0eShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihuYW1l
KSk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgdmFsdWUg
PSBTdHJpbmcoJmMsIDEpLnV0ZjgoKTsKLSAgICBBU1NFUlQodmFsdWUubGVuZ3RoKCkgPCA1KTsK
LSAgICB4bWxFbnRpdHlQdHIgZW50aXR5ID0gc2hhcmVkWEhUTUxFbnRpdHkoKTsKLSAgICBlbnRp
dHktPmxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotICAgIGVudGl0eS0+bmFtZSA9IG5hbWU7Ci0g
ICAgbWVtY3B5KHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0LCB2YWx1ZS5kYXRhKCksIGVudGl0eS0+
bGVuZ3RoICsgMSk7Ci0KLSAgICByZXR1cm4gZW50aXR5OwotfQotCi1zdGF0aWMgeG1sRW50aXR5
UHRyIGdldEVudGl0eUhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbmFtZSkK
LXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0
UHRyPihjbG9zdXJlKTsKLSAgICB4bWxFbnRpdHlQdHIgZW50ID0geG1sR2V0UHJlZGVmaW5lZEVu
dGl0eShuYW1lKTsKLSAgICBpZiAoZW50KSB7Ci0gICAgICAgIGVudC0+ZXR5cGUgPSBYTUxfSU5U
RVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7Ci0gICAgICAgIHJldHVybiBlbnQ7Ci0gICAgfQotCi0g
ICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKLSAgICBpZiAoIWVu
dCAmJiAoZ2V0UGFyc2VyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKQotI2lmIEVOQUJMRShY
SFRNTE1QKQotICAgICAgICAgICAgICAgICB8fCBnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxN
UERvY3VtZW50KCkKLSNlbmRpZgotICAgICAgICkpIHsKLSAgICAgICAgZW50ID0gZ2V0WEhUTUxF
bnRpdHkobmFtZSk7Ci0gICAgICAgIGlmIChlbnQpCi0gICAgICAgICAgICBlbnQtPmV0eXBlID0g
WE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwotICAgIH0KLQotICAgIHJldHVybiBlbnQ7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0RG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCi17Ci0g
ICAgeG1sUGFyc2VyQ3R4dCogY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHQqPihjbG9z
dXJlKTsKLSAgICBzd2l0Y2hUb1VURjE2KGN0eHQpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+
c3RhcnREb2N1bWVudChjdHh0LT52ZXJzaW9uLCBjdHh0LT5lbmNvZGluZywgY3R4dC0+c3RhbmRh
bG9uZSk7Ci0gICAgeG1sU0FYMlN0YXJ0RG9jdW1lbnQoY2xvc3VyZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGVuZERvY3VtZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlKQotewotICAgIGdldFBhcnNlcihj
bG9zdXJlKS0+ZW5kRG9jdW1lbnQoKTsKLSAgICB4bWxTQVgyRW5kRG9jdW1lbnQoY2xvc3VyZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBj
b25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxD
aGFyKiBzeXN0ZW1JRCkKLXsKLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmludGVybmFsU3Vic2V0
KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICB4bWxTQVgySW50ZXJuYWxTdWJzZXQo
Y2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwotfQotCi1zdGF0aWMgdm9pZCBl
eHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciosIGNvbnN0
IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHhtbENoYXIqKQotewotICAgIFN0cmluZyBleHRJ
ZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwotICAgIGlmICgoZXh0SWQgPT0gIi0vL1czQy8vRFRE
IFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9X
M0MvL0RURCBYSFRNTCAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RU
RCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzND
Ly9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKQotICAgICAgICB8fCAoZXh0SWQg
PT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9F
TiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUg
MS4wLy9FTiIpCi0gICAgICAgKQotICAgICAgICBnZXRQYXJzZXIoY2xvc3VyZSktPnNldElzWEhU
TUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBu
b3QuCi19Ci0KLXN0YXRpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyKHZvaWQqLCBj
b25zdCB4bWxDaGFyKiwgaW50KQotewotICAgIC8vIG5vdGhpbmcgdG8gZG8sIGJ1dCB3ZSBuZWVk
IHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVyCi0gICAgLy8gaHR0cDovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1Ci0gICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MgotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpp
bml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJiBjaHVuaykKLXsKLSAgICB4bWxT
QVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwotCi0gICAg
c2F4LmVycm9yID0gbm9ybWFsRXJyb3JIYW5kbGVyOwotICAgIHNheC5mYXRhbEVycm9yID0gZmF0
YWxFcnJvckhhbmRsZXI7Ci0gICAgc2F4LmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzSGFuZGxlcjsK
LSAgICBzYXgucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFu
ZGxlcjsKLSAgICBzYXguY2RhdGFCbG9jayA9IGNkYXRhQmxvY2tIYW5kbGVyOwotICAgIHNheC5j
b21tZW50ID0gY29tbWVudEhhbmRsZXI7Ci0gICAgc2F4Lndhcm5pbmcgPSB3YXJuaW5nSGFuZGxl
cjsKLSAgICBzYXguc3RhcnRFbGVtZW50TnMgPSBzdGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAg
c2F4LmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmdldEVudGl0
eSA9IGdldEVudGl0eUhhbmRsZXI7Ci0gICAgc2F4LnN0YXJ0RG9jdW1lbnQgPSBzdGFydERvY3Vt
ZW50SGFuZGxlcjsKLSAgICBzYXguZW5kRG9jdW1lbnQgPSBlbmREb2N1bWVudEhhbmRsZXI7Ci0g
ICAgc2F4LmludGVybmFsU3Vic2V0ID0gaW50ZXJuYWxTdWJzZXRIYW5kbGVyOwotICAgIHNheC5l
eHRlcm5hbFN1YnNldCA9IGV4dGVybmFsU3Vic2V0SGFuZGxlcjsKLSAgICBzYXguaWdub3JhYmxl
V2hpdGVzcGFjZSA9IGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyOwotICAgIHNheC5lbnRpdHlE
ZWNsID0geG1sU0FYMkVudGl0eURlY2w7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NBWDJf
TUFHSUM7Ci0gICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOwotICAgIG1fc2F3RXJy
b3IgPSBmYWxzZTsKLSAgICBtX3Nhd0NTUyA9IGZhbHNlOwotICAgIG1fc2F3WFNMVHJhbnNmb3Jt
ID0gZmFsc2U7Ci0gICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKLQotICAgIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2NvbnRleHQgPSBYTUxQYXJz
ZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIoJnNheCwgdGhpcywgY2h1bmspOwotICAgIGVs
c2UgewotICAgICAgICBBU1NFUlQoIWNodW5rLmRhdGEoKSk7Ci0gICAgICAgIG1fY29udGV4dCA9
IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCB0aGlzKTsKLSAgICB9
Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKCkKLXsKLSAgICBpZiAoIWlzU3Rv
cHBlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIFRlbGwg
bGlieG1sIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
KTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGNvbnRleHQoKSwgMCwgMCwgMSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fY29udGV4dCA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBYTUxUcmVlVmlld2VyIHhtbFRyZWVWaWV3ZXIo
ZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCB4bWxWaWV3ZXJNb2RlID0gIW1fc2F3RXJyb3IgJiYgIW1f
c2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiB4bWxUcmVlVmlld2VyLmhhc05vU3R5bGVJ
bmZvcm1hdGlvbigpOwotICAgIGlmICh4bWxWaWV3ZXJNb2RlKQotICAgICAgICB4bWxUcmVlVmll
d2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmlldygpOwotCi0gICAgaWYgKG1fc2F3WFNMVHJh
bnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9IHhtbERvY1B0ckZvclN0cmluZyhkb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3Jt
LCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRy
YW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNmb3JtU291cmNlKGRvYykpKTsKLQotICAg
ICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jdW1lbnQg
dGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IFhTTCBzdHlsZXNoZWV0cy4KLSAgICAg
ICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcodHJ1ZSk7Ci0KLSAgICAgICAgRG9j
dW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiBFTkFC
TEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0cgotICAgIC8v
IEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJlIHRvIHBhcnNl
IHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9yIG1lc3NhZ2Vz
LgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFy
IEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZC
T00pOwotCi0gICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShjYWNoZWRSZXNvdXJjZUxv
YWRlciwgZXJyb3JGdW5jLCAwKTsKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1l
bW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkg
KiBzaXplb2YoVUNoYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTTFRfUEFSU0VfT1BUSU9OUyk7
Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLSNlbmRpZgotCi1pbnQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRp
b24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJu
IDAtYmFzZWQuCi0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUg
OiAxOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFz
ZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KLSAgICByZXR1cm4gY29u
dGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29sIDogMTsKLX0KLQotVGV4dFBvc2l0aW9uMCBY
TUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICB4bWxQYXJzZXJD
dHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7Ci0gICAgLy8gRklY
TUU6IFRoZSBjb250ZXh0IHByb2JhYmx5IGNvbnRhaW5zIDEtYmFzZWQgbnVtYmVycywgYnV0IHdl
IHRyZWF0IHRoZW0gYXMgMC1iYXNlZCwKLSAgICAvLyAgICAgICAgdG8gYmUgY29uc2lzdGVudCB3
aXRoIGZpeG1lJ3MgaW4gbGluZU51bWJlcigpIGFuZCBjb2x1bW5OdW1iZXIKLSAgICAvLyAgICAg
ICAgbWV0aG9kcy4KLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJl
cjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0gICAgICAgIFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsK
LX0KLQotLy8gVGhpcyBtZXRob2QgaGFzIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiwgaW4gY29u
dHJhc3QgdG8gdGV4dFBvc2l0aW9uKCkgbWV0aG9kLgotLy8gSXQgc2hvdWxkIHJlcGxhY2UgdGV4
dFBvc2l0aW9uKCkuCi1UZXh0UG9zaXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRp
b25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhp
cy0+Y29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIFRleHRQb3Np
dGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOwotICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6
T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0g
ICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1
dC0+Y29sKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKLXsK
LSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBpZiAoY29udGV4dCgpKQot
ICAgICAgICB4bWxTdG9wUGFyc2VyKGNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OnJlc3VtZVBhcnNpbmcoKQotewotICAgIEFTU0VSVCghaXNEZXRhY2hlZCgpKTsKLSAg
ICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsK
LQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHdoaWxl
ICghbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2Fs
bGJhY2tzLT5jYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayh0aGlzKTsKLQotICAgICAgICAvLyBB
IGNhbGxiYWNrIHBhdXNlZCB0aGUgcGFyc2VyCi0gICAgICAgIGlmIChtX3BhcnNlclBhdXNlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVu
ZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAg
bV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8gRmluYWxs
eSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB3cml0ZSgpIGRpZG4ndCByZXN1bHQK
LSAgICAvLyBpbiBhbnkgZnVydGhlciBjYWxsYmFja3MgYmVpbmcgcXVldWVkLCBjYWxsIGVuZCgp
Ci0gICAgaWYgKG1fZmluaXNoQ2FsbGVkICYmIG1fcGVuZGluZ0NhbGxiYWNrcy0+aXNFbXB0eSgp
KQotICAgICAgICBlbmQoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kRnJh
Z21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBjaHVuaykKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4
dCk7Ci0gICAgQVNTRVJUKG1fcGFyc2luZ0ZyYWdtZW50KTsKLQotICAgIENTdHJpbmcgY2h1bmtB
c1V0ZjggPSBjaHVuay51dGY4KCk7Ci0gICAgCi0gICAgLy8gbGlieG1sMiB0YWtlcyBhbiBpbnQg
Zm9yIGEgbGVuZ3RoLCBhbmQgdGhlcmVmb3JlIGNhbid0IGhhbmRsZSBYTUwgY2h1bmtzIGxhcmdl
ciB0aGFuIDIgR2lCLgotICAgIGlmIChjaHVua0FzVXRmOC5sZW5ndGgoKSA+IElOVF9NQVgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNodW5r
QXNVdGY4KTsKLSAgICB4bWxQYXJzZUNvbnRlbnQoY29udGV4dCgpKTsKLSAgICBlbmREb2N1bWVu
dCgpOyAvLyBDbG9zZSBhbnkgb3BlbiB0ZXh0IG5vZGVzLgotCi0gICAgLy8gRklYTUU6IElmIHRo
aXMgY29kZSBpcyBhY3R1YWxseSBuZWVkZWQsIGl0IHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIGZp
bmlzaCgpCi0gICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJRdCBoYXMgYSBzaW1pbGFyIGNoZWNrICht
X3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1l
bnRFcnJvcikgaW4gZG9FbmQoKS4KLSAgICAvLyBDaGVjayBpZiBhbGwgdGhlIGNodW5rIGhhcyBi
ZWVuIHByb2Nlc3NlZC4KLSAgICBsb25nIGJ5dGVzUHJvY2Vzc2VkID0geG1sQnl0ZUNvbnN1bWVk
KGNvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVzUHJvY2Vzc2VkID09IC0xIHx8ICgodW5zaWduZWQg
bG9uZylieXRlc1Byb2Nlc3NlZCkgIT0gY2h1bmtBc1V0ZjgubGVuZ3RoKCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEkgZG9uJ3QgYmVsaWV2ZSB3ZSBjYW4gaGl0IHRoaXMgY2FzZSB3aXRob3V0IGFs
c28gaGF2aW5nIHNlZW4gYW4gZXJyb3Igb3IgYSBudWxsIGJ5dGUuCi0gICAgICAgIC8vIElmIHdl
IGhpdCB0aGlzIEFTU0VSVCwgd2UndmUgZm91bmQgYSB0ZXN0IGNhc2Ugd2hpY2ggZGVtb25zdHJh
dGVzIHRoZSBuZWVkIGZvciB0aGlzIGNvZGUuCi0gICAgICAgIEFTU0VSVChtX3Nhd0Vycm9yIHx8
IChieXRlc1Byb2Nlc3NlZCA+PSAwICYmICFjaHVua0FzVXRmOC5kYXRhKClbYnl0ZXNQcm9jZXNz
ZWRdKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBObyBlcnJvciBp
ZiB0aGUgY2h1bmsgaXMgd2VsbCBmb3JtZWQgb3IgaXQgaXMgbm90IGJ1dCB3ZSBoYXZlIG5vIGVy
cm9yLgotICAgIHJldHVybiBjb250ZXh0KCktPndlbGxGb3JtZWQgfHwgIXhtbEN0eHRHZXRMYXN0
RXJyb3IoY29udGV4dCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGlj
IHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25z
dCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIC8qeG1sUHJlZml4Ki8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIq
IC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFjZXMqLywgY29uc3QgeG1sQ2hhcioqIC8qbmFt
ZXNwYWNlcyovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVmYXVsdGVkKi8sIGNvbnN0IHhtbENoYXIqKiBs
aWJ4bWxBdHRyaWJ1dGVzKQotewotICAgIGlmIChzdHJjbXAocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJzIikgIT0gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4dFB0
cj4oY2xvc3VyZSk7Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUgPSBzdGF0aWNfY2Fz
dDxBdHRyaWJ1dGVQYXJzZVN0YXRlKj4oY3R4dC0+X3ByaXZhdGUpOwotCi0gICAgc3RhdGUtPmdv
dEF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMg
PSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAg
U3RyaW5nIGF0dHJMb2NhbE5hbWUgPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSk7
Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IChpbnQpIChhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0
dHJpYnV0ZXNbaV0udmFsdWUpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0gdG9TdHJpbmco
YXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgICAgICBTdHJpbmcgYXR0clBy
ZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKLSAgICAgICAgU3RyaW5nIGF0
dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gYXR0ckxvY2FsTmFtZSA6IGF0dHJQcmVm
aXggKyAiOiIgKyBhdHRyTG9jYWxOYW1lOwotCi0gICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNl
dChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7Ci0gICAgfQotfQotCi1IYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0sp
Ci17Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKLSAgICBzdGF0ZS5nb3RBdHRyaWJ1
dGVzID0gZmFsc2U7Ci0KLSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwg
MCwgc2l6ZW9mKHNheCkpOwotICAgIHNheC5zdGFydEVsZW1lbnROcyA9IGF0dHJpYnV0ZXNTdGFy
dEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NBWDJfTUFHSUM7
Ci0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IHBhcnNlciA9IFhNTFBhcnNlckNvbnRleHQ6
OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCAmc3RhdGUpOwotICAgIFN0cmluZyBwYXJzZVN0cmlu
ZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAiICsgc3RyaW5nICsgIiAvPiI7Ci0g
ICAgeG1sUGFyc2VDaHVuayhwYXJzZXItPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgcGFyc2VTdHJpbmcubGVuZ3RoKCkg
KiBzaXplb2YoVUNoYXIpLCAxKTsKLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsK
LSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
NWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1
bWVudFBhcnNlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkNEQVRB
U2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1lbnQu
aCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50VHlw
ZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCi0jaW5jbHVk
ZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgotI2luY2x1
ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW50aXR5UmVzb2x2ZXIg
OiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIHsKLSAgICB2aXJ0dWFsIFFTdHJpbmcg
cmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSk7Ci19OwotCi1RU3Ry
aW5nIEVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eShjb25zdCBRU3RyaW5n
ICZuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShuYW1lLnRvVXRmOCgp
LmNvbnN0RGF0YSgpKTsKLSAgICByZXR1cm4gUVN0cmluZyhjKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9y
dHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICByZXR1cm4gdmVyc2lv
biA9PSAiMS4wIjsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi0gICAgOiBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0gICAgLCBtX3ZpZXcoZnJhbWVWaWV3KQotICAgICwg
bV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGRvY3VtZW50KQotICAgICwg
bV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xU
cmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1f
aXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hI
VE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNl
KQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGlu
Z1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJv
ckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAg
LCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKLSAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0gICAgbV9zdHJlYW0uc2V0RW50aXR5UmVzb2x2
ZXIobmV3IEVudGl0eVJlc29sdmVyKTsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3Vt
ZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVt
ZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICA6IFNjcmlw
dGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygw
KQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGZyYWdtZW50
KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwg
bV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkK
LSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAg
ICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1f
cmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAg
ICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJt
aXNzaW9uKHBlcm1pc3Npb24pCi17Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRk
IG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQq
PiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0
YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQotICAgICAgICBOb2RlKiBuID0gcGFyZW50RWxl
bWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIG5h
bWVzcGFjZXM7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsg
IWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAg
aWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewot
ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkp
OwotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAieG1sbnMiKQotICAg
ICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09ICJ4bWxucyIpCi0gICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYXBwZW5kKFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNs
YXJhdGlvbihhdHRyLT5sb2NhbE5hbWUoKSwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3RyZWFtLmFkZEV4dHJhTmFtZXNwYWNlRGVjbGFy
YXRpb25zKG5hbWVzcGFjZXMpOwotICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBF
bnRpdHlSZXNvbHZlcik7Ci0KLSAgICAvLyBJZiB0aGUgcGFyZW50IGVsZW1lbnQgaXMgbm90IGlu
IGRvY3VtZW50IHRyZWUsIHRoZXJlIG1heSBiZSBubyB4bWxucyBhdHRyaWJ1dGU7IGp1c3QgZGVm
YXVsdCB0byB0aGUgcGFyZW50J3MgbmFtZXNwYWNlLgotICAgIGlmIChtX2RlZmF1bHROYW1lc3Bh
Y2VVUkkuaXNOdWxsKCkgJiYgIXBhcmVudEVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAg
bV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gcGFyZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci19
Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewotICAgIGNsZWFy
Q3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgIG1f
cGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIGRlbGV0ZSBtX3N0cmVhbS5l
bnRpdHlSZXNvbHZlcigpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRlKGNv
bnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCi17Ci0gICAgbV93cm90ZVRleHQgPSB0cnVlOwotCi0g
ICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVyKCktPnNh
d0Vycm9yKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9yLCByZXBv
cnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFs
LCAiRW5jb2RpbmcgZXJyb3IiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFFTdHJpbmcgZGF0YShwYXJzZVN0cmluZyk7Ci0gICAg
aWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0
aGUgcGFyc2VyIHRvIGRldGFjaCwKLSAgICAgICAgLy8ga2VlcCB0aGlzIGFsaXZlIHVudGlsIHRo
aXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBw
cm90ZWN0KHRoaXMpOwotCi0gICAgICAgIG1fc3RyZWFtLmFkZERhdGEoZGF0YSk7Ci0gICAgICAg
IHBhcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJikKLXsKLSAgICBEb2N1
bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7Ci0gICAgbV9zYXdFcnJvciA9IGZhbHNlOwotICAg
IG1fc2F3Q1NTID0gZmFsc2U7Ci0gICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSBmYWxzZTsKLSAgICBt
X3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpk
b0VuZCgpCi17Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtKSB7
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJh
bnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pKSk7Ci0gICAgICAgIGRv
Y3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2MgdGhpbmsgaXQncyBk
b25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCi0gICAgICAgIGRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwotICAgICAgICBkb2N1
bWVudCgpLT5zZXRQYXJzaW5nKHRydWUpOwotICAgICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBh
cnNpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX3N0cmVhbS5lcnJvcigpID09IFFY
bWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcgotICAgICAgICB8fCAo
bV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50ICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAm
JiAhbV9zYXdFcnJvcikpCi0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJpbnRhYmxlKG1f
c3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLX0K
LQotaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zdHJlYW0ubGluZU51bWJlcigpOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNv
bHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVtbk51bWJlcigp
OwotfQotCi1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9t
WmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGluY29y
cmVjdGx5IHJlaW50ZXJwcmV0cyB6ZXJvLWJhc2UgbGluZU51bWJlciBtZXRob2QgYXMgb25lLWJh
c2VkIG51bWJlci4KLS8vIEZJWE1FOiBUaGlzIGVycm9yIGlzIGtlcHQgZm9yIGNvbXBhdGliaWxp
dHkuIFdlIHNob3VsZCBmaXggaXQgZXZlbnR1YWxseS4gCi1UZXh0UG9zaXRpb24xIFhNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRl
eHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1i
ZXIoKSksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIo
KSkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCi17Ci0gICAg
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQobV9wYXJzZXJQYXVz
ZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBleGVj
dXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHBhcnNlKCk7Ci0gICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVuZGlu
ZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAgbV9w
ZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8gRmluYWxseSwg
aWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBhcHBlbmQoKSBkaWRuJ3QgcmVzdWx0Ci0g
ICAgLy8gaW4gYW55IGZ1cnRoZXIgY2FsbGJhY2tzIGJlaW5nIHF1ZXVlZCwgY2FsbCBlbmQoKQot
ICAgIGlmIChtX2ZpbmlzaENhbGxlZCAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fcGVuZGluZ1Nj
cmlwdCkKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVu
ZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAgIEFTU0VSVCghbV9z
YXdGaXJzdEVsZW1lbnQpOwotICAgIGFwcGVuZChTdHJpbmcoIjxxeG1sc3RyZWFtZHVtbXllbGVt
ZW50PiIpKTsKLSAgICBhcHBlbmQoc291cmNlKTsKLSAgICBhcHBlbmQoU3RyaW5nKCI8L3F4bWxz
dHJlYW1kdW1teWVsZW1lbnQ+IikpOwotICAgIHJldHVybiAhaGFzRXJyb3IoKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNl
U3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9v
bCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVu
dE5zSGFuZGxlcihBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSwgY29uc3QgUVhtbFN0cmVhbUF0
dHJpYnV0ZXMmIGF0dHJzKQotewotICAgIGlmIChhdHRycy5jb3VudCgpIDw9IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIHN0YXRlLT5nb3RBdHRyaWJ1dGVzID0gdHJ1ZTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFFYbWxT
dHJlYW1BdHRyaWJ1dGUmIGF0dHIgPSBhdHRyc1tpXTsKLSAgICAgICAgU3RyaW5nIGF0dHJMb2Nh
bE5hbWUgPSBhdHRyLm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBhdHRy
LnZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5uYW1lc3BhY2VV
cmkoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5hbWUo
KTsKLSAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsK
LSAgICB9Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykKLXsKLSAgICBBdHRyaWJ1dGVQYXJzZVN0
YXRlIHN0YXRlOwotICAgIHN0YXRlLmdvdEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIFFYbWxT
dHJlYW1SZWFkZXIgc3RyZWFtOwotICAgIFFTdHJpbmcgZHVtbXkgPSBRU3RyaW5nKFFMYXRpbjFT
dHJpbmcoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICUxIC8+IikpLmFyZyhzdHJpbmcp
OwotICAgIHN0cmVhbS5hZGREYXRhKGR1bW15KTsKLSAgICB3aGlsZSAoIXN0cmVhbS5hdEVuZCgp
KSB7Ci0gICAgICAgIHN0cmVhbS5yZWFkTmV4dCgpOwotICAgICAgICBpZiAoc3RyZWFtLmlzU3Rh
cnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRs
ZXIoJnN0YXRlLCBzdHJlYW0uYXR0cmlidXRlcygpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBh
dHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRl
czsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcHJlZml4RnJvbVFOYW1lKGNvbnN0IFFTdHJp
bmcmIHFOYW1lKQotewotICAgIGNvbnN0IGludCBvZmZzZXQgPSBxTmFtZS5pbmRleE9mKFFMYXRp
bjFDaGFyKCc6JykpOwotICAgIGlmIChvZmZzZXQgPD0gMCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHFOYW1lLmxlZnQob2Zmc2V0KTsKLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0Vs
ZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMgJm5zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjLCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG5zLmNvdW50KCk7ICsraSkgewotICAgICAgICBjb25zdCBRWG1s
U3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gJmRlY2wgPSBuc1tpXTsKLSAgICAgICAgU3RyaW5n
IG5hbWVzcGFjZVVSSSA9IGRlY2wubmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIFN0cmluZyBuYW1l
c3BhY2VRTmFtZSA9IGRlY2wucHJlZml4KCkuaXNFbXB0eSgpID8gU3RyaW5nKCJ4bWxucyIpIDog
U3RyaW5nKCJ4bWxuczoiKTsKLSAgICAgICAgbmFtZXNwYWNlUU5hbWUuYXBwZW5kKGRlY2wucHJl
Zml4KCkpOwotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53
My5vcmcvMjAwMC94bWxucy8iLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNlVVJJLCBlYywgc2Ny
aXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcg
YXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0
IFFYbWxTdHJlYW1BdHRyaWJ1dGVzICZhdHRycywgRXhjZXB0aW9uQ29kZSYgZWMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
dHRycy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0ZSAm
YXR0ciA9IGF0dHJzW2ldOwotICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IGF0dHIubmFt
ZSgpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlICAgICA9IGF0dHIudmFsdWUoKTsKLSAgICAg
ICAgU3RyaW5nIGF0dHJVUkkgICAgICAgPSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogU3RyaW5nKGF0dHIubmFtZXNwYWNlVXJpKCkpOwotICAgICAgICBTdHJpbmcg
YXR0clFOYW1lICAgICA9IGF0dHIucXVhbGlmaWVkTmFtZSgpOwotICAgICAgICBuZXdFbGVtZW50
LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlw
dGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0
dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlKCkKLXsKLSAgICB3aGlsZSAoIWlzU3RvcHBlZCgpICYmICFtX3BhcnNl
clBhdXNlZCAmJiAhbV9zdHJlYW0uYXRFbmQoKSkgewotICAgICAgICBtX3N0cmVhbS5yZWFkTmV4
dCgpOwotICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDogewotICAgICAgICAgICAgc3RhcnRE
b2N1bWVudCgpOwotICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBR
WG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDogewotICAgICAgICAgICAgZW5kRG9jdW1lbnQo
KTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVh
bVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSAmJiAhbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUg
ZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcGFy
c2VTdGFydEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRWxlbWVudDogewotICAgICAgICAgICAgcGFyc2VF
bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVh
bS5pc0NEQVRBKCkpIHsKLSAgICAgICAgICAgICAgICAvL2NkYXRhCi0gICAgICAgICAgICAgICAg
cGFyc2VDZGF0YSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvL2No
YXJhY3RlcnMKLSAgICAgICAgICAgICAgICBwYXJzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVh
bVJlYWRlcjo6Q29tbWVudDogewotICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRU
RDogewotICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFREIjsKLSAgICAg
ICAgICAgIHBhcnNlRHRkKCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNl
OiB7Ci0gICAgICAgICAgICAvL3FEZWJ1ZygpPDwiLS0tLS0tLS0tLSBFTlRJVFkgPSAiPDxtX3N0
cmVhbS5uYW1lKCkudG9TdHJpbmcoKQotICAgICAgICAgICAgLy8gICAgICAgIDw8IiwgdCA9ICI8
PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKGlzWEhUTUxEb2N1
bWVudCgpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICAgICAgfHwgaXNYSFRNTE1Q
RG9jdW1lbnQoKQotI2VuZGlmCi0gICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBR
U3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUoKS50b1N0cmluZygpOwotICAgICAgICAgICAg
ICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHkudG9VdGY4KCkuY29uc3REYXRh
KCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAgICAgICAgICAg
ICAgICAgIGVudGVyVGV4dCgpOwotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIoJmMsIDEpOwotICAgICAgICAgICAgICAgIC8v
IHFEZWJ1ZygpPDwiIC0tLS0tLS0gYWRkaW5nIGVudGl0eSAiPDxzdHI7Ci0gICAgICAgICAgICAg
ICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEoc3RyLCBlYyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjogewotICAgICAgICAgICAgcGFyc2VQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbS5lcnJvcigpICE9IFFYbWxTdHJlYW1S
ZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgewotICAgICAgICAgICAgICAgIEVy
cm9yVHlwZSB0eXBlID0gKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6Tm90
V2VsbEZvcm1lZEVycm9yKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRh
bCA6IHdhcm5pbmc7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgcVByaW50YWJs
ZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoKQotewotICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0
KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KLSAgICBpZiAoIW1fcGFyc2luZ0ZyYWdt
ZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFhNTFN0YW5kYWxvbmUobV9zdHJlYW0uaXNT
dGFuZGFsb25lRG9jdW1lbnQoKSwgZWMpOwotCi0gICAgICAgIFFTdHJpbmdSZWYgdmVyc2lvbiA9
IG1fc3RyZWFtLmRvY3VtZW50VmVyc2lvbigpOwotICAgICAgICBpZiAoIXZlcnNpb24uaXNFbXB0
eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MVmVyc2lvbih2ZXJzaW9uLCBlYyk7
Ci0gICAgICAgIFFTdHJpbmdSZWYgZW5jb2RpbmcgPSBtX3N0cmVhbS5kb2N1bWVudEVuY29kaW5n
KCk7Ci0gICAgICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgZG9jdW1l
bnQoKS0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIH0KLX0KLQotdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQotewotICAgIGlmICghbV9zYXdGaXJzdEVs
ZW1lbnQgJiYgbV9wYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgLy8gc2tpcCBkdW1teSBlbGVt
ZW50IGZvciBmcmFnbWVudHMKLSAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFN0cmluZyBsb2Nh
bE5hbWUgPSBtX3N0cmVhbS5uYW1lKCk7Ci0gICAgU3RyaW5nIHVyaSAgICAgICA9IG1fc3RyZWFt
Lm5hbWVzcGFjZVVyaSgpOwotICAgIFN0cmluZyBwcmVmaXggICAgPSBwcmVmaXhGcm9tUU5hbWUo
bV9zdHJlYW0ucXVhbGlmaWVkTmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgaWYgKG1fcGFyc2lu
Z0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewotICAgICAgICBRX0FTU0VSVChwcmVmaXguaXNO
dWxsKCkpOwotICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0g
ICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKLSAgICBSZWZQ
dHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUs
IHRydWUpOwotICAgIGlmICghbmV3RWxlbWVudCkgewotICAgICAgICBzdG9wUGFyc2luZygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFt
X3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEFz
IHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwK
LSAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1lbnQgTVVT
VCBiZSAnaHRtbCcgYW5kCi0gICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVs
dCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJwotICAgICAgICAvLyBNVVNUIGJl
ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwotICAgICAgICBpZiAobG9jYWxOYW1lICE9
IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAgaGFuZGxlRXJy
b3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVu
dC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1f
ZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7Ci0gICAg
ICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgICAgICAgICBtX3N0cmVh
bS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJh
dGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpKTsKLSAgICAgICAgfQot
ICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxl
bWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7Ci0KLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhuZXdFbGVtZW50LmdldCgpLCBt
X3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lv
bik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgp
LCBtX3N0cmVhbS5hdHRyaWJ1dGVzKCksIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAg
IGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChu
ZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVu
dE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJl
bnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQt
PmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1l
bnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAg
ICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxh
YmxlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCi17
Ci0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBuID0gbV9jdXJy
ZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmIChtX3Nj
cmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkICYmIG4tPmlz
RWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4u
Z2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgewotICAgICAgICBpZiAo
IW1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3BDdXJyZW50Tm9k
ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFy
ZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8g
UGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0
ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVu
dE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNj
cmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRF
bGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBkb24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUg
ZG9jdW1lbnRzIChmb3Igbm93KQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBt
X3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotCi0gICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJl
ZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBT
Y3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwotICAgIGlmICgh
c3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICAgICAgaWYg
KCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnNl
dFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0jZW5kaWYKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkK
LSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2ls
bEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2Ny
aXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Ci0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQg
PSBlbGVtZW50OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7
Ci0KLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdh
cyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCi0gICAgICAgICAg
ICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgfQot
ICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwotICAgIHBvcEN1cnJlbnROb2RlKCk7Ci19
Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycygpCi17Ci0gICAgaWYg
KCFtX2xlYWZUZXh0Tm9kZSkKLSAgICAgICAgZW50ZXJUZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEobV9zdHJlYW0udGV4dCgp
LCBlYyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKCkKLXsKLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRsZSBleGNlcHRp
b25zCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVj
dGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0gICAg
ICAgIG1fc3RyZWFtLnByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldCgpLAotICAgICAgICBtX3N0
cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKCksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4
Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGktPnNldENyZWF0ZWRCeVBhcnNlcih0
cnVlKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKHBpLmdldCgpKTsKLSAg
ICBpZiAobV92aWV3ICYmICFwaS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcGktPmF0dGFjaCgpOwot
Ci0gICAgcGktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKHBpLT5pc0NTUygp
KQotICAgICAgICBtX3Nhd0NTUyA9IHRydWU7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgbV9zYXdY
U0xUcmFuc2Zvcm0gPSAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7Ci0gICAgaWYg
KG1fc2F3WFNMVHJhbnNmb3JtICYmICFkb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpKQotICAgICAgICBzdG9wUGFyc2luZygpOwotI2VuZGlmCi19Ci0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnBhcnNlQ2RhdGEoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8
Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwg
bV9zdHJlYW0udGV4dCgpKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5l
d05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0g
ICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
YXJzZUNvbW1lbnQoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8Q29tbWVudD4g
bmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX3N0cmVhbS50ZXh0KCkpOwot
Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7Ci0gICAg
aWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKLSAgICAgICAgbmV3Tm9kZS0+YXR0
YWNoKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSNp
ZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IGZhbHNlOwot
I2VuZGlmCi19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zdHJlYW0uaGFzRXJyb3IoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VEdGQoKQotewotICAgIFFTdHJpbmdSZWYgbmFtZSA9IG1fc3RyZWFtLmR0ZE5h
bWUoKTsKLSAgICBRU3RyaW5nUmVmIHB1YmxpY0lkID0gbV9zdHJlYW0uZHRkUHVibGljSWQoKTsK
LSAgICBRU3RyaW5nUmVmIHN5c3RlbUlkID0gbV9zdHJlYW0uZHRkU3lzdGVtSWQoKTsKLQotICAg
IC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwgcHVibGljSWQgPDwgc3lzdGVtSWQ7Ci0gICAg
aWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJh
bnNpdGlvbmFsLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxh
dGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKSkKLSAgICAgICAg
fHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFt
ZXNldC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1cz
Qy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFM
YXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikp
Ci0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRN
TCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSNpZiAhRU5BQkxFKFhI
VE1MTVApCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JV
TS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCi0jZW5kaWYKLSAgICAgICApCi0gICAgICAg
IHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRp
dGllcyBvciBub3QuCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgZWxzZSBpZiAoKHB1YmxpY0lk
ID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4i
KSkKLSAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9S
VU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewotICAgICAgICBpZiAoQXRvbWljU3Ry
aW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAg
ICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4cGVj
dGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1l
bnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUgdHlwZSBpcyBj
b3JyZWN0IHdpdGggdGhpcyBtZXRob2QKLSAgICAgICAgICAgIHNldElzWEhUTUxNUERvY3VtZW50
KHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1
ZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAg
ZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1lbnQo
KSwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMGE0NzNlZDIzMDgyZjM3ZDM5M2E4ZDExZjFhZGExNWVjYzNjMzcyNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJT
Y29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKLQotWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJl
bnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAsIG1fb2xkR2Vu
ZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3IpCi0gICAgLCBtX29sZFN0cnVjdHVyZWRFcnJv
ckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQotICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2Vu
ZXJpY0Vycm9yQ29udGV4dCkKLSNlbmRpZgotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxv
YWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi1YTUxE
b2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmlj
RXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZv
aWQqIGVycm9yQ29udGV4dCkKLSAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVu
dENhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdl
bmVyaWNFcnJvcikKLSAgICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVk
RXJyb3IpCi0gICAgLCBtX29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQot
ewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVy
OwotICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQotICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JG
dW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgaWYgKHN0cnVjdHVyZWRF
cnJvckZ1bmMpCi0gICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0
LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKLX0KLSNlbmRpZgotCi1YTUxEb2N1bWVudFBhcnNlclNj
b3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgpCi17Ci0gICAgY3VycmVudENhY2hlZFJlc291
cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSNpZiBFTkFCTEUoWFNMVCkK
LSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVy
aWNFcnJvckZ1bmMpOwotICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNv
bnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyk7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGMwNDA0M2I0OGIxMWVjNWI4ODM2MGFlM2UxNzliNWQxZWUxMmRmZmIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAotI2RlZmluZSBYTUxEb2N1bWVudFBhcnNlclNj
b3BlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgRU5BQkxFKFhTTFQp
Ci0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSAgICBjbGFzcyBYTUxE
b2N1bWVudFBhcnNlclNjb3BlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWE1MRG9j
dW1lbnRQYXJzZXJTY29wZSk7Ci0gICAgcHVibGljOgotICAgICAgICBYTUxEb2N1bWVudFBhcnNl
clNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAg
ICAgIH5YTUxEb2N1bWVudFBhcnNlclNjb3BlKCk7Ci0KLSAgICAgICAgc3RhdGljIENhY2hlZFJl
c291cmNlTG9hZGVyKiBjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSNpZiBFTkFCTEUo
WFNMVCkKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHhtbEdlbmVyaWNFcnJvckZ1bmMgZ2VuZXJpY0Vycm9y
RnVuYywgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzdHJ1Y3R1cmVkRXJyb3JGdW5jID0gMCwgdm9p
ZCogZXJyb3JDb250ZXh0ID0gMCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyKiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyOwotCi0jaWYgRU5B
QkxFKFhTTFQpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvckZ1bmMgbV9vbGRHZW5lcmljRXJyb3JG
dW5jOwotICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIG1fb2xkU3RydWN0dXJlZEVycm9y
RnVuYzsKLSAgICAgICAgdm9pZCogbV9vbGRFcnJvckNvbnRleHQ7Ci0jZW5kaWYKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBYTUxEb2N1bWVudFBhcnNlclNj
b3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2MzdiMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1l
bnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgorI2luY2x1ZGUgIkNhY2hl
ZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKKyNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmVlRGVwdGhMaW1p
dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY29u
c3QgaW50IG1heEVycm9ycyA9IDI1OworCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwdXNoQ3Vy
cmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKK3sKKyAgICBBU1NFUlQobik7CisgICAgQVNTRVJU
KG1fY3VycmVudE5vZGUpOworICAgIGlmIChuICE9IGRvY3VtZW50KCkpCisgICAgICAgIG4tPnJl
ZigpOworICAgIG1fY3VycmVudE5vZGVTdGFjay5hcHBlbmQobV9jdXJyZW50Tm9kZSk7CisgICAg
bV9jdXJyZW50Tm9kZSA9IG47CisgICAgaWYgKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkgPiBt
YXhET01UcmVlRGVwdGgpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRXhjZXNzaXZlIG5v
ZGUgbmVzdGluZy4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30KKwordm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUoKQoreworICAgIGlmICghbV9jdXJyZW50
Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2suc2l6
ZSgpKTsKKworICAgIGlmIChtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCisgICAgICAgIG1f
Y3VycmVudE5vZGUtPmRlcmVmKCk7CisKKyAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9k
ZVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnROb2RlU3RhY2sucmVtb3ZlTGFzdCgpOworfQor
Cit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjbGVhckN1cnJlbnROb2RlU3RhY2soKQoreworICAg
IGlmIChtX2N1cnJlbnROb2RlICYmIG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKKyAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKKyAgICBtX2N1cnJlbnROb2RlID0gMDsKKyAgICBt
X2xlYWZUZXh0Tm9kZSA9IDA7CisKKyAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSkg
eyAvLyBBYm9ydGVkIHBhcnNpbmcuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2N1cnJlbnRO
b2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAtLWkpCisgICAgICAgICAgICBtX2N1cnJlbnRO
b2RlU3RhY2tbaV0tPmRlcmVmKCk7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2tbMF0g
JiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IGRvY3VtZW50KCkpCisgICAgICAgICAgICBtX2N1
cnJlbnROb2RlU3RhY2tbMF0tPmRlcmVmKCk7CisgICAgICAgIG1fY3VycmVudE5vZGVTdGFjay5j
bGVhcigpOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0
IFNlZ21lbnRlZFN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMpCit7
CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gcy50b1N0cmluZygpOworCisgICAgaWYgKG1fc2F3
WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9vcmlnaW5hbFNv
dXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmluZzsKKworICAgIGlmIChpc1N0b3BwZWQoKSB8
fCBtX3Nhd1hTTFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQocyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBkb1dyaXRlKHMudG9TdHJpbmcoKSk7CisKKyAgICAvLyBBZnRlciBw
YXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBldmVudHMuCisg
ICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMoKTsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNvbnN0
IGNoYXIqIG0sIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQoreworICAgIGhhbmRs
ZUVycm9yKHR5cGUsIG0sIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9u
ZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoY29sdW1uTnVtYmVyKSkpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpoYW5kbGVF
cnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0aW9uMSBwb3NpdGlv
bikKK3sKKyAgICBpZiAodHlwZSA9PSBmYXRhbCB8fCAobV9lcnJvckNvdW50IDwgbWF4RXJyb3Jz
ICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9saW5lICE9IHBvc2l0aW9uLm1fbGluZSAmJiBtX2xh
c3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9IHBvc2l0aW9uLm1fY29sdW1uKSkgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ugd2FybmluZzoKKyAgICAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gIndhcm5pbmcgb24gbGluZSAiICsgU3RyaW5nOjpudW1i
ZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4gIiArIFN0cmlu
Zzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjogIiArIG07Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZhdGFsOgorICAgICAgICAg
ICAgY2FzZSBub25GYXRhbDoKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gImVy
cm9yIG9uIGxpbmUgIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZElu
dCgpKSArICIgYXQgY29sdW1uICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5tX2NvbHVtbi5v
bmVCYXNlZEludCgpKSArICI6ICIgKyBtOworICAgICAgICB9CisKKyAgICAgICAgbV9sYXN0RXJy
b3JQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICArK21fZXJyb3JDb3VudDsKKyAgICB9CisK
KyAgICBpZiAodHlwZSAhPSB3YXJuaW5nKQorICAgICAgICBtX3Nhd0Vycm9yID0gdHJ1ZTsKKwor
ICAgIGlmICh0eXBlID09IGZhdGFsKQorICAgICAgICBzdG9wUGFyc2luZygpOworfQorCit2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQoKQoreworI2lmICFVU0UoUVhNTFNUUkVBTSkK
KyAgICBBU1NFUlQobV9idWZmZXJlZFRleHQuc2l6ZSgpID09IDApOworI2VuZGlmCisgICAgQVNT
RVJUKCFtX2xlYWZUZXh0Tm9kZSk7CisgICAgbV9sZWFmVGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUo
ZG9jdW1lbnQoKSwgIiIpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG1fbGVh
ZlRleHROb2RlLmdldCgpKTsKK30KKworI2lmICFVU0UoUVhNTFNUUkVBTSkKK3N0YXRpYyBpbmxp
bmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUpIAor
eyAKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzdHJpbmcpLCBzaXplKTsgCit9CisjZW5kaWYKKworCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpleGl0VGV4dCgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fbGVhZlRleHROb2RlKQorICAgICAgICByZXR1cm47CisKKyNpZiAhVVNF
KFFYTUxTVFJFQU0pCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbV9sZWFmVGV4dE5v
ZGUtPmFwcGVuZERhdGEodG9TdHJpbmcobV9idWZmZXJlZFRleHQuZGF0YSgpLCBtX2J1ZmZlcmVk
VGV4dC5zaXplKCkpLCBlYyk7CisgICAgVmVjdG9yPHhtbENoYXI+IGVtcHR5OworICAgIG1fYnVm
ZmVyZWRUZXh0LnN3YXAoZW1wdHkpOworI2VuZGlmCisKKyAgICBpZiAobV92aWV3ICYmICFtX2xl
YWZUZXh0Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbV9sZWFmVGV4dE5vZGUtPmF0dGFjaCgp
OworCisgICAgbV9sZWFmVGV4dE5vZGUgPSAwOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpkZXRhY2goKQoreworICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOworICAgIFNjcmlwdGFi
bGVEb2N1bWVudFBhcnNlcjo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmVuZCgpCit7CisgICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyIHdpbGwgZG8gYmFkIHRo
aW5ncyB0byB0aGUgZG9jdW1lbnQgaWYgZG9FbmQoKSBpcyBjYWxsZWQuCisgICAgLy8gSSBkb24n
dCBiZWxpZXZlIFhNTERvY3VtZW50UGFyc2VyUXQgbmVlZHMgZG9FbmQgY2FsbGVkIGluIHRoZSBm
cmFnbWVudCBjYXNlLgorICAgIEFTU0VSVCghbV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAgZG9F
bmQoKTsKKworICAgIC8vIGRvRW5kKCkgY291bGQgcHJvY2VzcyBhIHNjcmlwdCB0YWcsIHRodXMg
cGF1c2luZyBwYXJzaW5nLgorICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc2F3RXJyb3IpCisgICAgICAgIGluc2VydEVycm9yTWVzc2FnZUJsb2Nr
KCk7CisgICAgZWxzZSB7CisgICAgICAgIGV4aXRUZXh0KCk7CisgICAgICAgIGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOworICAgIH0KKwor
ICAgIGlmIChpc1BhcnNpbmcoKSkKKyAgICAgICAgcHJlcGFyZVRvU3RvcFBhcnNpbmcoKTsKKyAg
ICBkb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERvY3VtZW50OjpJbnRlcmFjdGl2ZSk7CisgICAg
Y2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5n
KCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCit7CisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fcGFyc2VyU3RvcHBlZCkgaGVyZSwgc2luY2UgaXQgZG9l
cyBub3QKKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIGFueSBtZXRob2RzIG9uIERvY3VtZW50
UGFyc2VyIG9uY2UgaXQncyBiZWVuIHN0b3BwZWQuCisgICAgLy8gSG93ZXZlciwgRnJhbWVMb2Fk
ZXI6OnN0b3AgY2FsbHMgRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCB1bmNvbmRpdGlvbmFsbHkuCisK
KyAgICBpZiAobV9wYXJzZXJQYXVzZWQpCisgICAgICAgIG1fZmluaXNoQ2FsbGVkID0gdHJ1ZTsK
KyAgICBlbHNlCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjpm
aW5pc2hXYXNDYWxsZWQoKQoreworICAgIHJldHVybiBtX2ZpbmlzaENhbGxlZDsKK30KKworc3Rh
dGljIGlubGluZSBSZWZQdHI8RWxlbWVudD4gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihE
b2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZXMpCit7CisgICAgUmVmUHRy
PEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgInBhcnNlcmVycm9yIiwgeGh0bWxOYW1lc3BhY2VVUkkpLCBmYWxzZSk7Cisg
ICAgcmVwb3J0RWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImRpc3BsYXk6IGJsb2Nr
OyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJweCBzb2xpZCAjYzc3OyBwYWRkaW5nOiAwIDFl
bSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91bmQtY29sb3I6ICNmZGQ7IGNvbG9yOiBibGFj
ayIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGgz
ID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+
YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKKyAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVh
dGVUZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiIpLCBl
Yyk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZml4ZWQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoZGl2
VGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZml4ZWQuZ2V0KCks
IGVjKTsKKyAgICBmaXhlZC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImZvbnQtZmFtaWx5Om1v
bm9zcGFjZTtmb250LXNpemU6MTJweCIpOworICAgIGZpeGVkLT5hcHBlbmRDaGlsZChkb2MtPmNy
ZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpLCBlYyk7CisKKyAgICBoMyA9IGRvYy0+Y3JlYXRl
RWxlbWVudChoM1RhZywgZmFsc2UpOworICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKGgz
LmdldCgpLCBlYyk7CisgICAgaDMtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoIkJl
bG93IGlzIGEgcmVuZGVyaW5nIG9mIHRoZSBwYWdlIHVwIHRvIHRoZSBmaXJzdCBlcnJvci4iKSwg
ZWMpOworCisgICAgcmV0dXJuIHJlcG9ydEVsZW1lbnQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKCkKK3sKKyNpZiBVU0UoUVhNTFNUUkVBTSkK
KyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
IC8vIE9uZSBvciBtb3JlIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiB0aGUgY29k
ZS4gRGlzcGxheSBhbiBlcnJvciBibG9jayB0byB0aGUgdXNlciBhYm92ZQorICAgIC8vIHRoZSBu
b3JtYWwgY29udGVudCAodGhlIERPTSB0cmVlIGlzIGNyZWF0ZWQgbWFudWFsbHkgYW5kIGluY2x1
ZGVzIGxpbmUvY29sIGluZm8gcmVnYXJkaW5nCisgICAgLy8gd2hlcmUgdGhlIGVycm9ycyBhcmUg
bG9jYXRlZCkKKworICAgIC8vIENyZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQorICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50
KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgeworICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFn
LCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMp
OworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50
KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHks
IGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKKyAgICB9CisjaWYg
RU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgp
ID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpIHsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwor
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGJv
ZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVj
KTsKKyAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBlYyk7CisgICAg
ICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudC5nZXQoKSwgZWMpOworICAgICAg
ICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgIH0KKyNlbmRpZgorICAgIFJlZlB0
cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihk
b2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKKyAgICBkb2N1bWVudEVsZW1lbnQtPmluc2VydEJl
Zm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSwgZWMpOwor
I2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChkb2N1bWVudC0+dHJhbnNmb3JtU291cmNlRG9jdW1l
bnQoKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gZG9jdW1lbnQtPmNy
ZWF0ZUVsZW1lbnQocFRhZywgZmFsc2UpOworICAgICAgICBwYXJhZ3JhcGgtPnNldEF0dHJpYnV0
ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIik7CisgICAgICAgIHBhcmFncmFwaC0+
YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3VtZW50IHdhcyBj
cmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRyYW5zZm9ybWF0aW9uLiBUaGUgbGluZSBh
bmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20gdGhlIHRyYW5zZm9ybWVkIHJlc3VsdC4i
KSwgZWMpOworICAgICAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChwYXJhZ3JhcGgucmVs
ZWFzZSgpLCBlYyk7CisgICAgfQorI2VuZGlmCisgICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZO
ZWVkZWQoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQoreworICAgIEFTU0VSVF9VTlVTRUQodW51c2Vk
UmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1fcGVuZGluZ1NjcmlwdCk7CisgICAgQVNTRVJU
KG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDApOworCisgICAgU2NyaXB0U291cmNl
Q29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgYm9vbCBlcnJvck9j
Y3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CisgICAgYm9vbCB3YXND
YW5jZWxlZCA9IG1fcGVuZGluZ1NjcmlwdC0+d2FzQ2FuY2VsZWQoKTsKKworICAgIG1fcGVuZGlu
Z1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fcGVuZGluZ1NjcmlwdCA9IDA7CisK
KyAgICBSZWZQdHI8RWxlbWVudD4gZSA9IG1fc2NyaXB0RWxlbWVudDsKKyAgICBtX3NjcmlwdEVs
ZW1lbnQgPSAwOworCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudChlLmdldCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisKKyAgICAvLyBK
YXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhpcyBwYXJzZXIsIG1ha2Ugc3VyZSBpdCdzIGtlcHQgYWxp
dmUgZXZlbiBpZiBkZXRhY2hlZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3Rl
Y3QodGhpcyk7CisgICAgCisgICAgaWYgKGVycm9yT2NjdXJyZWQpCisgICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIGVsc2UgaWYgKCF3YXNDYW5jZWxlZCkg
eworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAg
ICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaExvYWRFdmVudCgpOworICAgIH0KKworICAgIG1f
c2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICBpZiAoIWlzRGV0YWNoZWQoKSAmJiAhbV9yZXF1ZXN0
aW5nU2NyaXB0KQorICAgICAgICByZXN1bWVQYXJzaW5nKCk7Cit9CisKK2Jvb2wgWE1MRG9jdW1l
bnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bl
bmRpbmdTY3JpcHQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNlUGFyc2luZygp
Cit7CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhcnNlclBhdXNlZCA9IHRydWU7Cit9CisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNl
RG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGlmICghY2h1bmsubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50
IHRoZSBIVE1MNSBYTUwgRnJhZ21lbnQgcGFyc2luZyBhbGdvcml0aG06CisgICAgLy8gaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhl
LXhodG1sLXN5bnRheC5odG1sI3htbC1mcmFnbWVudC1wYXJzaW5nLWFsZ29yaXRobQorICAgIC8v
IEZvciBub3cgd2UgaGF2ZSBhIGhhY2sgZm9yIHNjcmlwdC9zdHlsZSBpbm5lckhUTUwgc3VwcG9y
dDoKKyAgICBpZiAoY29udGV4dEVsZW1lbnQgJiYgKGNvbnRleHRFbGVtZW50LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGNvbnRleHRFbGVtZW50LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpzdHlsZVRhZykpKSB7CisgICAgICAgIGZyYWdtZW50LT5wYXJzZXJBZGRDaGls
ZChmcmFnbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUoY2h1bmspKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBwYXJz
ZXIgPSBYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwg
c2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgYm9vbCB3ZWxsRm9ybWVkID0gcGFyc2VyLT5hcHBl
bmRGcmFnbWVudFNvdXJjZShjaHVuayk7CisgICAgLy8gRG8gbm90IGNhbGwgZmluaXNoKCkuICBD
dXJyZW50IGZpbmlzaCgpIGFuZCBkb0VuZCgpIGltcGxlbWVudGF0aW9ucyB0b3VjaCB0aGUgbWFp
biBEb2N1bWVudC9sb2FkZXIKKyAgICAvLyBhbmQgY2FuIGNhdXNlIGNyYXNoZXMgaW4gdGhlIGZy
YWdtZW50IGNhc2UuCisgICAgcGFyc2VyLT5kZXRhY2goKTsgLy8gQWxsb3dzIH5Eb2N1bWVudFBh
cnNlciB0byBhc3NlcnQgaXQgd2FzIGRldGFjaGVkIGJlZm9yZSBkZXN0cnVjdGlvbi4KKyAgICBy
ZXR1cm4gd2VsbEZvcm1lZDsgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSdzIHdlbGxGb3JtZWQg
aXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2VsbEZvcm1lZCgpLgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2FjZGQyNWM1NWRjMDM1YjhmMzJhNzQxNzVhNDZkOTg5ZWViMjc1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBT
YW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBYTUxEb2N1bWVudFBhcnNlcl9o
CisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgVVNFKFFY
TUxTVFJFQU0pCisjaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaWJ4
bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBDYWNoZWRTY3Jp
cHQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIERvY3VtZW50RnJhZ21lbnQ7
CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFz
cyBQZW5kaW5nQ2FsbGJhY2tzOworY2xhc3MgVGV4dDsKKworI2lmICFVU0UoUVhNTFNUUkVBTSkK
KyAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8WE1MUGFyc2Vy
Q29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MUGFy
c2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVz
ZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2
b2lkKiB1c2VyRGF0YSk7CisgICAgICAgIH5YTUxQYXJzZXJDb250ZXh0KCk7CisgICAgICAgIHht
bFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4bWxQYXJzZXJDdHh0UHRyIGNv
bnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7CisgICAgfTsKKyNlbmRp
ZgorCisgICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcq
IHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWE1MRG9j
dW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVy
bWlzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxE
b2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlzc2lvbikpOworICAgICAgICB9
CisKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7CisKKyAgICAgICAgLy8gRXhwb3NlZCBm
b3IgY2FsbGJhY2tzOgorICAgICAgICBlbnVtIEVycm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZhdGFs
LCBmYXRhbCB9OworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hh
ciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOworICAgICAgICB2
b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0
aW9uMSk7CisKKyAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7
IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlzWEhUTUxEb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CisjaWYgRU5BQkxFKFhI
VE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7
IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9CisgICAgICAgIGJvb2wgaXNYSFRNTE1Q
RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9CisjZW5kaWYK
KworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5n
JiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92
ZSBpdD8KKyAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAh
bV9zYXdFcnJvcjsgfQorCisgICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29u
c3Q7CisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsK
KworICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCosIEZy
YW1lVmlldyogPSAwKTsKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVu
dCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworCisgICAgICAgIC8v
IEZyb20gRG9jdW1lbnRQYXJzZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgICAgICB2
aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dh
aXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2lu
ZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgICAgIHZpcnR1YWwgaW50
IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0Owor
CisgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAgICAgdm9pZCBlbmQo
KTsKKworICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOworICAgICAgICB2b2lkIHJlc3VtZVBh
cnNpbmcoKTsKKworICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmlu
ZyYpOworCisjaWYgVVNFKFFYTUxTVFJFQU0pCitwcml2YXRlOgorICAgICAgICB2b2lkIHBhcnNl
KCk7CisgICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOworICAgICAgICB2b2lkIHBhcnNlU3Rh
cnRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7CisgICAgICAgIHZv
aWQgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAgIHZvaWQgcGFyc2VD
b21tZW50KCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyAgICAgICAgdm9pZCBwYXJz
ZUR0ZCgpOworICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CisjZWxzZQorcHVibGljOgor
ICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCisgICAgICAgIHZvaWQgZXJyb3Io
RXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdURl9BVFRSSUJV
VEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENo
YXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFy
KiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2Rl
ZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOworICAgICAgICB2b2lk
IGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lkIGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciog
cywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHht
bENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7CisgICAgICAgIHZvaWQgY2RhdGFC
bG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKKyAgICAgICAgdm9pZCBjb21tZW50KGNv
bnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lkIHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hh
ciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKTsKKyAg
ICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxD
aGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCk7CisgICAgICAgIHZvaWQg
ZW5kRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5pdGlh
bGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5nKCkpOworCisg
ICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKKyAgICAgICAgdm9p
ZCBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygp
OworCisgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKKworICAgICAgICB2
b2lkIGVudGVyVGV4dCgpOworICAgICAgICB2b2lkIGV4aXRUZXh0KCk7CisKKyAgICAgICAgdm9p
ZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRvRW5kKCk7CisKKyAgICAg
ICAgRnJhbWVWaWV3KiBtX3ZpZXc7CisKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VG
b3JUcmFuc2Zvcm07CisKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVhtbFN0cmVhbVJl
YWRlciBtX3N0cmVhbTsKKyAgICAgICAgYm9vbCBtX3dyb3RlVGV4dDsKKyNlbHNlCisgICAgICAg
IHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCA/IG1f
Y29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKKyAgICAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRl
eHQ+IG1fY29udGV4dDsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IG1fcGVuZGlu
Z0NhbGxiYWNrczsKKyAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1fYnVmZmVyZWRUZXh0OworI2Vu
ZGlmCisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5vZGU7CisgICAgICAgIFZlY3Rv
cjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOworCisgICAgICAgIFJlZlB0cjxU
ZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKworICAgICAgICBib29sIG1fc2F3RXJyb3I7CisgICAgICAg
IGJvb2wgbV9zYXdDU1M7CisgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CisgICAgICAg
IGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsK
KyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgorCisgICAgICAg
IGJvb2wgbV9wYXJzZXJQYXVzZWQ7CisgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0Owor
ICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOworCisgICAgICAgIGludCBtX2Vycm9yQ291bnQ7
CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3NpdGlvbjsKKyAgICAgICAgU3Ry
aW5nIG1fZXJyb3JNZXNzYWdlczsKKworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2Ny
aXB0RWxlbWVudDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRpb247
CisKKyAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKKyAgICAgICAgQXRvbWljU3RyaW5n
IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKKyAgICAgICAgUHJl
Zml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VNYXA7CisgICAgICAgIFNlZ21l
bnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CisgICAgICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CisgICAgfTsKKworI2lmIEVOQUJMRShYU0xUKQor
dm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKKyNlbmRpZgorCitIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2Vy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYzOWZiNGVjN2RlZTA3MGE4MzUxNWFlMGM0ZjQx
MGY2YjcyODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC0wLDAgKzEsMTUxOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSA8cG1rQHBvc3QuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgorCisjaW5jbHVkZSAiQ0RB
VEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbWVu
dC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRU
eXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIuaCIKKyNpbmNs
dWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlwdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlICJYTUxO
U05hbWVzLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIgorI2luY2x1ZGUg
PGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFhTTFQpCisjaW5jbHVk
ZSAiWE1MVHJlZVZpZXdlci5oIgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2VuZGlmCisK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2Vu
ZGlmCisKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZW5kaW5n
Q2FsbGJhY2tzKTsKK3B1YmxpYzoKKyAgICB+UGVuZGluZ0NhbGxiYWNrcygpIHsgfQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdDYWxsYmFja3MpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogeG1sTG9j
YWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwg
aW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2Rl
ZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBPd25Q
dHI8UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3
IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+eG1s
TG9jYWxOYW1lID0geG1sU3RyZHVwKHhtbExvY2FsTmFtZSk7CisgICAgICAgIGNhbGxiYWNrLT54
bWxQcmVmaXggPSB4bWxTdHJkdXAoeG1sUHJlZml4KTsKKyAgICAgICAgY2FsbGJhY2stPnhtbFVS
SSA9IHhtbFN0cmR1cCh4bWxVUkkpOworICAgICAgICBjYWxsYmFjay0+bmJfbmFtZXNwYWNlcyA9
IG5iX25hbWVzcGFjZXM7CisgICAgICAgIGNhbGxiYWNrLT5uYW1lc3BhY2VzID0gc3RhdGljX2Nh
c3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6ZW9mKHhtbENoYXIqKSAqIG5iX25hbWVzcGFjZXMg
KiAyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAqIDIgOyBp
KyspCisgICAgICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlc1tpXSA9IHhtbFN0cmR1cChuYW1l
c3BhY2VzW2ldKTsKKyAgICAgICAgY2FsbGJhY2stPm5iX2F0dHJpYnV0ZXMgPSBuYl9hdHRyaWJ1
dGVzOworICAgICAgICBjYWxsYmFjay0+bmJfZGVmYXVsdGVkID0gbmJfZGVmYXVsdGVkOworICAg
ICAgICBjYWxsYmFjay0+YXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHhtbENoYXIqKj4oeG1sTWFs
bG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9hdHRyaWJ1dGVzICogNSkpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAgICAgICAgLy8gRWFj
aCBhdHRyaWJ1dGUgaGFzIDUgZWxlbWVudHMgaW4gdGhlIGFycmF5OgorICAgICAgICAgICAgLy8g
bmFtZSwgcHJlZml4LCB1cmksIHZhbHVlIGFuZCBhbiBlbmQgcG9pbnRlci4KKworICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspCisgICAgICAgICAgICAgICAgY2FsbGJhY2st
PmF0dHJpYnV0ZXNbaSAqIDUgKyBqXSA9IHhtbFN0cmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgal0p
OworCisgICAgICAgICAgICBpbnQgbGVuID0gYXR0cmlidXRlc1tpICogNSArIDRdIC0gYXR0cmli
dXRlc1tpICogNSArIDNdOworCisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICog
NSArIDNdID0geG1sU3RybmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgM10sIGxlbik7CisgICAgICAg
ICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICogNSArIDRdID0gY2FsbGJhY2stPmF0dHJpYnV0
ZXNbaSAqIDUgKyAzXSArIGxlbjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kRW5kRWxl
bWVudE5TQ2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGFkb3B0
UHRyKG5ldyBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2b2lk
IGFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQorICAg
IHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRQdHIobmV3IFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2spOworCisgICAgICAgIGNhbGxi
YWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOworICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVu
OworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soY29uc3Qg
eG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQorICAgIHsKKyAgICAgICAgT3du
UHRyPFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9w
dFB0cihuZXcgUGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKTsKKworICAgICAg
ICBjYWxsYmFjay0+dGFyZ2V0ID0geG1sU3RyZHVwKHRhcmdldCk7CisgICAgICAgIGNhbGxiYWNr
LT5kYXRhID0geG1sU3RyZHVwKGRhdGEpOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChj
YWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ0RBVEFCbG9ja0Nh
bGxiYWNrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCisgICAgeworICAgICAgICBPd25QdHI8
UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGlu
Z0NEQVRBQmxvY2tDYWxsYmFjayk7CisKKyAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxTdHJuZHVw
KHMsIGxlbik7CisgICAgICAgIGNhbGxiYWNrLT5sZW4gPSBsZW47CisKKyAgICAgICAgbV9jYWxs
YmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBl
bmRDb21tZW50Q2FsbGJhY2soY29uc3QgeG1sQ2hhciogcykKKyAgICB7CisgICAgICAgIE93blB0
cjxQZW5kaW5nQ29tbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5n
Q29tbWVudENhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cmR1cChzKTsK
KworICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2soY29uc3QgeG1sQ2hhciog
bmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQp
CisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0ludGVybmFsU3Vic2V0Q2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKTsKKwor
ICAgICAgICBjYWxsYmFjay0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKKyAgICAgICAgY2FsbGJh
Y2stPmV4dGVybmFsSUQgPSB4bWxTdHJkdXAoZXh0ZXJuYWxJRCk7CisgICAgICAgIGNhbGxiYWNr
LT5zeXN0ZW1JRCA9IHhtbFN0cmR1cChzeXN0ZW1JRCk7CisKKyAgICAgICAgbV9jYWxsYmFja3Mu
YXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRFcnJv
ckNhbGxiYWNrKFhNTERvY3VtZW50UGFyc2VyOjpFcnJvclR5cGUgdHlwZSwgY29uc3QgeG1sQ2hh
ciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCisgICAgeworICAg
ICAgICBPd25QdHI8UGVuZGluZ0Vycm9yQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3
IFBlbmRpbmdFcnJvckNhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bWVzc2FnZSA9IHht
bFN0cmR1cChtZXNzYWdlKTsKKyAgICAgICAgY2FsbGJhY2stPnR5cGUgPSB0eXBlOworICAgICAg
ICBjYWxsYmFjay0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGNhbGxiYWNrLT5j
b2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5k
KGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsQW5kUmVtb3ZlRmly
c3RDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgIHsKKyAgICAgICAgT3du
UHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsK
KyAgICAgICAgY2FsbGJhY2stPmNhbGwocGFyc2VyKTsKKyAgICB9CisKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5pc0VtcHR5KCk7IH0KKworcHJpdmF0ZToK
KyAgICBQZW5kaW5nQ2FsbGJhY2tzKCkgeyB9CisKKyAgICBzdHJ1Y3QgUGVuZGluZ0NhbGxiYWNr
IHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NhbGxiYWNrKCkgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpID0gMDsKKyAgICB9OworCisg
ICAgc3RydWN0IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdD
YWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJlZSh4bWxMb2NhbE5hbWUpOworICAgICAg
ICAgICAgeG1sRnJlZSh4bWxQcmVmaXgpOworICAgICAgICAgICAgeG1sRnJlZSh4bWxVUkkpOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9uYW1lc3BhY2VzICogMjsgaSsrKQor
ICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZXNwYWNlc1tpXSk7CisgICAgICAgICAgICB4bWxG
cmVlKG5hbWVzcGFjZXMpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRy
aWJ1dGVzOyBpKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp
CisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlc1tpICogNSArIGpdKTsKKyAg
ICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAg
ICAgICAgICBwYXJzZXItPnN0YXJ0RWxlbWVudE5zKHhtbExvY2FsTmFtZSwgeG1sUHJlZml4LCB4
bWxVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX25hbWVzcGFj
ZXMsIGNvbnN0X2Nhc3Q8Y29uc3QgeG1sQ2hhcioqPihuYW1lc3BhY2VzKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLCBj
b25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4oYXR0cmlidXRlcykpOworICAgICAgICB9CisKKyAg
ICAgICAgeG1sQ2hhciogeG1sTG9jYWxOYW1lOworICAgICAgICB4bWxDaGFyKiB4bWxQcmVmaXg7
CisgICAgICAgIHhtbENoYXIqIHhtbFVSSTsKKyAgICAgICAgaW50IG5iX25hbWVzcGFjZXM7Cisg
ICAgICAgIHhtbENoYXIqKiBuYW1lc3BhY2VzOworICAgICAgICBpbnQgbmJfYXR0cmlidXRlczsK
KyAgICAgICAgaW50IG5iX2RlZmF1bHRlZDsKKyAgICAgICAgeG1sQ2hhcioqIGF0dHJpYnV0ZXM7
CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2sgOiBwdWJs
aWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1l
bnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5lbmRFbGVt
ZW50TnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgUGVuZGluZ0NoYXJhY3Rl
cnNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0dWFsIH5Q
ZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJl
ZShzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50
UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+Y2hhcmFjdGVy
cyhzLCBsZW4pOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAgICAgICAgaW50
IGxlbjsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25D
YWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0dWFsIH5QZW5k
aW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAg
ICB4bWxGcmVlKHRhcmdldCk7CisgICAgICAgICAgICB4bWxGcmVlKGRhdGEpOworICAgICAgICB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFy
Z2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHRhcmdldDsKKyAgICAg
ICAgeG1sQ2hhciogZGF0YTsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdDREFUQUJsb2Nr
Q2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVu
ZGluZ0NEQVRBQmxvY2tDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbEZyZWUo
cyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBh
cnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZXItPmNkYXRhQmxvY2so
cywgbGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHM7CisgICAgICAgIGludCBs
ZW47CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nQ29tbWVudENhbGxiYWNrIDogcHVibGlj
IFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdDb21tZW50Q2FsbGJh
Y2soKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxGcmVlKHMpOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcGFyc2VyLT5jb21tZW50KHMpOworICAgICAgICB9CisKKyAgICAg
ICAgeG1sQ2hhciogczsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdJbnRlcm5hbFN1YnNl
dENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBl
bmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1s
RnJlZShuYW1lKTsKKyAgICAgICAgICAgIHhtbEZyZWUoZXh0ZXJuYWxJRCk7CisgICAgICAgICAg
ICB4bWxGcmVlKHN5c3RlbUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBj
YWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBh
cnNlci0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgICAg
ICB9CisKKyAgICAgICAgeG1sQ2hhciogbmFtZTsKKyAgICAgICAgeG1sQ2hhciogZXh0ZXJuYWxJ
RDsKKyAgICAgICAgeG1sQ2hhciogc3lzdGVtSUQ7CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5k
aW5nRXJyb3JDYWxsYmFjazogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1
YWwgflBlbmRpbmdFcnJvckNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJl
ZShtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERv
Y3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+aGFu
ZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSksIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBYTUxEb2N1bWVudFBhcnNl
cjo6RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIHhtbENoYXIqIG1lc3NhZ2U7CisgICAgICAgIGlu
dCBsaW5lTnVtYmVyOworICAgICAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIH07CisKKyAgICBE
ZXF1ZTxPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiA+IG1fY2FsbGJhY2tzOworfTsKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbnQgZ2xvYmFsRGVzY3JpcHRv
ciA9IDA7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBsaWJ4bWxMb2FkZXJUaHJlYWQgPSAwOwor
CitzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKK3sKKyAgICAvLyBPbmx5IG1hdGNo
IGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0aGluIFhNTERv
Y3VtZW50UGFyc2VyIHRvIGF2b2lkCisgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBjbGllbnQgYXBw
bGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzUzCisgICAgcmV0dXJuIFhNTERvY3VtZW50UGFyc2VyU2NvcGU6
OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1s
TG9hZGVyVGhyZWFkOworfQorCitjbGFzcyBPZmZzZXRCdWZmZXIgeworcHVibGljOgorICAgIE9m
ZnNldEJ1ZmZlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiksIG1fY3VycmVu
dE9mZnNldCgwKSB7IH0KKworICAgIGludCByZWFkT3V0Qnl0ZXMoY2hhciogb3V0cHV0QnVmZmVy
LCB1bnNpZ25lZCBhc2tlZFRvUmVhZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVzTGVm
dCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVudE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQg
bGVuVG9Db3B5ID0gbWluKGFza2VkVG9SZWFkLCBieXRlc0xlZnQpOworICAgICAgICBpZiAobGVu
VG9Db3B5KSB7CisgICAgICAgICAgICBtZW1jcHkob3V0cHV0QnVmZmVyLCBtX2J1ZmZlci5kYXRh
KCkgKyBtX2N1cnJlbnRPZmZzZXQsIGxlblRvQ29weSk7CisgICAgICAgICAgICBtX2N1cnJlbnRP
ZmZzZXQgKz0gbGVuVG9Db3B5OworICAgICAgICB9CisgICAgICAgIHJldHVybiBsZW5Ub0NvcHk7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRPZmZzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBzd2l0Y2hUb1VURjE2KHht
bFBhcnNlckN0eHRQdHIgY3R4dCkKK3sKKyAgICAvLyBIYWNrIGFyb3VuZCBsaWJ4bWwyJ3MgbGFj
ayBvZiBlbmNvZGluZyBvdmVyaWRlIHN1cHBvcnQgYnkgbWFudWFsbHkKKyAgICAvLyByZXNldHRp
bmcgdGhlIGVuY29kaW5nIHRvIFVURi0xNiBiZWZvcmUgZXZlcnkgY2h1bmsuICBPdGhlcndpc2Ug
bGlieG1sCisgICAgLy8gd2lsbCBkZXRlY3QgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
PGVuY29kaW5nIG5hbWU+Ij8+IGJsb2NrcworICAgIC8vIGFuZCBzd2l0Y2ggZW5jb2RpbmdzLCBj
YXVzaW5nIHRoZSBwYXJzZSB0byBmYWlsLgorICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsK
KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOworICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQs
IEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFIDogWE1MX0NI
QVJfRU5DT0RJTkdfVVRGMTZCRSk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFsbG93RXh0ZXJu
YWxMb2FkKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0
cmluZygpOworCisgICAgLy8gT24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGxpYnhtbCBhc2tzIGZv
ciB0aGlzIFVSTCwgdGhlCisgICAgLy8gIlhNTF9YTUxfREVGQVVMVF9DQVRBTE9HIiwgb24gaW5p
dGlhbGl6YXRpb24uCisgICAgaWYgKHVybFN0cmluZyA9PSAiZmlsZTovLy9ldGMveG1sL2NhdGFs
b2ciKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBsaWJ4bWwg
Y29tcHV0ZXMgYSBVUkwgcmVsYXRpdmUgdG8gd2hlcmUgaXRzIERMTCByZXNpZGVzLgorICAgIGlm
ICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTovLy8iLCBmYWxzZSkgJiYgdXJsU3RyaW5nLmVu
ZHNXaXRoKCIvZXRjL2NhdGFsb2ciLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBEVEQuICBUaGVyZSBpc24ndCBtdWNoIHBvaW50IGluIGhh
bW1lcmluZyB3d3cudzNjLm9yZworICAgIC8vIGJ5IHJlcXVlc3RpbmcgdGhpcyBVUkwgZm9yIGV2
ZXJ5IFhIVE1MIGRvY3VtZW50LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDov
L3d3dy53My5vcmcvVFIveGh0bWwiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFNpbWlsYXJseSwgdGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiByZXF1ZXN0aW5nIHRo
ZSBTVkcgRFRELgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy53My5v
cmcvR3JhcGhpY3MvU1ZHIiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBUaGUgbGlieG1sIGRvZXNuJ3QgZ2l2ZSB1cyBhIGxvdCBvZiBjb250ZXh0IGZvciBkZWNpZGlu
ZyB3aGV0aGVyIHRvCisgICAgLy8gYWxsb3cgdGhpcyByZXF1ZXN0LiAgSW4gdGhlIHdvcnN0IGNh
c2UsIHRoaXMgbG9hZCBjb3VsZCBiZSBmb3IgYW4KKyAgICAvLyBleHRlcm5hbCBlbnRpdHkgYW5k
IHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgY291bGQgc2ltcGx5IHJlYWQgdGhlCisgICAgLy8gcmV0
cmlldmVkIGNvbnRlbnQuICBJZiB3ZSBoYWQgbW9yZSBjb250ZXh0LCB3ZSBjb3VsZCBwb3RlbnRp
YWxseSBhbGxvdworICAgIC8vIHRoZSBwYXJzZXIgdG8gbG9hZCBhIERURC4gIEFzIHRoaW5ncyBz
dGFuZCwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlCisgICAgLy8gcm91dGUgYW5kIGFsbG93IHNh
bWUtb3JpZ2luIHJlcXVlc3RzIG9ubHkuCisgICAgaWYgKCFYTUxEb2N1bWVudFBhcnNlclNjb3Bl
OjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpj
dXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCit7CisgICAgQVNTRVJUKFhN
TERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQpOworCisgICAgS1VS
TCB1cmwoS1VSTCgpLCB1cmkpOworCisgICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZCh1
cmwpKQorICAgICAgICByZXR1cm4gJmdsb2JhbERlc2NyaXB0b3I7CisKKyAgICBSZXNvdXJjZUVy
cm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgVmVjdG9yPGNo
YXI+IGRhdGE7CisKKworICAgIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJl
c291cmNlTG9hZGVyOworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKDApOwor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGdsb2JhbCBl
cnJvciBoYW5kbGVyIGFzIHdlbGwuCisKKyAgICAgICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVy
LT5mcmFtZSgpKQorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxv
YWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50
aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIHRv
IGNoZWNrIHRoZSBVUkwgYWdhaW4gYWZ0ZXIgdGhlIGxvYWQgdG8gY2F0Y2ggcmVkaXJlY3RzLgor
ICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTYz
Pi4KKyAgICBpZiAoIXNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKHJlc3BvbnNlLnVybCgpKSkKKyAg
ICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOworCisgICAgcmV0dXJuIG5ldyBPZmZzZXRC
dWZmZXIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZEZ1bmModm9pZCogY29udGV4dCwgY2hh
ciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIC8vIERvIDAtYnl0ZSByZWFkcyBpbiBjYXNlIG9m
IGEgbnVsbCBkZXNjcmlwdG9yCisgICAgaWYgKGNvbnRleHQgPT0gJmdsb2JhbERlc2NyaXB0b3Ip
CisgICAgICAgIHJldHVybiAwOworCisgICAgT2Zmc2V0QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nh
c3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7CisgICAgcmV0dXJuIGRhdGEtPnJlYWRPdXRCeXRl
cyhidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQqLCBjb25zdCBj
aGFyKiwgaW50KQoreworICAgIC8vIEFsd2F5cyBqdXN0IGRvIDAtYnl0ZSB3cml0ZXMKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZUZ1bmModm9pZCogY29udGV4dCkKK3sKKyAg
ICBpZiAoY29udGV4dCAhPSAmZ2xvYmFsRGVzY3JpcHRvcikgeworICAgICAgICBPZmZzZXRCdWZm
ZXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxPZmZzZXRCdWZmZXIqPihjb250ZXh0KTsKKyAgICAgICAg
ZGVsZXRlIGRhdGE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKFhTTFQp
CitzdGF0aWMgdm9pZCBlcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCit7CisgICAg
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlcyBzb21l
d2hlcmUuCit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgZGlkSW5pdCA9IGZhbHNlOworCitQYXNz
UmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1Bh
cnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBp
ZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAgICB4bWxSZWdp
c3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9zZUZ1
bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5G
dW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExvYWRlclRocmVhZCA9
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7CisgICAgfQorCisgICAg
eG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dChoYW5kbGVy
cywgMCwgMCwgMCwgMCk7CisgICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRhOworICAgIHBh
cnNlci0+cmVwbGFjZUVudGl0aWVzID0gdHJ1ZTsKKyAgICBzd2l0Y2hUb1VURjE2KHBhcnNlcik7
CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFyc2VyKSk7Cit9
CisKKworLy8gQ2h1bmsgc2hvdWxkIGJlIGVuY29kZWQgaW4gVVRGLTgKK1Bhc3NSZWZQdHI8WE1M
UGFyc2VyQ29udGV4dD4gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNB
WEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVu
aykKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAg
ICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRG
dW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRj
aEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExv
YWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7Cisg
ICAgfQorCisgICAgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSBjaGVja3MgdGhhdCB0aGUgbGVu
Z3RoIGRvZXNuJ3Qgb3ZlcmZsb3cgYW4gaW50LgorICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2Vy
ID0geG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dChjaHVuay5kYXRhKCksIGNodW5rLmxlbmd0aCgp
KTsKKworICAgIGlmICghcGFyc2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIENvcHkg
dGhlIHNheCBoYW5kbGVyCisgICAgbWVtY3B5KHBhcnNlci0+c2F4LCBoYW5kbGVycywgc2l6ZW9m
KHhtbFNBWEhhbmRsZXIpKTsKKworICAgIC8vIFNldCBwYXJzZXIgb3B0aW9ucy4KKyAgICAvLyBY
TUxfUEFSU0VfTk9ESUNUOiBkZWZhdWx0IGRpY3Rpb25hcnkgb3B0aW9uLgorICAgIC8vIFhNTF9Q
QVJTRV9OT0VOVDogZm9yY2UgZW50aXRpZXMgc3Vic3RpdHV0aW9ucy4KKyAgICB4bWxDdHh0VXNl
T3B0aW9ucyhwYXJzZXIsIFhNTF9QQVJTRV9OT0RJQ1QgfCBYTUxfUEFSU0VfTk9FTlQpOworCisg
ICAgLy8gSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24KKyAgICBwYXJzZXItPnNheDIgPSAxOworICAg
IHBhcnNlci0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsgLy8gV2UgYXJlIHBhcnNpbmcg
YSBDT05URU5UCisgICAgcGFyc2VyLT5kZXB0aCA9IDA7CisgICAgcGFyc2VyLT5zdHJfeG1sID0g
eG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIEJBRF9DQVNUICJ4bWwiLCAzKTsKKyAgICBwYXJz
ZXItPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1s
bnMiLCA1KTsKKyAgICBwYXJzZXItPnN0cl94bWxfbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+
ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsKKyAgICBwYXJzZXItPl9wcml2YXRlID0gdXNl
ckRhdGE7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFyc2Vy
KSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgWE1M
RG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24p
Cit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFyc2Vy
OjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVW
aWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwgbV92
aWV3KGZyYW1lVmlldykKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV9wZW5kaW5nQ2FsbGJh
Y2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgpKQorICAgICwgbV9jdXJyZW50Tm9kZShkb2N1
bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhmYWxzZSkKKyAg
ICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFs
c2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkK
KyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNs
YXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisgICAg
LCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkK
KyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQor
ICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3Np
dGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworfQorCitYTUxEb2N1bWVu
dFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5k
b2N1bWVudCgpKQorICAgICwgbV92aWV3KDApCisgICAgLCBtX2NvbnRleHQoMCkKKyAgICAsIG1f
cGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKKyAgICAsIG1fY3Vy
cmVudE5vZGUoZnJhZ21lbnQpCisgICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQorICAgICwgbV9zYXdD
U1MoZmFsc2UpCisgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKKyAgICAsIG1fc2F3Rmly
c3RFbGVtZW50KGZhbHNlKQorICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9o
YXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcGFyc2VyUGF1c2Vk
KGZhbHNlKQorICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQorICAgICwgbV9maW5pc2hD
YWxsZWQoZmFsc2UpCisgICAgLCBtX2Vycm9yQ291bnQoMCkKKyAgICAsIG1fbGFzdEVycm9yUG9z
aXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX3BlbmRp
bmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpi
ZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCisgICAg
LCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICBmcmFn
bWVudC0+cmVmKCk7CisKKyAgICAvLyBBZGQgbmFtZXNwYWNlcyBiYXNlZCBvbiB0aGUgcGFyZW50
IG5vZGUKKyAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1TdGFjazsKKyAgICB3aGlsZSAocGFyZW50
RWxlbWVudCkgeworICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1lbnQpOworCisg
ICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAg
fQorCisgICAgaWYgKGVsZW1TdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNF
bXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVN
YXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0geG1sbnNBdG9tKQorICAgICAgICAgICAgICAg
ICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9wcmVmaXhUb05hbWVzcGFjZU1hcC5zZXQoYXR0ci0+bG9jYWxOYW1lKCksIGF0dHIt
PnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYg
dGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUg
bm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFj
ZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVt
ZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVu
dEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxQYXJzZXJDb250ZXh0Ojp+WE1MUGFy
c2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29udGV4dC0+bXlEb2MpCisgICAgICAgIHhtbEZy
ZWVEb2MobV9jb250ZXh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQobV9jb250ZXh0
KTsKK30KKworWE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1bWVudFBhcnNlcigpCit7CisgICAg
Ly8gVGhlIFhNTERvY3VtZW50UGFyc2VyIHdpbGwgYWx3YXlzIGJlIGRldGFjaGVkIGJlZm9yZSBi
ZWluZyBkZXN0cm95ZWQuCisgICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkp
OworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CisKKyAgICAvLyBGSVhNRTogbV9wZW5kaW5n
U2NyaXB0IGhhbmRsaW5nIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFhNTERvY3VtZW50UGFyc2VyLmNw
cCEKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJl
bW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShj
b25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNEZXRhY2hlZCgpKTsK
KyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoKTsK
KworICAgIC8vIFByb3RlY3QgdGhlIGxpYnhtbCBjb250ZXh0IGZyb20gZGVsZXRpb24gZHVyaW5n
IGEgY2FsbGJhY2sKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY29udGV4dCA9IG1fY29u
dGV4dDsKKworICAgIC8vIGxpYlhNTCB0aHJvd3MgYW4gZXJyb3IgaWYgeW91IHRyeSB0byBzd2l0
Y2ggdGhlIGVuY29kaW5nIGZvciBhbiBlbXB0eSBzdHJpbmcuCisgICAgaWYgKHBhcnNlU3RyaW5n
Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGNhdXNlIHRoZSBwYXJzZXIg
dG8gZGV0YWNoIGR1cmluZyB4bWxQYXJzZUNodW5rCisgICAgICAgIC8vIGtlZXAgdGhpcyBhbGl2
ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxYTUxEb2N1bWVu
dFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBzd2l0Y2hUb1VURjE2KGNvbnRleHQt
PmNvbnRleHQoKSk7CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1l
bnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29u
dGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0cmlu
Zy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIpICogcGFyc2VTdHJpbmcubGVuZ3RoKCksIDAp
OworCisgICAgICAgIC8vIEphdmFTY3JpcHQgKHdoaWNoIG1heSBiZSBydW4gdW5kZXIgdGhlIHht
bFBhcnNlQ2h1bmsgY2FsbHN0YWNrKSBtYXkKKyAgICAgICAgLy8gY2F1c2UgdGhlIHBhcnNlciB0
byBiZSBzdG9wcGVkIG9yIGRldGFjaGVkLgorICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGhlcmU/
ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nlc3MgdGhlIHBhc3NlZCBzb3VyY2U/CisgICAg
aWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVyKCktPnNhd0Vy
cm9yKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9yLCByZXBvcnQg
aXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAi
RW5jb2RpbmcgZXJyb3IiLCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5saW5lLCBjb250ZXh0
LT5jb250ZXh0KCktPmlucHV0LT5jb2wpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJp
bmcpLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1s
Q2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIEF0b21pY1N0
cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQor
eworICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHN0cmluZyksIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIEF0b21pY1N0cmlu
ZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIEF0
b21pY1N0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5n
KSk7Cit9CisKK3N0cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB7CisgICAgY29uc3QgeG1sQ2hhciog
cHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKK307Cit0eXBlZGVmIHN0cnVjdCBfeG1s
U0FYMk5hbWVzcGFjZSB4bWxTQVgyTmFtZXNwYWNlOworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFu
ZGxlRWxlbWVudE5hbWVzcGFjZXMoRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgeG1sQ2hhcioq
IGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1lc3BhY2VzLCBFeGNlcHRpb25Db2RlJiBlYywg
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAg
eG1sU0FYMk5hbWVzcGFjZSogbmFtZXNwYWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMk5h
bWVzcGFjZSo+KGxpYnhtbE5hbWVzcGFjZXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf
bmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VRTmFtZSA9
IHhtbG5zQXRvbTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHRvQXRvbWlj
U3RyaW5nKG5hbWVzcGFjZXNbaV0udXJpKTsKKyAgICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJl
Zml4KQorICAgICAgICAgICAgbmFtZXNwYWNlUU5hbWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5h
bWVzcGFjZXNbaV0ucHJlZml4KTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMo
WE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5hbWVzcGFjZVFOYW1lLCBuYW1lc3BhY2VV
UkksIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAvLyBleGNlcHRp
b24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCitz
dHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHsKKyAgICBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWU7
CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKKyAg
ICBjb25zdCB4bWxDaGFyKiB2YWx1ZTsKKyAgICBjb25zdCB4bWxDaGFyKiBlbmQ7Cit9OwordHlw
ZWRlZiBzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHhtbFNBWDJBdHRyaWJ1dGVzOworCitzdGF0
aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogbmV3RWxlbWVu
dCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBF
eGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Bl
cm1pc3Npb24pCit7CisgICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSByZWludGVy
cHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKKyAgICAgICAgaW50IHZhbHVl
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0dHJpYnV0ZXNb
aV0udmFsdWUpOworICAgICAgICBBdG9taWNTdHJpbmcgYXR0clZhbHVlID0gdG9BdG9taWNTdHJp
bmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOworICAgICAgICBTdHJpbmcgYXR0
clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKKyAgICAgICAgQXRvbWlj
U3RyaW5nIGF0dHJVUkkgPSBhdHRyUHJlZml4LmlzRW1wdHkoKSA/IEF0b21pY1N0cmluZygpIDog
dG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS51cmkpOworICAgICAgICBBdG9taWNTdHJpbmcg
YXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyB0b0F0b21pY1N0cmluZyhhdHRyaWJ1
dGVzW2ldLmxvY2FsbmFtZSkgOiBhdHRyUHJlZml4ICsgIjoiICsgdG9TdHJpbmcoYXR0cmlidXRl
c1tpXS5sb2NhbG5hbWUpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5TKGF0
dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Cisg
ICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcworICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVt
ZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVm
aXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFjZXMs
IGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4bWxDaGFyKiogbGli
eG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3Mt
PmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soeG1sTG9jYWxOYW1lLCB4bWxQcmVmaXgsIHht
bFVSSSwgbmJfbmFtZXNwYWNlcywgbGlieG1sTmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5i
X2RlZmF1bHRlZCwgbGlieG1sQXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQRSBEZWNsYXJh
dGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cworICAgIGlmICghbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisg
ICAgZXhpdFRleHQoKTsKKworICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSB0b0F0b21pY1N0
cmluZyh4bWxMb2NhbE5hbWUpOworICAgIEF0b21pY1N0cmluZyB1cmkgPSB0b0F0b21pY1N0cmlu
Zyh4bWxVUkkpOworICAgIEF0b21pY1N0cmluZyBwcmVmaXggPSB0b0F0b21pY1N0cmluZyh4bWxQ
cmVmaXgpOworCisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewor
ICAgICAgICBpZiAoIXByZWZpeC5pc051bGwoKSkKKyAgICAgICAgICAgIHVyaSA9IG1fcHJlZml4
VG9OYW1lc3BhY2VNYXAuZ2V0KHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVy
aSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICB9CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkK
KyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAg
ICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcuMSBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0y
MDA2MTAyMC1BLnBkZiwKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBy
b290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJworICAg
ICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJworICAgICAgICBp
ZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAg
ICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwn
IGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1l
c3BhY2VVUkk7CisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9zYXdG
aXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisgICAgUXVhbGlm
aWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBSZWZQdHI8RWxlbWVu
dD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOwor
ICAgIGlmICghbmV3RWxlbWVudCkgeworICAgICAgICBzdG9wUGFyc2luZygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxl
bWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sTmFtZXNwYWNlcywgbmJfbmFt
ZXNwYWNlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBoYW5kbGVF
bGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgpLCBsaWJ4bWxBdHRyaWJ1dGVzLCBuYl9h
dHRyaWJ1dGVzLCBlYywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5ld0Vs
ZW1lbnQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3Jp
cHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgIGlmIChz
Y3JpcHRFbGVtZW50KQorICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSB0ZXh0UG9zaXRp
b25PbmVCYXNlZCgpOworCisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3RWxl
bWVudC5nZXQoKSk7CisKKyAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5nZXQoKSk7Cisg
ICAgaWYgKG1fdmlldyAmJiAhbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3RWxl
bWVudC0+YXR0YWNoKCk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQor
ICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpCisgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KG5ld0VsZW1lbnQuZ2V0KCkpLT5pbnNl
cnRlZEJ5UGFyc2VyKCk7CisjZW5kaWYKKworICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQgJiYg
aXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCit7CisgICAgaWYg
KGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQp
IHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFbmRFbGVtZW50TlNDYWxsYmFj
aygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSmF2YVNjcmlwdCBjYW4gZGV0
YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhpcyBpcyBub3QgcmVsZWFzZWQKKyAgICAvLyBi
ZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJz
ZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IG4gPSBtX2N1cnJlbnROb2RlOworICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpOworCisgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGlu
Z05vdEFsbG93ZWQgJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSkpKSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7
CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG4tPnJlbW92ZShlYyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUoKSB8fCAhbV92
aWV3KSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkp
OworCisgICAgLy8gVGhlIGVsZW1lbnQncyBwYXJlbnQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJl
bW92ZWQgZnJvbSBkb2N1bWVudC4KKyAgICAvLyBQYXJzaW5nIGNvbnRpbnVlcyBpbiB0aGlzIGNh
c2UsIGJ1dCBzY3JpcHRzIGFyZW4ndCBleGVjdXRlZC4KKyAgICBpZiAoIWVsZW1lbnQtPmluRG9j
dW1lbnQoKSkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVu
dChlbGVtZW50KTsKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQpIHsKKyAgICAgICAgcG9wQ3VycmVu
dE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGxvYWQgZXh0
ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cpLgorICAgIEFT
U0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwor
CisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVT
Y3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5
cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKKyNp
ZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5
cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRl
KSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1l
bnQodHJ1ZSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU2NyaXB0
IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgLy8gdGhlIGxpYnht
bDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICBp
ZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKKyAgICAgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVt
ZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9z
aXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhl
Y3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+
Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAg
ICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxv
YWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9wZW5k
aW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICAgICAgLy8gSmF2YVNj
cmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCisgICAgICAgIGlmIChpc0RldGFjaGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9
IGZhbHNlOworICAgIHBvcEN1cnJlbnROb2RlKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAgICBpZiAoaXNT
dG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewor
ICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhzLCBs
ZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xlYWZUZXh0Tm9kZSkK
KyAgICAgICAgZW50ZXJUZXh0KCk7CisgICAgbV9idWZmZXJlZFRleHQuYXBwZW5kKHMsIGxlbik7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKEVycm9yVHlwZSB0eXBlLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyNpZiBDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxFUihSVkNUKSB8
fCBDT01QSUxFUihNSU5HVykKKyAgICBjaGFyIG1bMTAyNF07CisgICAgdnNucHJpbnRmKG0sIHNp
emVvZihtKSAtIDEsIG1lc3NhZ2UsIGFyZ3MpOworI2Vsc2UKKyAgICBjaGFyKiBtOworICAgIGlm
ICh2YXNwcmludGYoJm0sIG1lc3NhZ2UsIGFyZ3MpID09IC0xKQorICAgICAgICByZXR1cm47Cisj
ZW5kaWYKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJh
Y2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1s
Q2hhcio+KG0pLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICBlbHNlCisgICAg
ICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwor
CisjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhQ09NUElMRVIoTUlO
R1cpCisgICAgZnJlZShtKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFy
KiBkYXRhKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5k
UHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2sodGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICAvLyAjIyMgaGFuZGxlIGV4Y2Vw
dGlvbnMKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UHJvY2Vzc2luZ0lu
c3RydWN0aW9uPiBwaSA9IGRvY3VtZW50KCktPmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigK
KyAgICAgICAgdG9TdHJpbmcodGFyZ2V0KSwgdG9TdHJpbmcoZGF0YSksIGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7
CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChwaS5nZXQoKSk7CisgICAgaWYg
KG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAgIHBpLT5hdHRhY2goKTsKKworICAg
IHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlmIChwaS0+aXNDU1MoKSkKKyAg
ICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShYU0xUKQorICAgIG1fc2F3WFNMVHJh
bnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOworICAgIGlmIChtX3Nh
d1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkK
KyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGlz
U3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsK
KyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDREFUQUJsb2NrQ2FsbGJhY2socywg
bGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBS
ZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9jdW1l
bnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hp
bGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQo
KSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmNvbW1lbnQoY29uc3QgeG1sQ2hhciogcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3Bl
bmRpbmdDYWxsYmFja3MtPmFwcGVuZENvbW1lbnRDYWxsYmFjayhzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29tbWVudD4gbmV3Tm9k
ZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7CisgICAgbV9jdXJy
ZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAm
JiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisK
K3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVy
c2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKQoreworICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKHZlcnNpb24pCisgICAgICAgIGRvY3VtZW50
KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVyc2lvbiksIGVjKTsKKyAgICBkb2N1bWVudCgp
LT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUgPT0gMSwgZWMpOyAvLyBwb3NzaWJsZSB2YWx1
ZXMgYXJlIDAsIDEsIGFuZCAtMQorICAgIGlmIChlbmNvZGluZykKKyAgICAgICAgZG9jdW1lbnQo
KS0+c2V0WE1MRW5jb2RpbmcodG9TdHJpbmcoZW5jb2RpbmcpKTsKK30KKwordm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFy
KiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1J
RCkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZEludGVy
bmFsU3Vic2V0Q2FsbGJhY2sobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50KCkpIHsKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7CisgICAgICAg
IFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CisgICAgICAgIGlmIChleHRJZCA9PSAi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIKKyAgICAgICAgICAgIHx8IGV4
dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikgeworICAgICAg
ICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFy
YXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBj
b2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAgICAgICAgICAg
IG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0b1N0cmluZyhz
eXN0ZW1JRCkpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgWE1MRG9jdW1lbnRQYXJzZXIq
IGdldFBhcnNlcih2b2lkKiBjbG9zdXJlKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9
IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxYTUxEb2N1bWVudFBhcnNlcio+KGN0eHQtPl9wcml2YXRlKTsKK30KKworLy8gVGhp
cyBpcyBhIGhhY2sgYXJvdW5kIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTIxOQorLy8gT3RoZXJ3aXNlIGxpYnhtbCBzZWVtcyB0byBjYWxsIGFsbCB0aGUgU0FY
IGNhbGxiYWNrcyB0d2ljZSBmb3IgYW55IHJlcGxhY2VkIGVudGl0eS4KK3N0YXRpYyBpbmxpbmUg
Ym9vbCBoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKHZvaWQqIGNsb3N1cmUpCit7CisjaWYgTElC
WE1MX1ZFUlNJT04gPj0gMjA2MjcKKyAgICBVTlVTRURfUEFSQU0oY2xvc3VyZSk7CisKKyAgICAv
LyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBsaWJ4bWwgMi42LjI3LgorICAgIHJldHVybiBm
YWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNs
b3N1cmUpLT5ub2RlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0RWxlbWVudE5zSGFu
ZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWUsIGNvbnN0IHhtbENo
YXIqIHByZWZpeCwgY29uc3QgeG1sQ2hhciogdXJpLCBpbnQgbmJfbmFtZXNwYWNlcywgY29uc3Qg
eG1sQ2hhcioqIG5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVk
LCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaGFja0Fyb3Vu
ZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFy
c2VyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhsb2NhbG5hbWUsIHByZWZpeCwgdXJpLCBuYl9u
YW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnht
bEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZCBlbmRFbGVtZW50TnNIYW5kbGVyKHZvaWQq
IGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciop
Cit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZW5kRWxlbWVudE5zKCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNoYXJhY3RlcnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENo
YXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xv
c3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2hhcmFj
dGVycyhzLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5k
bGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciog
ZGF0YSkKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5wcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24odGFyZ2V0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgY2RhdGFCbG9ja0hhbmRsZXIo
dm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAgICBpZiAoaGFj
a0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z2V0UGFyc2VyKGNsb3N1cmUpLT5jZGF0YUJsb2NrKHMsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lk
IGNvbW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIGNvbW1lbnQpCit7
CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y29tbWVudChjb21tZW50KTsKK30KKwor
V1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKK3N0YXRpYyB2b2lkIHdhcm5pbmdIYW5kbGVyKHZv
aWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFy
Z3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUp
LT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6d2FybmluZywgbWVzc2FnZSwgYXJncyk7CisgICAg
dmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKQorc3RhdGljIHZv
aWQgZmF0YWxFcnJvckhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
Li4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBtZXNzYWdlKTsK
KyAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVycm9yKFhNTERvY3VtZW50UGFyc2VyOjpmYXRhbCwg
bWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRFX1BS
SU5URigyLCAzKQorc3RhdGljIHZvaWQgbm9ybWFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFf
c3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxE
b2N1bWVudFBhcnNlcjo6bm9uRmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOworICAgIHZhX2VuZChhcmdz
KTsKK30KKworLy8gVXNpbmcgYSBzdGF0aWMgZW50aXR5IGFuZCBtYXJraW5nIGl0IFhNTF9JTlRF
Uk5BTF9QUkVERUZJTkVEX0VOVElUWSBpcworLy8gYSBoYWNrIHRvIGF2b2lkIG1hbGxvYy9mcmVl
LiBVc2luZyBhIGdsb2JhbCB2YXJpYWJsZSBsaWtlIHRoaXMgY291bGQgY2F1c2UgdHJvdWJsZQor
Ly8gaWYgbGlieG1sIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2VyZSB0byBjaGFuZ2UKK3N0YXRp
YyB4bWxDaGFyIHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0WzVdID0gezAsIDAsIDAsIDAsIDB9Owor
CitzdGF0aWMgeG1sRW50aXR5UHRyIHNoYXJlZFhIVE1MRW50aXR5KCkKK3sKKyAgICBzdGF0aWMg
eG1sRW50aXR5IGVudGl0eTsKKyAgICBpZiAoIWVudGl0eS50eXBlKSB7CisgICAgICAgIGVudGl0
eS50eXBlID0gWE1MX0VOVElUWV9ERUNMOworICAgICAgICBlbnRpdHkub3JpZyA9IHNoYXJlZFhI
VE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuY29udGVudCA9IHNoYXJlZFhIVE1MRW50
aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuZXR5cGUgPSBYTUxfSU5URVJOQUxfUFJFREVGSU5F
RF9FTlRJVFk7CisgICAgfQorICAgIHJldHVybiAmZW50aXR5OworfQorCitzdGF0aWMgeG1sRW50
aXR5UHRyIGdldFhIVE1MRW50aXR5KGNvbnN0IHhtbENoYXIqIG5hbWUpCit7CisgICAgVUNoYXIg
YyA9IGRlY29kZU5hbWVkRW50aXR5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5hbWUp
KTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyB2YWx1ZSA9
IFN0cmluZygmYywgMSkudXRmOCgpOworICAgIEFTU0VSVCh2YWx1ZS5sZW5ndGgoKSA8IDUpOwor
ICAgIHhtbEVudGl0eVB0ciBlbnRpdHkgPSBzaGFyZWRYSFRNTEVudGl0eSgpOworICAgIGVudGl0
eS0+bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgZW50aXR5LT5uYW1lID0gbmFtZTsKKyAg
ICBtZW1jcHkoc2hhcmVkWEhUTUxFbnRpdHlSZXN1bHQsIHZhbHVlLmRhdGEoKSwgZW50aXR5LT5s
ZW5ndGggKyAxKTsKKworICAgIHJldHVybiBlbnRpdHk7Cit9CisKK3N0YXRpYyB4bWxFbnRpdHlQ
dHIgZ2V0RW50aXR5SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBuYW1lKQor
eworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQ
dHI+KGNsb3N1cmUpOworICAgIHhtbEVudGl0eVB0ciBlbnQgPSB4bWxHZXRQcmVkZWZpbmVkRW50
aXR5KG5hbWUpOworICAgIGlmIChlbnQpIHsKKyAgICAgICAgZW50LT5ldHlwZSA9IFhNTF9JTlRF
Uk5BTF9QUkVERUZJTkVEX0VOVElUWTsKKyAgICAgICAgcmV0dXJuIGVudDsKKyAgICB9CisKKyAg
ICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOworICAgIGlmICghZW50
ICYmIChnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhI
VE1MTVApCisgICAgICAgICAgICAgICAgIHx8IGdldFBhcnNlcihjbG9zdXJlKS0+aXNYSFRNTE1Q
RG9jdW1lbnQoKQorI2VuZGlmCisgICAgICAgKSkgeworICAgICAgICBlbnQgPSBnZXRYSFRNTEVu
dGl0eShuYW1lKTsKKyAgICAgICAgaWYgKGVudCkKKyAgICAgICAgICAgIGVudC0+ZXR5cGUgPSBY
TUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk7CisgICAgfQorCisgICAgcmV0dXJuIGVudDsKK30K
Kworc3RhdGljIHZvaWQgc3RhcnREb2N1bWVudEhhbmRsZXIodm9pZCogY2xvc3VyZSkKK3sKKyAg
ICB4bWxQYXJzZXJDdHh0KiBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4dCo+KGNsb3N1
cmUpOworICAgIHN3aXRjaFRvVVRGMTYoY3R4dCk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5z
dGFydERvY3VtZW50KGN0eHQtPnZlcnNpb24sIGN0eHQtPmVuY29kaW5nLCBjdHh0LT5zdGFuZGFs
b25lKTsKKyAgICB4bWxTQVgyU3RhcnREb2N1bWVudChjbG9zdXJlKTsKK30KKworc3RhdGljIHZv
aWQgZW5kRG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCit7CisgICAgZ2V0UGFyc2VyKGNs
b3N1cmUpLT5lbmREb2N1bWVudCgpOworICAgIHhtbFNBWDJFbmREb2N1bWVudChjbG9zdXJlKTsK
K30KKworc3RhdGljIHZvaWQgaW50ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNv
bnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENo
YXIqIHN5c3RlbUlEKQoreworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+aW50ZXJuYWxTdWJzZXQo
bmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgIHhtbFNBWDJJbnRlcm5hbFN1YnNldChj
bG9zdXJlLCBuYW1lLCBleHRlcm5hbElELCBzeXN0ZW1JRCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4
dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3Qg
eG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1sQ2hhciopCit7CisgICAgU3RyaW5nIGV4dElk
ID0gdG9TdHJpbmcoZXh0ZXJuYWxJZCk7CisgICAgaWYgKChleHRJZCA9PSAiLS8vVzNDLy9EVEQg
WEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1cz
Qy8vRFREIFhIVE1MIDEuMS8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFRE
IFhIVE1MIDEuMCBTdHJpY3QvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RU
RCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0Mv
L0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0Mv
L0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCisgICAgICAgIHx8IChleHRJZCA9
PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VO
IikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAx
LjAvL0VOIikKKyAgICAgICApCisgICAgICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c2V0SXNYSFRN
TERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5v
dC4KK30KKworc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIodm9pZCosIGNv
bnN0IHhtbENoYXIqLCBpbnQpCit7CisgICAgLy8gbm90aGluZyB0byBkbywgYnV0IHdlIG5lZWQg
dGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIKKyAgICAvLyBodHRwOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUKKyAgICAvLyBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyCit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6Omlu
aXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IENTdHJpbmcmIGNodW5rKQoreworICAgIHhtbFNB
WEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisKKyAgICBz
YXguZXJyb3IgPSBub3JtYWxFcnJvckhhbmRsZXI7CisgICAgc2F4LmZhdGFsRXJyb3IgPSBmYXRh
bEVycm9ySGFuZGxlcjsKKyAgICBzYXguY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNIYW5kbGVyOwor
ICAgIHNheC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5k
bGVyOworICAgIHNheC5jZGF0YUJsb2NrID0gY2RhdGFCbG9ja0hhbmRsZXI7CisgICAgc2F4LmNv
bW1lbnQgPSBjb21tZW50SGFuZGxlcjsKKyAgICBzYXgud2FybmluZyA9IHdhcm5pbmdIYW5kbGVy
OworICAgIHNheC5zdGFydEVsZW1lbnROcyA9IHN0YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBz
YXguZW5kRWxlbWVudE5zID0gZW5kRWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguZ2V0RW50aXR5
ID0gZ2V0RW50aXR5SGFuZGxlcjsKKyAgICBzYXguc3RhcnREb2N1bWVudCA9IHN0YXJ0RG9jdW1l
bnRIYW5kbGVyOworICAgIHNheC5lbmREb2N1bWVudCA9IGVuZERvY3VtZW50SGFuZGxlcjsKKyAg
ICBzYXguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5hbFN1YnNldEhhbmRsZXI7CisgICAgc2F4LmV4
dGVybmFsU3Vic2V0ID0gZXh0ZXJuYWxTdWJzZXRIYW5kbGVyOworICAgIHNheC5pZ25vcmFibGVX
aGl0ZXNwYWNlID0gaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXI7CisgICAgc2F4LmVudGl0eURl
Y2wgPSB4bWxTQVgyRW50aXR5RGVjbDsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FYMl9N
QUdJQzsKKyAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7CisgICAgbV9zYXdFcnJv
ciA9IGZhbHNlOworICAgIG1fc2F3Q1NTID0gZmFsc2U7CisgICAgbV9zYXdYU0xUcmFuc2Zvcm0g
PSBmYWxzZTsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOworCisgICAgWE1MRG9jdW1l
bnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsK
KyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fY29udGV4dCA9IFhNTFBhcnNl
ckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcigmc2F4LCB0aGlzLCBjaHVuayk7CisgICAgZWxz
ZSB7CisgICAgICAgIEFTU0VSVCghY2h1bmsuZGF0YSgpKTsKKyAgICAgICAgbV9jb250ZXh0ID0g
WE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsIHRoaXMpOworICAgIH0K
K30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworICAgIGlmICghaXNTdG9w
cGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAgLy8gVGVsbCBs
aWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBYTUxEb2N1
bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkp
OworICAgICAgICAgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29udGV4dCgpLCAwLCAwLCAxKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAgICAgfQorICAg
IH0KKworI2lmIEVOQUJMRShYU0xUKQorICAgIFhNTFRyZWVWaWV3ZXIgeG1sVHJlZVZpZXdlcihk
b2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdlck1vZGUgPSAhbV9zYXdFcnJvciAmJiAhbV9z
YXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmIHhtbFRyZWVWaWV3ZXIuaGFzTm9TdHlsZUlu
Zm9ybWF0aW9uKCk7CisgICAgaWYgKHhtbFZpZXdlck1vZGUpCisgICAgICAgIHhtbFRyZWVWaWV3
ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KCk7CisKKyAgICBpZiAobV9zYXdYU0xUcmFu
c2Zvcm0pIHsKKyAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5nKGRvY3VtZW50
KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0s
IGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VHJh
bnNmb3JtU291cmNlKGFkb3B0UHRyKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSkpOworCisgICAg
ICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2N1bWVudCB0
aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hlZXRzLgorICAgICAg
ICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKworICAgICAgICBEb2N1
bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIEVOQUJM
RShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
dXJsKQoreworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRyCisgICAgLy8g
RklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMgc28gdGhhdCBhIGZhaWx1cmUgdG8gcGFyc2Ug
dGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgorICAgIC8vIGdvb2QgZXJyb3IgbWVzc2FnZXMu
CisgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
Qk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJkJP
TSk7CisKKyAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGNhY2hlZFJlc291cmNlTG9h
ZGVyLCBlcnJvckZ1bmMsIDApOworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxSZWFkTWVt
b3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNvdXJjZS5jaGFyYWN0ZXJzKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXJsLmxhdGluMSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNMVF9QQVJTRV9PUFRJT05TKTsK
KyAgICByZXR1cm4gc291cmNlRG9jOworfQorI2VuZGlmCisKK2ludCBYTUxEb2N1bWVudFBhcnNl
cjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlv
biBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4g
MC1iYXNlZC4KKyAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6
IDE7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNl
ZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgorICAgIHJldHVybiBjb250
ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxOworfQorCitUZXh0UG9zaXRpb24wIFhN
TERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHhtbFBhcnNlckN0
eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICAvLyBGSVhN
RTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJzLCBidXQgd2Ug
dHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25zaXN0ZW50IHdp
dGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAgIC8vICAgICAg
ICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOwor
fQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLCBpbiBjb250
cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVwbGFjZSB0ZXh0
UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlv
bk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlz
LT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gVGV4dFBvc2l0
aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpP
bmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAg
ICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0
LT5jb2wpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQorewor
ICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOworICAgIGlmIChjb250ZXh0KCkpCisg
ICAgICAgIHhtbFN0b3BQYXJzZXIoY29udGV4dCgpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNTRVJUKCFpc0RldGFjaGVkKCkpOworICAg
IEFTU0VSVChtX3BhcnNlclBhdXNlZCk7CisKKyAgICBtX3BhcnNlclBhdXNlZCA9IGZhbHNlOwor
CisgICAgLy8gRmlyc3QsIGV4ZWN1dGUgYW55IHBlbmRpbmcgY2FsbGJhY2tzCisgICAgd2hpbGUg
KCFtX3BlbmRpbmdDYWxsYmFja3MtPmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdDYWxs
YmFja3MtPmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKHRoaXMpOworCisgICAgICAgIC8vIEEg
Y2FsbGJhY2sgcGF1c2VkIHRoZSBwYXJzZXIKKyAgICAgICAgaWYgKG1fcGFyc2VyUGF1c2VkKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZW4sIHdyaXRlIGFueSBwZW5k
aW5nIGRhdGEKKyAgICBTZWdtZW50ZWRTdHJpbmcgcmVzdCA9IG1fcGVuZGluZ1NyYzsKKyAgICBt
X3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBhcHBlbmQocmVzdCk7CisKKyAgICAvLyBGaW5hbGx5
LCBpZiBmaW5pc2goKSBoYXMgYmVlbiBjYWxsZWQgYW5kIHdyaXRlKCkgZGlkbid0IHJlc3VsdAor
ICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1ZWQsIGNhbGwgZW5kKCkK
KyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkp
CisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFn
bWVudFNvdXJjZShjb25zdCBTdHJpbmcmIGNodW5rKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0
KTsKKyAgICBBU1NFUlQobV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAgQ1N0cmluZyBjaHVua0Fz
VXRmOCA9IGNodW5rLnV0ZjgoKTsKKyAgICAKKyAgICAvLyBsaWJ4bWwyIHRha2VzIGFuIGludCBm
b3IgYSBsZW5ndGgsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgaGFuZGxlIFhNTCBjaHVua3MgbGFyZ2Vy
IHRoYW4gMiBHaUIuCisgICAgaWYgKGNodW5rQXNVdGY4Lmxlbmd0aCgpID4gSU5UX01BWCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY2h1bmtB
c1V0ZjgpOworICAgIHhtbFBhcnNlQ29udGVudChjb250ZXh0KCkpOworICAgIGVuZERvY3VtZW50
KCk7IC8vIENsb3NlIGFueSBvcGVuIHRleHQgbm9kZXMuCisKKyAgICAvLyBGSVhNRTogSWYgdGhp
cyBjb2RlIGlzIGFjdHVhbGx5IG5lZWRlZCwgaXQgc2hvdWxkIHByb2JhYmx5IG1vdmUgdG8gZmlu
aXNoKCkKKyAgICAvLyBYTUxEb2N1bWVudFBhcnNlclF0IGhhcyBhIHNpbWlsYXIgY2hlY2sgKG1f
c3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVu
dEVycm9yKSBpbiBkb0VuZCgpLgorICAgIC8vIENoZWNrIGlmIGFsbCB0aGUgY2h1bmsgaGFzIGJl
ZW4gcHJvY2Vzc2VkLgorICAgIGxvbmcgYnl0ZXNQcm9jZXNzZWQgPSB4bWxCeXRlQ29uc3VtZWQo
Y29udGV4dCgpKTsKKyAgICBpZiAoYnl0ZXNQcm9jZXNzZWQgPT0gLTEgfHwgKCh1bnNpZ25lZCBs
b25nKWJ5dGVzUHJvY2Vzc2VkKSAhPSBjaHVua0FzVXRmOC5sZW5ndGgoKSkgeworICAgICAgICAv
LyBGSVhNRTogSSBkb24ndCBiZWxpZXZlIHdlIGNhbiBoaXQgdGhpcyBjYXNlIHdpdGhvdXQgYWxz
byBoYXZpbmcgc2VlbiBhbiBlcnJvciBvciBhIG51bGwgYnl0ZS4KKyAgICAgICAgLy8gSWYgd2Ug
aGl0IHRoaXMgQVNTRVJULCB3ZSd2ZSBmb3VuZCBhIHRlc3QgY2FzZSB3aGljaCBkZW1vbnN0cmF0
ZXMgdGhlIG5lZWQgZm9yIHRoaXMgY29kZS4KKyAgICAgICAgQVNTRVJUKG1fc2F3RXJyb3IgfHwg
KGJ5dGVzUHJvY2Vzc2VkID49IDAgJiYgIWNodW5rQXNVdGY4LmRhdGEoKVtieXRlc1Byb2Nlc3Nl
ZF0pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vIGVycm9yIGlm
IHRoZSBjaHVuayBpcyB3ZWxsIGZvcm1lZCBvciBpdCBpcyBub3QgYnV0IHdlIGhhdmUgbm8gZXJy
b3IuCisgICAgcmV0dXJuIGNvbnRleHQoKS0+d2VsbEZvcm1lZCB8fCAheG1sQ3R4dEdldExhc3RF
cnJvcihjb250ZXh0KCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0ZSB7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gYXR0cmlidXRlczsKKyAgICBib29sIGdvdEF0dHJpYnV0ZXM7Cit9OworCitzdGF0aWMg
dm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0
IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogLyp4bWxQcmVmaXgqLywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciog
Lyp4bWxVUkkqLywgaW50IC8qbmJfbmFtZXNwYWNlcyovLCBjb25zdCB4bWxDaGFyKiogLypuYW1l
c3BhY2VzKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBuYl9hdHRyaWJ1dGVzLCBpbnQgLypuYl9kZWZhdWx0ZWQqLywgY29uc3QgeG1sQ2hhcioqIGxp
YnhtbEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKHN0cmNtcChyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPih4bWxMb2NhbE5hbWUpLCAiYXR0cnMiKSAhPSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRy
PihjbG9zdXJlKTsKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSA9IHN0YXRpY19jYXN0
PEF0dHJpYnV0ZVBhcnNlU3RhdGUqPihjdHh0LT5fcHJpdmF0ZSk7CisKKyAgICBzdGF0ZS0+Z290
QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICB4bWxTQVgyQXR0cmlidXRlcyogYXR0cmlidXRlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMkF0dHJpYnV0ZXMqPihsaWJ4bWxBdHRyaWJ1dGVzKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAgICBT
dHJpbmcgYXR0ckxvY2FsTmFtZSA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsK
KyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gKGludCkgKGF0dHJpYnV0ZXNbaV0uZW5kIC0gYXR0
cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgPSB0b1N0cmluZyhh
dHRyaWJ1dGVzW2ldLnZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgIFN0cmluZyBhdHRyUHJl
Zml4ID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5wcmVmaXgpOworICAgICAgICBTdHJpbmcgYXR0
clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBhdHRyTG9jYWxOYW1lIDogYXR0clByZWZp
eCArICI6IiArIGF0dHJMb2NhbE5hbWU7CisKKyAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0
KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykK
K3sKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLmdvdEF0dHJpYnV0
ZXMgPSBmYWxzZTsKKworICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAw
LCBzaXplb2Yoc2F4KSk7CisgICAgc2F4LnN0YXJ0RWxlbWVudE5zID0gYXR0cmlidXRlc1N0YXJ0
RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FYMl9NQUdJQzsK
KyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gcGFyc2VyID0gWE1MUGFyc2VyQ29udGV4dDo6
Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0ZSk7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5n
ID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICIgKyBzdHJpbmcgKyAiIC8+IjsKKyAg
ICB4bWxQYXJzZUNodW5rKHBhcnNlci0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBwYXJzZVN0cmluZy5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhciksIDEpOworICAgIGF0dHJzT0sgPSBzdGF0ZS5nb3RBdHRyaWJ1dGVzOwor
ICAgIHJldHVybiBzdGF0ZS5hdHRyaWJ1dGVzOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWNmYTIz
NDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMCwwICsx
LDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNh
bUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCisK
KyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNp
bmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVudGl0eVBh
cnNlci5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5r
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVk
ZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5o
IgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1T
b3VyY2UuaCIKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEVudGl0eVJlc29sdmVyIDogcHVibGljIFFYbWxTdHJlYW1FbnRpdHlSZXNvbHZlciB7CisgICAg
dmlydHVhbCBRU3RyaW5nIHJlc29sdmVVbmRlY2xhcmVkRW50aXR5KGNvbnN0IFFTdHJpbmcgJm5h
bWUpOworfTsKKworUVN0cmluZyBFbnRpdHlSZXNvbHZlcjo6cmVzb2x2ZVVuZGVjbGFyZWRFbnRp
dHkoY29uc3QgUVN0cmluZyAmbmFtZSkKK3sKKyAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRp
dHkobmFtZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgcmV0dXJuIFFTdHJpbmcoYyk7Cit9
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgWE1MRG9jdW1l
bnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7Cisg
ICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFyc2VyOjpYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQor
ICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwgbV92aWV3KGZy
YW1lVmlldykKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJyZW50Tm9kZShk
b2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhmYWxzZSkK
KyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVsZW1lbnQo
ZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVE
ZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisg
ICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxz
ZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0
UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgw
KQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQ
b3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3Njcmlw
dGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworICAgIG1fc3RyZWFt
LnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Cit9CisKK1hNTERvY3VtZW50
UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxl
bWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHBlcm1pc3Np
b24pCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50KCkp
CisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJy
ZW50Tm9kZShmcmFnbWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NT
UyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJz
dEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQo
ZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENh
bGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3Np
dGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGlu
Z1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJl
bG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKKyAgICAs
IG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQoreworICAgIGZyYWdtZW50LT5yZWYo
KTsKKworICAgIC8vIEFkZCBuYW1lc3BhY2VzIGJhc2VkIG9uIHRoZSBwYXJlbnQgbm9kZQorICAg
IFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNrOworICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7
CisgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFyZW50RWxlbWVudCk7CisKKyAgICAgICAgTm9k
ZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKCFuIHx8ICFu
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcGFyZW50RWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICB9CisKKyAgICBpZiAoZWxlbVN0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVhtbFN0cmVhbU5hbWVzcGFj
ZURlY2xhcmF0aW9ucyBuYW1lc3BhY2VzOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFz
dCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmli
dXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxl
bmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+
YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkg
PT0gInhtbG5zIikKKyAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0g
YXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9
PSAieG1sbnMiKQorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFwcGVuZChRWG1sU3Ry
ZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24oYXR0ci0+bG9jYWxOYW1lKCksIGF0dHItPnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX3N0cmVhbS5hZGRFeHRy
YU5hbWVzcGFjZURlY2xhcmF0aW9ucyhuYW1lc3BhY2VzKTsKKyAgICBtX3N0cmVhbS5zZXRFbnRp
dHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2ZXIpOworCisgICAgLy8gSWYgdGhlIHBhcmVudCBl
bGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8geG1sbnMgYXR0
cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4KKyAgICBpZiAo
bV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50LT5pbkRvY3Vt
ZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVudEVsZW1lbnQtPm5h
bWVzcGFjZVVSSSgpOworfQorCitYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3VtZW50UGFyc2Vy
KCkKK3sKKyAgICBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKKyAgICBpZiAobV9wZW5kaW5nU2Ny
aXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBk
ZWxldGUgbV9zdHJlYW0uZW50aXR5UmVzb2x2ZXIoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIG1fd3JvdGVU
ZXh0ID0gdHJ1ZTsKKworICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQo
KS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CisgICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNh
dyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQorICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgbGluZU51bWJlcigpLCBjb2x1bW5O
dW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRU3RyaW5nIGRhdGEocGFy
c2VTdHJpbmcpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSmF2YVNj
cmlwdCBtYXkgY2F1c2UgdGhlIHBhcnNlciB0byBkZXRhY2gsCisgICAgICAgIC8vIGtlZXAgdGhp
cyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxYTUxE
b2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBtX3N0cmVhbS5hZGREYXRh
KGRhdGEpOworICAgICAgICBwYXJzZSgpOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmlu
ZyYpCit7CisgICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOworICAgIG1fc2F3RXJy
b3IgPSBmYWxzZTsKKyAgICBtX3Nhd0NTUyA9IGZhbHNlOworICAgIG1fc2F3WFNMVHJhbnNmb3Jt
ID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChtX3Nh
d1hTTFRyYW5zZm9ybSkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3VyY2Uo
YWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZShtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3Jt
KSkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUg
ZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRzLgorICAgICAg
ICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKyAgICAgICAgRG9jdW1l
bnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobV9zdHJl
YW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJy
b3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiAhbV9z
YXdYU0xUcmFuc2Zvcm0gJiYgIW1fc2F3RXJyb3IpKQorICAgICAgICBoYW5kbGVFcnJvcihmYXRh
bCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmxpbmVOdW1iZXIoKTsKK30KKworaW50IFhNTERv
Y3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVh
bS5jb2x1bW5OdW1iZXIoKTsKK30KKworVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Olplcm9C
YXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOworfQorCisvLyBU
aGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVycHJldHMgemVyby1iYXNlIGxpbmVOdW1iZXIg
bWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisvLyBGSVhNRTogVGhpcyBlcnJvciBpcyBrZXB0
IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQgZml4IGl0IGV2ZW50dWFsbHkuIAorVGV4dFBv
c2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdAor
eworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBh
cnNpbmcoKQoreworICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsK
K30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNT
RVJUKG1fcGFyc2VyUGF1c2VkKTsKKworICAgIG1fcGFyc2VyUGF1c2VkID0gZmFsc2U7CisKKyAg
ICAvLyBGaXJzdCwgZXhlY3V0ZSBhbnkgcGVuZGluZyBjYWxsYmFja3MKKyAgICBwYXJzZSgpOwor
ICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlbiwg
d3JpdGUgYW55IHBlbmRpbmcgZGF0YQorICAgIFNlZ21lbnRlZFN0cmluZyByZXN0ID0gbV9wZW5k
aW5nU3JjOworICAgIG1fcGVuZGluZ1NyYy5jbGVhcigpOworICAgIGFwcGVuZChyZXN0KTsKKwor
ICAgIC8vIEZpbmFsbHksIGlmIGZpbmlzaCgpIGhhcyBiZWVuIGNhbGxlZCBhbmQgYXBwZW5kKCkg
ZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1
ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgIW1fcGFyc2VyUGF1c2Vk
ICYmICFtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3Vt
ZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sK
KyAgICBBU1NFUlQoIW1fc2F3Rmlyc3RFbGVtZW50KTsKKyAgICBhcHBlbmQoU3RyaW5nKCI8cXht
bHN0cmVhbWR1bW15ZWxlbWVudD4iKSk7CisgICAgYXBwZW5kKHNvdXJjZSk7CisgICAgYXBwZW5k
KFN0cmluZygiPC9xeG1sc3RyZWFtZHVtbXllbGVtZW50PiIpKTsKKyAgICByZXR1cm4gIWhhc0Vy
cm9yKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0cnVj
dCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRy
aWJ1dGVzOworICAgIGJvb2wgZ290QXR0cmlidXRlczsKK307CisKK3N0YXRpYyB2b2lkIGF0dHJp
YnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUsIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzJiBhdHRycykKK3sKKyAgICBpZiAoYXR0cnMuY291bnQo
KSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0ZS0+Z290QXR0cmlidXRlcyA9IHRy
dWU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7IGkrKykgeworICAg
ICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlJiBhdHRyID0gYXR0cnNbaV07CisgICAgICAg
IFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0cmluZyBhdHRy
VmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVSSSAgICAgICA9
IGF0dHIubmFtZXNwYWNlVXJpKCk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUgICAgID0gYXR0
ci5xdWFsaWZpZWROYW1lKCk7CisgICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNldChhdHRyUU5h
bWUsIGF0dHJWYWx1ZSk7CisgICAgfQorfQorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJz
ZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0spCit7CisgICAg
QXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5nb3RBdHRyaWJ1dGVzID0gZmFs
c2U7CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyIHN0cmVhbTsKKyAgICBRU3RyaW5nIGR1bW15ID0g
UVN0cmluZyhRTGF0aW4xU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAlMSAv
PiIpKS5hcmcoc3RyaW5nKTsKKyAgICBzdHJlYW0uYWRkRGF0YShkdW1teSk7CisgICAgd2hpbGUg
KCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBzdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAg
aWYgKHN0cmVhbS5pc1N0YXJ0RWxlbWVudCgpKSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzU3Rh
cnRFbGVtZW50TnNIYW5kbGVyKCZzdGF0ZSwgc3RyZWFtLmF0dHJpYnV0ZXMoKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgYXR0cnNPSyA9IHN0YXRlLmdvdEF0dHJpYnV0ZXM7CisgICAgcmV0dXJu
IHN0YXRlLmF0dHJpYnV0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHByZWZpeEZyb21R
TmFtZShjb25zdCBRU3RyaW5nJiBxTmFtZSkKK3sKKyAgICBjb25zdCBpbnQgb2Zmc2V0ID0gcU5h
bWUuaW5kZXhPZihRTGF0aW4xQ2hhcignOicpKTsKKyAgICBpZiAob2Zmc2V0IDw9IDApCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBxTmFtZS5sZWZ0
KG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50TmFtZXNwYWNl
cyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRp
b25zICZucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBucy5jb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9uICZkZWNsID0gbnNbaV07
CisgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkZWNsLm5hbWVzcGFjZVVyaSgpOworICAg
ICAgICBTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSBkZWNsLnByZWZpeCgpLmlzRW1wdHkoKSA/IFN0
cmluZygieG1sbnMiKSA6IFN0cmluZygieG1sbnM6Iik7CisgICAgICAgIG5hbWVzcGFjZVFOYW1l
LmFwcGVuZChkZWNsLnByZWZpeCgpKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRl
TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgbmFtZXNwYWNlUU5hbWUsIG5hbWVz
cGFjZVVSSSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBpZiAoZWMpIC8vIGV4
Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBu
ZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlcyAmYXR0cnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFYbWxT
dHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAgICAgICAgU3RyaW5nIGF0dHJMb2Nh
bE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBhdHRy
LnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5uYW1lc3BhY2VV
cmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhhdHRyLm5hbWVzcGFjZVVyaSgpKTsK
KyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5hbWUoKTsKKyAg
ICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVSSSwgYXR0clFOYW1lLCBhdHRy
VmFsdWUsIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAvLyBleGNl
cHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSgpCit7CisgICAgd2hpbGUgKCFpc1N0b3Bw
ZWQoKSAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fc3RyZWFtLmF0RW5kKCkpIHsKKyAgICAgICAg
bV9zdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChtX3N0cmVhbS50b2tlblR5cGUo
KSkgeworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1lbnQ6IHsKKyAg
ICAgICAgICAgIHN0YXJ0RG9jdW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6IHsKKyAgICAgICAg
ICAgIGVuZERvY3VtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkgJiYg
IW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3Io
ZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJlcigpLCBjb2x1bW5O
dW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1lbnQ6IHsKKyAg
ICAgICAgICAgIHBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJzOiB7CisgICAgICAg
ICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAgLy9jZGF0YQor
ICAgICAgICAgICAgICAgIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy9jaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgcGFyc2VDaGFyYWN0ZXJz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAgIHBhcnNlQ29t
bWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1s
U3RyZWFtUmVhZGVyOjpEVEQ6IHsKKyAgICAgICAgICAgIC8vcURlYnVnKCk8PCItLS0tLS0tLS0t
LS0tIERURCI7CisgICAgICAgICAgICBwYXJzZUR0ZCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQor
ICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSB0cnVlOworI2VuZGlmCisgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6
OkVudGl0eVJlZmVyZW5jZTogeworICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0g
RU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCkKKyAgICAgICAgICAgIC8vICAg
ICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAg
IGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAg
ICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgorICAgICAgICAgICAgICAgKSB7Cisg
ICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHkoZW50aXR5LnRv
VXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGVhZlRleHROb2Rl
KQorICAgICAgICAgICAgICAgICAgICBlbnRlclRleHQoKTsKKyAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZjLCAxKTsKKyAg
ICAgICAgICAgICAgICAvLyBxRGVidWcoKTw8IiAtLS0tLS0tIGFkZGluZyBlbnRpdHkgIjw8c3Ry
OworICAgICAgICAgICAgICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRhKHN0ciwgZWMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IHsKKyAgICAgICAgICAg
IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpZiAobV9zdHJlYW0uZXJyb3Io
KSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxT
dHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAgICAgICAgICAgIGhhbmRsZUVycm9y
KHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KCkKK3sKKyAgICBpbml0aWFs
aXplUGFyc2VyQ29udGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYg
KCFtX3BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRYTUxTdGFuZGFs
b25lKG1fc3RyZWFtLmlzU3RhbmRhbG9uZURvY3VtZW50KCksIGVjKTsKKworICAgICAgICBRU3Ry
aW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1bWVudFZlcnNpb24oKTsKKyAgICAgICAgaWYg
KCF2ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTFZlcnNp
b24odmVyc2lvbiwgZWMpOworICAgICAgICBRU3RyaW5nUmVmIGVuY29kaW5nID0gbV9zdHJlYW0u
ZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKGVuY29kaW5nKTsKKyAgICB9Cit9
CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBp
ZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIG1fcGFyc2luZ0ZyYWdtZW50KSB7CisgICAgICAgIC8v
IHNraXAgZHVtbXkgZWxlbWVudCBmb3IgZnJhZ21lbnRzCisgICAgICAgIG1fc2F3Rmlyc3RFbGVt
ZW50ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisK
KyAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJlYW0ubmFtZSgpOworICAgIFN0cmluZyB1cmkg
ICAgICAgPSBtX3N0cmVhbS5uYW1lc3BhY2VVcmkoKTsKKyAgICBTdHJpbmcgcHJlZml4ICAgID0g
cHJlZml4RnJvbVFOYW1lKG1fc3RyZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmluZygpKTsKKwor
ICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgUV9B
U1NFUlQocHJlZml4LmlzTnVsbCgpKTsKKyAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOworICAgIH0KKworICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUs
IHVyaSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKKyAgICBpZiAoIW5ld0VsZW1lbnQpIHsKKyAgICAgICAg
c3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkg
eworICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEt
MjAwNjEwMjAtQS5wZGYsCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUg
cm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5h
bWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcKKyAg
ICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAg
aWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1s
JyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7
CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFt
ZXNwYWNlVVJJOworICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAg
ICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFt
TmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJ
KSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQg
PSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMobmV3
RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0ubmFtZXNwYWNlRGVjbGFyYXRpb25zKCksIGVjLCBtX3Nj
cmlwdGluZ1Blcm1pc3Npb24pOworICAgIGlmIChlYykgeworICAgICAgICBzdG9wUGFyc2luZygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMo
bmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0uYXR0cmlidXRlcygpLCBlYywgbV9zY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0
b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHNjcmlwdEVsZW1lbnQp
CisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9uZUJhc2VkKCk7
CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsK
KworICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKKyAgICBpZiAobV92aWV3
ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2go
KTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKG5ld0Vs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIo
KTsKKyNlbmRpZgorCisgICAgaWYgKGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1l
KCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3Vt
ZW50RWxlbWVudEF2YWlsYWJsZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZUVuZEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CisgICAgbi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7
CisKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0aW5nTm90
QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbi0+cmVtb3ZlKGVjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpIHx8ICFtX3ZpZXcp
IHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSk7CisKKyAgICAvLyBU
aGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIGRv
Y3VtZW50LgorICAgIC8vIFBhcnNpbmcgY29udGludWVzIGluIHRoaXMgY2FzZSwgYnV0IHNjcmlw
dHMgYXJlbid0IGV4ZWN1dGVkLgorICAgIGlmICghZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7Cisg
ICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
Y3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGVsZW1lbnQpOwor
ICAgIGlmICghc2NyaXB0RWxlbWVudCkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3JpcHRz
IGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKKyAgICBBU1NFUlQoIW1fcGVuZGlu
Z1NjcmlwdCk7CisgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKKworICAgIGJvb2wgc3Vj
Y2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0
U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmli
dXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CisjaWYgRU5BQkxFKFhIVE1M
TVApCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNj
cmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2Vu
ZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVu
dCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKHNj
cmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAgICAgIG1fcGVu
ZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+
YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBi
ZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVk
IGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAgICBw
YXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NjcmlwdEVsZW1l
bnQgPSAwOworICAgIH0KKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKKyAgICBwb3BD
dXJyZW50Tm9kZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNoYXJhY3Rl
cnMoKQoreworICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCisgICAgICAgIGVudGVyVGV4dCgpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRh
KG1fc3RyZWFtLnRleHQoKSwgZWMpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCit7CisgICAgZXhpdFRleHQoKTsKKworICAgIC8vICMj
IyBoYW5kbGUgZXhjZXB0aW9ucworICAgIGludCBleGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gZG9jdW1lbnQoKS0+Y3JlYXRlUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKAorICAgICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYXJnZXQo
KSwKKyAgICAgICAgbV9zdHJlYW0ucHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YSgpLCBleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5zZXRD
cmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGls
ZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAg
IHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAg
IGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShY
U0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5p
c1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNm
b3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNkYXRhKCkKK3sKKyAgICBleGl0VGV4dCgp
OworCisgICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1fc3RyZWFtLnRleHQoKSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5w
YXJzZXJBZGRDaGlsZChuZXdOb2RlLmdldCgpKTsKKyAgICBpZiAobV92aWV3ICYmICFuZXdOb2Rl
LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KCkKK3sKKyAgICBleGl0VGV4dCgpOworCisgICAg
UmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9z
dHJlYW0udGV4dCgpKTsKKworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05v
ZGUuZ2V0KCkpOworICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCisgICAg
ICAgIG5ld05vZGUtPmF0dGFjaCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRE
b2N1bWVudCgpCit7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFy
YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjpoYXNF
cnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmhhc0Vycm9yKCk7Cit9CisKK3Zv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKK3sKKyAgICBRU3RyaW5nUmVmIG5hbWUg
PSBtX3N0cmVhbS5kdGROYW1lKCk7CisgICAgUVN0cmluZ1JlZiBwdWJsaWNJZCA9IG1fc3RyZWFt
LmR0ZFB1YmxpY0lkKCk7CisgICAgUVN0cmluZ1JlZiBzeXN0ZW1JZCA9IG1fc3RyZWFtLmR0ZFN5
c3RlbUlkKCk7CisKKyAgICAvL3FEZWJ1ZygpIDw8IGR0ZCA8PCBuYW1lIDw8IHB1YmxpY0lkIDw8
IHN5c3RlbUlkOworICAgIGlmICgocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9E
VEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKSkKKyAgICAgICAgfHwgKHB1YmxpY0lkID09
IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKSkKKyAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3Qv
L0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RU
RCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0
aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCisgICAgICAgIHx8
IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBN
YXRoTUwgMi4wLy9FTiIpKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikp
CisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0
cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKQorI2VuZGlmCisg
ICAgICAgKQorICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlm
IHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGVs
c2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFT
dHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyAgICAg
ICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1l
KCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRl
Y2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIo
KSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIC8vIGNoZWNrIGlmIHRo
ZSBNSU1FIHR5cGUgaXMgY29ycmVjdCB3aXRoIHRoaXMgbWV0aG9kCisgICAgICAgICAgICBzZXRJ
c1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SXNY
SFRNTERvY3VtZW50KHRydWUpOworICAgIH0KKyNlbmRpZgorICAgIGlmICghbV9wYXJzaW5nRnJh
Z21lbnQpCisgICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6
Y3JlYXRlKGRvY3VtZW50KCksIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOworCit9Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2Nv
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYTQ3M2VkMjMwODJmMzdkMzkzYThkMTFmMWFkYTE1ZWNjM2MzNzI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhN
TERvY3VtZW50UGFyc2VyU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRS
ZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291
cmNlTG9hZGVyID0gMDsKKworWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJz
ZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCisgICAg
OiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikK
KyNpZiBFTkFCTEUoWFNMVCkKKyAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmlj
RXJyb3IpCisgICAgLCBtX29sZFN0cnVjdHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9y
KQorICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKKyNlbmRp
ZgoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9h
ZGVyOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxE
b2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVk
RXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4dCkKKyAgICA6
IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyKQor
ICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdlbmVyaWNFcnJvcikKKyAgICAsIG1fb2xk
U3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCisgICAgLCBtX29sZEVycm9y
Q29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQoreworICAgIGN1cnJlbnRDYWNoZWRSZXNv
dXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGlmIChnZW5lcmljRXJyb3JG
dW5jKQorICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJp
Y0Vycm9yRnVuYyk7CisgICAgaWYgKHN0cnVjdHVyZWRFcnJvckZ1bmMpCisgICAgICAgIHhtbFNl
dFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsK
K30KKyNlbmRpZgorCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJT
Y29wZSgpCit7CisgICAgY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRS
ZXNvdXJjZUxvYWRlcjsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICB4bWxTZXRHZW5lcmljRXJyb3JG
dW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVyaWNFcnJvckZ1bmMpOworICAgIHhtbFNl
dFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVy
cm9yRnVuYyk7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDQwNDNiNDhiMTFlYzVi
ODgzNjBhZTNlMTc5YjVkMWVlMTJkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWE1M
RG9jdW1lbnRQYXJzZXJTY29wZV9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBFTkFCTEUoWFNMVCkKKyNpbmNs
dWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworICAgIGNsYXNzIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYTUxEb2N1bWVudFBh
cnNlclNjb3BlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUo
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgflhN
TERvY3VtZW50UGFyc2VyU2NvcGUoKTsKKworICAgICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworI2lmIEVOQUJMRShYU0xUKQor
ICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4
bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMgPSAwLCB2b2lkKiBlcnJv
ckNvbnRleHQgPSAwKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisKKyNpZiBFTkFCTEUoWFNM
VCkKKyAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBtX29sZEdlbmVyaWNFcnJvckZ1bmM7Cisg
ICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgbV9vbGRTdHJ1Y3R1cmVkRXJyb3JGdW5jOwor
ICAgICAgICB2b2lkKiBtX29sZEVycm9yQ29udGV4dDsKKyNlbmRpZgorICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAo=
</data>
<flag name="commit-queue"
          id="93621"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99332</attachid>
            <date>2011-06-30 10:51:47 -0700</date>
            <delta_ts>2011-06-30 14:19:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>movexml.patch</filename>
            <type>text/plain</type>
            <size>242732</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTliMmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYw
ZTBiN2JiNC4uZjdkMDE2Y2U4ODczNjUyNGJhNzBiZjJhNDZhYmRmNWI4ZmRmOGJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTYwNiw5ICs2MDYsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAKICAgICBkb20vV2hlZWxFdmVudC5jcHAK
ICAgICBkb20vV2luZG93RXZlbnRDb250ZXh0LmNwcAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNl
ci5jcHAKLSAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAotICAgIGRvbS9YTUxE
b2N1bWVudFBhcnNlclNjb3BlLmNwcAogCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuY3BwCiAKQEAgLTEzODgsNiArMTM4NSwxMCBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCiAgICAgeG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcAogICAgIHhtbC9YU0xUVW5pY29kZVNvcnQuY3BwCisKKyAgICB4bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyLmNwcAorICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAorICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKICkKIAog
U0VUKFdlYkNvcmVfQ1NTX1BST1BFUlRZX05BTUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE5MzUyMjVkZmJk
YzEyNWZlYWQ4Y2JlMzBhYzg0YTZiN2I5YWQ1OC4uZWY0YzczZDJlMTU1MmJmYTk2ZWY3OGU0NmZi
NjEyYTFlYzI1NjAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAxMS0wNi0yOSAg
SmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgWE1MRG9jdW1lbnRQYXJzZXIgdG8gbmV3IGZv
bGRlciB4bWwvcGFyc2VyLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM2NjYKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20v
RE9NQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVT
dGFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkZXRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
OjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJzZXJF
cnJvckhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0
RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpp
c1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
OjpwYXVzZVBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6Y29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpYTUxQYXJzZXJDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElzWEhUTUxEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNYSFRNTERvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzZXRJc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OndlbGxGb3JtZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRleHQpOgorICAgICAgICAqIHhtbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6On5QZW5kaW5nQ2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjph
cHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OmFwcGVuZEVuZEVsZW1lbnROU0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRDREFUQUJs
b2NrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5k
Q29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFw
cGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6YXBwZW5kRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5n
Q2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nQ2FsbGJhY2tzOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OlBlbmRpbmdDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrOjp+UGVuZGluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrOjp+
UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNr
OjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFy
YWN0ZXJzQ2FsbGJhY2s6On5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s6OmNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbkNhbGxiYWNrOjp+UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb25DYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2Fs
bGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrOjp+UGVuZGluZ0NEQVRBQmxvY2tDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFC
bG9ja0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6
OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6On5QZW5kaW5nQ29tbWVudENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6OmNh
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0ludGVybmFs
U3Vic2V0Q2FsbGJhY2s6On5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFj
azo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjptYXRjaEZ1bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0
QnVmZmVyOjpyZWFkT3V0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3dpdGNoVG9VVEYxNik6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbGxvd0V4dGVybmFsTG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZUZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OmVycm9yRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJD
b250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2Vy
Q29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBh
cnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9BdG9taWNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFu
ZGxlRWxlbWVudE5hbWVzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxl
bWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50
TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNkYXRhQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjppbnRlcm5hbFN1YnNldCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kRWxl
bWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJzSGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNkYXRhQmxvY2tIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbW1lbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ondhcm5pbmdIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZhdGFsRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbEVycm9y
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRYSFRNTEVudGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRYSFRNTEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0RG9jdW1lbnRIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVuZERvY3VtZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjppbnRl
cm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uT25lQmFzZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnN0b3BQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpy
ZXN1bWVQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBl
bmRGcmFnbWVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVzU3RhcnRFbGVt
ZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXR0cmlidXRlcyk6CisgICAg
ICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9ydHNYTUxWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3VtZW50UGFyc2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNTdGFy
dEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZWZpeEZyb21RTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpo
YW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50
QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0ZCk6CisgICAgICAgICogeG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyU2NvcGU6OlhNTERvY3VtZW50UGFyc2VyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6flhNTERvY3VtZW50UGFyc2VyU2NvcGUpOgorCiAyMDEx
LTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzIw
YmNmMTY0ZmI5YmExODBhYmE1YjUxYTA1MGQ3YmIzNGQ4OTAyNS4uNTkxMDgwYzVlOTQwNDFhZDUz
ODhmYTcxZGExZWJkOWJjMjkyOTc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0xMzI0LDExICsxMzI0LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250
ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2Nv
cGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIFwKQEAgLTM3OTEsNiAr
Mzc4NiwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBcCisJU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUv
eG1sL0RPTVBhcnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUveG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGEwZWFiOTczYzkyYTRkNzljNjI0YTNjYWY4OGFmNmQ5ZjA0ZWMzZWQuLmI2NzRk
MjZjZjU2NDA2NWNlZGM2YmI0YjBhMDUwN2RjMjJmZDE0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTU1OCw3ICs1NTgsNiBAQAogICAgICAgICAgICAgJ2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5o
JywKICAgICAgICAgICAgICdkb20vVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCcsCiAgICAg
ICAgICAgICAnZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgnLAotICAgICAgICAgICAgJ2RvbS9YTUxE
b2N1bWVudFBhcnNlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oJywKQEAgLTI2Mzcs
MTEgKzI2MzYsNiBAQAogICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmgnLAogICAgICAgICAg
ICAgJ2RvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwJywKICAgICAgICAgICAgICdkb20vV2luZG93
RXZlbnRDb250ZXh0LmgnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAn
LAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwJywKLSAgICAg
ICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAnLAotICAgICAgICAgICAgJ2RvbS9Y
TUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50
UGFyc2VyU2NvcGUuaCcsCiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuY3BwJywKICAgICAgICAgICAgICdkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5k
LmNwcCcsCkBAIC02MTI3LDYgKzYxMjEsMTIgQEAKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlci5oJywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oJywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtlclRocmVhZC5jcHAnLAorICAg
ICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKKyAgICAgICAgICAg
ICd4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgnLAorICAgICAgICAgICAgJ3htbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCcsCisgICAgICAgICAgICAneG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlclNjb3BlLmNwcCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlclNjb3BlLmgnLAogICAgICAgICAgICAgJ3htbC9ET01QYXJzZXIuY3BwJywKICAg
ICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmgnLAogICAgICAgICAgICAgJ3htbC9OYXRpdmVYUGF0
aE5TUmVzb2x2ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYmMxMDZmNjRlOTNkOGFmMGYwZDk4
YWI1ZmNkYjFmMDU2NmIwMTE4Ny4uN2U0ZjQxODEzNzdiNGNiN2I5NGE1MzQ3YTFlZDgyNjdlMTcy
OGQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTU2NCw3ICs1NjQsNiBAQCBTT1VSQ0VTICs9IFwKICAg
ICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3Bw
IFwKICAgICBkb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCBcCi0gICAgZG9tL1hNTERvY3VtZW50
UGFyc2VyLmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIFwKICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIFwKQEAgLTExOTYsNyArMTE5NSw4IEBAIFNPVVJD
RVMgKz0gXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHAgXAogICAgIHhtbC9YTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdFVw
bG9hZC5jcHAgXAotICAgIHhtbC9YTUxTZXJpYWxpemVyLmNwcAorICAgIHhtbC9YTUxTZXJpYWxp
emVyLmNwcCBcCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAgCiAKIEhFQURF
UlMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oIFwK
QEAgLTE1NDcsNyArMTU0Nyw2IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9XZWJLaXRBbmltYXRp
b25FdmVudC5oIFwKICAgICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggXAogICAgIGRvbS9X
aGVlbEV2ZW50LmggXAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlci5oIFwKICAgICBlZGl0aW5n
L0FwcGVuZE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kLmggXAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaCBcCkBAIC0yNDkxLDYgKzI0
OTAsNyBAQCBIRUFERVJTICs9IFwKICAgICB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBcCiAgICAg
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAgICAgd29ya2Vycy9Xb3JrZXJUaHJlYWQu
aCBcCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oIFwKICAgICB4bWwvRE9NUGFy
c2VyLmggXAogICAgIHhtbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBcCiAgICAgeG1sL1hNTEh0
dHBSZXF1ZXN0LmggXApAQCAtMjU5MSw3ICsyNTkxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vcXQvV2lkZ2V0UXQuY3BwCiAKICFjb250YWlucyhERUZJTkVTLCBXVEZfVVNFX0xJQlhN
TDI9MSkgewotICAgIFNPVVJDRVMgKz0gZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisgICAg
U09VUkNFUyArPSB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCiB9CiAKIGNvbnRh
aW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxFX1RIRU1FPTEpIHsKQEAgLTMxMDIsOCArMzEw
Miw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPTEpIHsKICAgICAgICAgICAgIHht
bC9YU0xJbXBvcnRSdWxlLmNwcCBcCiAgICAgICAgICAgICB4bWwvWFNMVFVuaWNvZGVTb3J0LmNw
cCBcCiAgICAgICAgICAgICB4bWwvWE1MVHJlZVZpZXdlci5jcHAgXAotICAgICAgICAgICAgZG9t
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAotICAgICAgICAgICAgZG9tL1hNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwCisgICAgICAgICAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHAgXAorICAgICAgICAgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcAogCiAgICAgICAgICAgICBIRUFERVJTICs9IFwKICAgICAgICAgICAgICAgICB4
bWwvWFNMSW1wb3J0UnVsZS5oIFwKQEAgLTMxMTEsNyArMzExMSw3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9YU0xUPTEpIHsKICAgICAgICAgICAgICAgICB4bWwvWFNMSW1wb3J0UnVsZS5o
IFwKICAgICAgICAgICAgICAgICB4bWwvWFNMVFVuaWNvZGVTb3J0LmggXAogICAgICAgICAgICAg
ICAgIHhtbC9YTUxUcmVlVmlld2VyLmggXAotICAgICAgICAgICAgICAgIGRvbS9YTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmgKKyAgICAgICAgICAgICAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyU2NvcGUuaAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgU09VUkNFUyArPSBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDZiMzI4MjcyNTMz
ODQ2N2ViNDMxZjFiMDNhYjUyNmYyY2NkMjliODYuLjJiZWJlNTlmNmNkZDYwMWJhMTk5MGIzYWIy
Zjc3ZjM2NzgyMDRhZTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC00OTEzMCw3ICs0OTEzMCw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1bWVudFBhcnNlci5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyLmNwcCIKIAkJ
CQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAt
NDkxODIsMTUgKzQ5MTgyLDE1IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIu
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcWE1MRG9jdW1lbnRQYXJzZXIuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFy
c2VyXFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNw
cCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZS5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiIKQEAgLTQ5MjQyLDcgKzQ5MjQyLDcgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJz
LmNtZCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVy
cy5jbWQKaW5kZXggY2E0ZDhmMDRmMzYyMTA1ZTU3MmYxNzYxYTY0NTFkZDViMDZlYmRiZC4uZGFk
NWFkZjM5MmI2YTdkNzQ3ZTk4MTY3MWJmMzI5M2EzOWU4OWZmMCAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCkBA
IC02Niw2ICs2Niw3IEBAIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxyZW5kZXJpbmdcc3R5
bGVcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5ccmVuZGVyaW5nXHN2Z1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxp
bmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZWRpdGluZ1wqLmgi
ICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAi
JVByb2plY3REaXIlLi5cZG9tXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVc
V2ViQ29yZSIKK3hjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlx4bWxccGFyc2VyXCouaCIgIiVD
T05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJv
amVjdERpciUuLlx4bWxcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJD
b3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXHN2Z1xhbmltYXRpb25cKi5oIiAiJUNP
TkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9q
ZWN0RGlyJS4uXHN2Z1xwcm9wZXJ0aWVzXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGlu
Y2x1ZGVcV2ViQ29yZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiNzk0MWYwZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1
ZDQxLi45MTc1ZmRjMjk4NWE4NjFmZDAwZGIwNzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2
ICs0OCwxMSBAQAogCQkwMDE0NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAx
NDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJ
MDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAw
QjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuaCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAw
ODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDAwM0YxRkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVu
dFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNC
QThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhN
TERvY3VtZW50UGFyc2VyLmggKi87IH07CisJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgKi87IH07CisJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcCAqLzsgfTsKKwkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlLmggKi87IH07CiAJCTA1MkJGQ0U5MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNs
aWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAg
Ki87IH07CiAJCTA1MkJGQ0VCMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1v
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJG
Q0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQz
MDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlERjEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1w
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0
MzAsNyArMTQzNSw2IEBACiAJCTUyMUQ0NkY4MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2Rjcx
MUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxSaW5nLmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIw
MDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1
ZS5jcHAgKi87IH07CiAJCTUzMjVFNEQ4MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2
MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgw
MURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMy
QTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBG
MTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURCRDEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdl
ci5jcHAgKi87IH07CkBAIC0xNDgyLDggKzE0ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0
NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVBNTc0RjIzMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICov
OyB9OwogCQk1QTU3NEYyODEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZE
MDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgKi87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3
MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9
OwotCQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNB
OTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0J
CTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2
QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFE
RjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBI
VE1MQ29udmVydGVyLm1tICovOyB9OwogCQk1RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsgfTsKIAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8q
IEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUQ4N0JCODIxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5l
cmF0b3IuY3BwICovOyB9OwpAQCAtMzA0Myw3ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1
OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYz
NUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0
MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1
bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0
NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgy
NDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5
NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2Fj
aGVQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzA2Niw3ICszMDY3LDYgQEAKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhU
TUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJ
CTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQz
RDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkw
ODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAg
Ki87IH07Ci0JCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMw
OTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0Yx
OUFENTA4MjQ1RTU5MDAxRTlBQkMgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1
Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFF
OUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRp
b25zLm1tICovOyB9OwogCQk5M0YxOUFFNjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJh
dG9yTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9
OwpAQCAtNjQwNyw2ICs2NDA3LDExIEBACiAJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBP
cmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBPcmlnaW5BY2Nlc3NFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAw
MTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwMDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTAwQjkzMTgyMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTAwQjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4
NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNs
aWVudE1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9j
YXRpb25DbGllbnRNb2NrLmNwcDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhE
IC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBHZW9sb2NhdGlvbkNsaWVudE1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGll
bnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMw
MEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NVGltZVN0YW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcg
Kzc5NzQsNiBAQAogCQk1MjFENDZGNzExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYg
LyogQ1NTRmxleFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0Zs
ZXhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYz
MDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRG
IC8qIFhNTFRyZWVWaWV3ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gWE1MVHJlZVZpZXdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2
LDggKzgwMzAsNiBAQAogCQk1QTU3NEYyMzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rl
c0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0
YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVv
dGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMx
MDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQxNUUzQUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1
MjExRTUyQzhCMDBCQkI2MkYgLyogV2ViQ29yZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gV2ViQ29yZS5leHAuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRG
MTFFM0VBRUIwMDcwMkI2RiAvKiBXZWJDb3JlRXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVH
ZW5lcmF0b3I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgy
MTFFM0VEODYwMDcwMkI2RiAvKiBFeHBvcnRGaWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0g
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FeHBvcnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUy
M0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVj
b2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0J
CUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJRjU1QjNENzkxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VG
MjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1
NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzAwLDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9u
ICovCisJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVB
OTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVB
OTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JB
ODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkz
MTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkp
OworCQkJcGF0aCA9IHBhcnNlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CTAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0
MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8s
CiAJCQkJMUFDRTUzRTEwQThEMThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJ
MUFDRTUzRTIwQThEMThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0Uz
MEE4RDE4RTcwMDIyOTQ3RCAvKiBET01QYXJzZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5
LDYgQEAKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8s
CiAJCQkJNDEyM0U1NjgxMjdCMzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAg
Ki8sCiAJCQkJNDEyM0U1NjcxMjdCMzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5o
ICovLAotCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5j
cHAgKi8sCi0JCQkJRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2Vy
LmggKi8sCi0JCQkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAgKi8sCi0JCQkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwICovLAotCQkJCTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBY
TUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlF
MjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBY
TGlua05hbWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMg
LyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZB
QzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNl
clNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyog
WE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5
OTE4RiAvKiBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlG
MEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTc5Niw5ICsyNTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhG
NDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1
bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAw
RDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0
NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTU0QzUwRjdCMEU4MDFERjMwMDk4MzJBMCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNUQxNUUzQUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAw
MzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkz
MTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMDBCOTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVG
IC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERC
RDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVl
c3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApp
bmRleCAxMWY3MDRlMTI1NDhjYTRmNTFmNmQyMWE4Y2M5ZGQ4YjUyNDE4Y2ZkLi5lMmU0YmFhZDFi
YjQyOTg2ZjA1ZjgwYTE2NzRiZDBjNDU2YWIzMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9u
ZS5jcHAKQEAgLTE0Miw1ICsxNDIsMyBAQAogI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVu
dC5jcHAiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5jcHAiCiAjaW5jbHVkZSAiV2luZG93RXZlbnRD
b250ZXh0LmNwcCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5jcHAiCi0jaW5jbHVkZSAi
WE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2M2VhZDFhM2Y5Zjg2
ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2MzdiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYTUxE
b2N1bWVudFBhcnNlci5oIgotCi0jaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2lu
Y2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUxvYWRlci5oIgotI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyZWVEZXB0
aExpbWl0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0j
aW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwot
Ci1jb25zdCBpbnQgbWF4RXJyb3JzID0gMjU7Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1
c2hDdXJyZW50Tm9kZShDb250YWluZXJOb2RlKiBuKQotewotICAgIEFTU0VSVChuKTsKLSAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZSk7Ci0gICAgaWYgKG4gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAg
bi0+cmVmKCk7Ci0gICAgbV9jdXJyZW50Tm9kZVN0YWNrLmFwcGVuZChtX2N1cnJlbnROb2RlKTsK
LSAgICBtX2N1cnJlbnROb2RlID0gbjsKLSAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUo
KSA+IG1heERPTVRyZWVEZXB0aCkKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFeGNlc3Np
dmUgbm9kZSBuZXN0aW5nLiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotfQotCi12
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJyZW50Tm9kZSgpCi17Ci0gICAgaWYgKCFtX2N1
cnJlbnROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFj
ay5zaXplKCkpOwotCi0gICAgaWYgKG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKLSAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKLQotICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJl
bnROb2RlU3RhY2subGFzdCgpOwotICAgIG1fY3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCi17
Ci0gICAgaWYgKG1fY3VycmVudE5vZGUgJiYgbV9jdXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQot
ICAgICAgICBtX2N1cnJlbnROb2RlLT5kZXJlZigpOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwot
ICAgIG1fbGVhZlRleHROb2RlID0gMDsKLQotICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6
ZSgpKSB7IC8vIEFib3J0ZWQgcGFyc2luZy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY3Vy
cmVudE5vZGVTdGFjay5zaXplKCkgLSAxOyBpICE9IDA7IC0taSkKLSAgICAgICAgICAgIG1fY3Vy
cmVudE5vZGVTdGFja1tpXS0+ZGVyZWYoKTsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFj
a1swXSAmJiBtX2N1cnJlbnROb2RlU3RhY2tbMF0gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IG1fY3VycmVudE5vZGVTdGFja1swXS0+ZGVyZWYoKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZVN0
YWNrLmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQo
Y29uc3QgU2VnbWVudGVkU3RyaW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYg
cykKLXsKLSAgICBTdHJpbmcgcGFyc2VTdHJpbmcgPSBzLnRvU3RyaW5nKCk7Ci0KLSAgICBpZiAo
bV9zYXdYU0xUcmFuc2Zvcm0gfHwgIW1fc2F3Rmlyc3RFbGVtZW50KQotICAgICAgICBtX29yaWdp
bmFsU291cmNlRm9yVHJhbnNmb3JtICs9IHBhcnNlU3RyaW5nOwotCi0gICAgaWYgKGlzU3RvcHBl
ZCgpIHx8IG1fc2F3WFNMVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9w
YXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nU3JjLmFwcGVuZChzKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGRvV3JpdGUocy50b1N0cmluZygpKTsKLQotICAgIC8vIEFm
dGVyIHBhcnNpbmcsIGdvIGFoZWFkIGFuZCBkaXNwYXRjaCBpbWFnZSBiZWZvcmVsb2FkIGV2ZW50
cy4KLSAgICBJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwot
fQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwg
Y29uc3QgY2hhciogbSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAg
aGFuZGxlRXJyb3IodHlwZSwgbSwgVGV4dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQobGluZU51bWJlciksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChjb2x1bW5OdW1iZXIpKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6Omhh
bmRsZUVycm9yKEVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBv
c2l0aW9uKQotewotICAgIGlmICh0eXBlID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhF
cnJvcnMgJiYgbV9sYXN0RXJyb3JQb3NpdGlvbi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYm
IG1fbGFzdEVycm9yUG9zaXRpb24ubV9jb2x1bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSAid2FybmluZyBvbiBsaW5lICIgKyBTdHJpbmc6
Om51bWJlcihwb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSkgKyAiIGF0IGNvbHVtbiAiICsg
U3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSkgKyAiOiAiICsg
bTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZmF0YWw6Ci0gICAg
ICAgICAgICBjYXNlIG5vbkZhdGFsOgotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyAr
PSAiZXJyb3Igb24gbGluZSAiICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJh
c2VkSW50KCkpICsgIiBhdCBjb2x1bW4gIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29s
dW1uLm9uZUJhc2VkSW50KCkpICsgIjogIiArIG07Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xh
c3RFcnJvclBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgICsrbV9lcnJvckNvdW50OwotICAg
IH0KLQotICAgIGlmICh0eXBlICE9IHdhcm5pbmcpCi0gICAgICAgIG1fc2F3RXJyb3IgPSB0cnVl
OwotCi0gICAgaWYgKHR5cGUgPT0gZmF0YWwpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci19Ci0K
LXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVudGVyVGV4dCgpCi17Ci0jaWYgIVVTRShRWE1MU1RS
RUFNKQotICAgIEFTU0VSVChtX2J1ZmZlcmVkVGV4dC5zaXplKCkgPT0gMCk7Ci0jZW5kaWYKLSAg
ICBBU1NFUlQoIW1fbGVhZlRleHROb2RlKTsKLSAgICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCAiIik7Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQo
bV9sZWFmVGV4dE5vZGUuZ2V0KCkpOwotfQotCi0jaWYgIVVTRShRWE1MU1RSRUFNKQotc3RhdGlj
IGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6
ZSkgCi17IAotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHN0cmluZyksIHNpemUpOyAKLX0KLSNlbmRpZgotCi0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OmV4aXRUZXh0KCkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotI2lm
ICFVU0UoUVhNTFNUUkVBTSkKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2xlYWZU
ZXh0Tm9kZS0+YXBwZW5kRGF0YSh0b1N0cmluZyhtX2J1ZmZlcmVkVGV4dC5kYXRhKCksIG1fYnVm
ZmVyZWRUZXh0LnNpemUoKSksIGVjKTsKLSAgICBWZWN0b3I8eG1sQ2hhcj4gZW1wdHk7Ci0gICAg
bV9idWZmZXJlZFRleHQuc3dhcChlbXB0eSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3ZpZXcgJiYg
IW1fbGVhZlRleHROb2RlLT5hdHRhY2hlZCgpKQotICAgICAgICBtX2xlYWZUZXh0Tm9kZS0+YXR0
YWNoKCk7Ci0KLSAgICBtX2xlYWZUZXh0Tm9kZSA9IDA7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmRldGFjaCgpCi17Ci0gICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7Ci0gICAgU2Ny
aXB0YWJsZURvY3VtZW50UGFyc2VyOjpkZXRhY2goKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6ZW5kKCkKLXsKLSAgICAvLyBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIgd2lsbCBkbyBi
YWQgdGhpbmdzIHRvIHRoZSBkb2N1bWVudCBpZiBkb0VuZCgpIGlzIGNhbGxlZC4KLSAgICAvLyBJ
IGRvbid0IGJlbGlldmUgWE1MRG9jdW1lbnRQYXJzZXJRdCBuZWVkcyBkb0VuZCBjYWxsZWQgaW4g
dGhlIGZyYWdtZW50IGNhc2UuCi0gICAgQVNTRVJUKCFtX3BhcnNpbmdGcmFnbWVudCk7Ci0KLSAg
ICBkb0VuZCgpOwotCi0gICAgLy8gZG9FbmQoKSBjb3VsZCBwcm9jZXNzIGEgc2NyaXB0IHRhZywg
dGh1cyBwYXVzaW5nIHBhcnNpbmcuCi0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9zYXdFcnJvcikKLSAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdl
QmxvY2soKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZXhpdFRleHQoKTsKLSAgICAgICAgZG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAg
fQotCi0gICAgaWYgKGlzUGFyc2luZygpKQotICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygp
OwotICAgIGRvY3VtZW50KCktPnNldFJlYWR5U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsK
LSAgICBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKLSAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBh
cnNpbmcoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghbV9wYXJzZXJTdG9wcGVkKSBoZXJlLCBzaW5jZSBp
dCBkb2VzIG5vdAotICAgIC8vIG1ha2VzIHNlbnNlIHRvIGNhbGwgYW55IG1ldGhvZHMgb24gRG9j
dW1lbnRQYXJzZXIgb25jZSBpdCdzIGJlZW4gc3RvcHBlZC4KLSAgICAvLyBIb3dldmVyLCBGcmFt
ZUxvYWRlcjo6c3RvcCBjYWxscyBEb2N1bWVudFBhcnNlcjo6ZmluaXNoIHVuY29uZGl0aW9uYWxs
eS4KLQotICAgIGlmIChtX3BhcnNlclBhdXNlZCkKLSAgICAgICAgbV9maW5pc2hDYWxsZWQgPSB0
cnVlOwotICAgIGVsc2UKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OmZpbmlzaFdhc0NhbGxlZCgpCi17Ci0gICAgcmV0dXJuIG1fZmluaXNoQ2FsbGVkOwotfQot
Ci1zdGF0aWMgaW5saW5lIFJlZlB0cjxFbGVtZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVh
ZGVyKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlcykKLXsKLSAgICBS
ZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxlbWVudCA9IGRvYy0+Y3JlYXRlRWxlbWVudChRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAicGFyc2VyZXJyb3IiLCB4aHRtbE5hbWVzcGFjZVVSSSksIGZhbHNl
KTsKLSAgICByZXBvcnRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTog
YmxvY2s7IHdoaXRlLXNwYWNlOiBwcmU7IGJvcmRlcjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6
IDAgMWVtIDAgMWVtOyBtYXJnaW46IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6
IGJsYWNrIik7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gaDMgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaDNUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVt
ZW50LT5hcHBlbmRDaGlsZChoMy5nZXQoKSwgZWMpOwotICAgIGgzLT5hcHBlbmRDaGlsZChkb2Mt
PmNyZWF0ZVRleHROb2RlKCJUaGlzIHBhZ2UgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6
IiksIGVjKTsKLQotICAgIFJlZlB0cjxFbGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVu
dChkaXZUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChmaXhlZC5n
ZXQoKSwgZWMpOwotICAgIGZpeGVkLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1p
bHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4Iik7Ci0gICAgZml4ZWQtPmFwcGVuZENoaWxkKGRv
Yy0+Y3JlYXRlVGV4dE5vZGUoZXJyb3JNZXNzYWdlcyksIGVjKTsKLQotICAgIGgzID0gZG9jLT5j
cmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7Ci0gICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hp
bGQoaDMuZ2V0KCksIGVjKTsKLSAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9k
ZSgiQmVsb3cgaXMgYSByZW5kZXJpbmcgb2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9y
LiIpLCBlYyk7Ci0KLSAgICByZXR1cm4gcmVwb3J0RWxlbWVudDsKLX0KLQotdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKQotewotI2lmIFVTRShRWE1MU1RS
RUFNKQotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlm
Ci0gICAgLy8gT25lIG9yIG1vcmUgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHRo
ZSBjb2RlLiBEaXNwbGF5IGFuIGVycm9yIGJsb2NrIHRvIHRoZSB1c2VyIGFib3ZlCi0gICAgLy8g
dGhlIG5vcm1hbCBjb250ZW50ICh0aGUgRE9NIHRyZWUgaXMgY3JlYXRlZCBtYW51YWxseSBhbmQg
aW5jbHVkZXMgbGluZS9jb2wgaW5mbyByZWdhcmRpbmcKLSAgICAvLyB3aGVyZSB0aGUgZXJyb3Jz
IGFyZSBsb2NhdGVkKQotCi0gICAgLy8gQ3JlYXRlIGVsZW1lbnRzIGZvciBkaXNwbGF5Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmICghZG9jdW1lbnRFbGVtZW50KSB7Ci0gICAgICAg
IFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0
bWxUYWcsIGZhbHNlKTsKLSAgICAgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50
LCBlYyk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVs
ZW1lbnQoYm9keVRhZywgZmFsc2UpOwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQo
Ym9keSwgZWMpOwotICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwotICAgIH0K
LSNpZiBFTkFCTEUoU1ZHKQotICAgIGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudC0+bmFtZXNwYWNl
VVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSkgewotICAgICAgICBSZWZQdHI8RWxl
bWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxz
ZSk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1l
bnQoYm9keVRhZywgZmFsc2UpOwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9k
eSwgZWMpOwotICAgICAgICBib2R5LT5hcHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQsIGVjKTsK
LSAgICAgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Ci0g
ICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJvZHkuZ2V0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAg
UmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVh
ZGVyKGRvY3VtZW50LCBtX2Vycm9yTWVzc2FnZXMpOwotICAgIGRvY3VtZW50RWxlbWVudC0+aW5z
ZXJ0QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBl
Yyk7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgaWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudChwVGFnLCBmYWxzZSk7Ci0gICAgICAgIHBhcmFncmFwaC0+c2V0QXR0
cmlidXRlKHN0eWxlQXR0ciwgIndoaXRlLXNwYWNlOiBub3JtYWwiKTsKLSAgICAgICAgcGFyYWdy
YXBoLT5hcHBlbmRDaGlsZChkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQg
d2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBs
aW5lIGFuZCBjb2x1bW4gbnVtYmVycyBnaXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVz
dWx0LiIpLCBlYyk7Ci0gICAgICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKHBhcmFncmFw
aC5yZWxlYXNlKCksIGVjKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSogdW51c2VkUmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh1
bnVzZWRSZXNvdXJjZSwgdW51c2VkUmVzb3VyY2UgPT0gbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBB
U1NFUlQobV9wZW5kaW5nU2NyaXB0LT5hY2Nlc3NDb3VudCgpID4gMCk7Ci0KLSAgICBTY3JpcHRT
b3VyY2VDb2RlIHNvdXJjZUNvZGUobV9wZW5kaW5nU2NyaXB0LmdldCgpKTsKLSAgICBib29sIGVy
cm9yT2NjdXJyZWQgPSBtX3BlbmRpbmdTY3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKLSAgICBib29s
IHdhc0NhbmNlbGVkID0gbV9wZW5kaW5nU2NyaXB0LT53YXNDYW5jZWxlZCgpOwotCi0gICAgbV9w
ZW5kaW5nU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9wZW5kaW5nU2NyaXB0ID0g
MDsKLQotICAgIFJlZlB0cjxFbGVtZW50PiBlID0gbV9zY3JpcHRFbGVtZW50OwotICAgIG1fc2Ny
aXB0RWxlbWVudCA9IDA7Ci0KLSAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9T
Y3JpcHRFbGVtZW50KGUuZ2V0KCkpOwotICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLQotICAg
IC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2Vw
dCBhbGl2ZSBldmVuIGlmIGRldGFjaGVkLgotICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4g
cHJvdGVjdCh0aGlzKTsKLSAgICAKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAgICAgc2Ny
aXB0RWxlbWVudC0+ZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIXdhc0NhbmNl
bGVkKSB7Ci0gICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7
Ci0gICAgICAgIHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgfQotCi0g
ICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLQotICAgIGlmICghaXNEZXRhY2hlZCgpICYmICFtX3Jl
cXVlc3RpbmdTY3JpcHQpCi0gICAgICAgIHJlc3VtZVBhcnNpbmcoKTsKLX0KLQotYm9vbCBYTUxE
b2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcGVuZGluZ1NjcmlwdDsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJz
aW5nKCkKLXsKLSAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFyc2VyUGF1c2VkID0gdHJ1ZTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgaWYgKCFjaHVuay5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBs
ZW1lbnQgdGhlIEhUTUw1IFhNTCBGcmFnbWVudCBwYXJzaW5nIGFsZ29yaXRobToKLSAgICAvLyBo
dHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFn
ZS90aGUteGh0bWwtc3ludGF4Lmh0bWwjeG1sLWZyYWdtZW50LXBhcnNpbmctYWxnb3JpdGhtCi0g
ICAgLy8gRm9yIG5vdyB3ZSBoYXZlIGEgaGFjayBmb3Igc2NyaXB0L3N0eWxlIGlubmVySFRNTCBz
dXBwb3J0OgotICAgIGlmIChjb250ZXh0RWxlbWVudCAmJiAoY29udGV4dEVsZW1lbnQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgY29udGV4dEVsZW1lbnQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkpIHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlckFk
ZENoaWxkKGZyYWdtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+
IHBhcnNlciA9IFhNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIGNvbnRleHRFbGVt
ZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAgICBib29sIHdlbGxGb3JtZWQgPSBwYXJzZXIt
PmFwcGVuZEZyYWdtZW50U291cmNlKGNodW5rKTsKLSAgICAvLyBEbyBub3QgY2FsbCBmaW5pc2go
KS4gIEN1cnJlbnQgZmluaXNoKCkgYW5kIGRvRW5kKCkgaW1wbGVtZW50YXRpb25zIHRvdWNoIHRo
ZSBtYWluIERvY3VtZW50L2xvYWRlcgotICAgIC8vIGFuZCBjYW4gY2F1c2UgY3Jhc2hlcyBpbiB0
aGUgZnJhZ21lbnQgY2FzZS4KLSAgICBwYXJzZXItPmRldGFjaCgpOyAvLyBBbGxvd3MgfkRvY3Vt
ZW50UGFyc2VyIHRvIGFzc2VydCBpdCB3YXMgZGV0YWNoZWQgYmVmb3JlIGRlc3RydWN0aW9uLgot
ICAgIHJldHVybiB3ZWxsRm9ybWVkOyAvLyBhcHBlbmRGcmFnbWVudFNvdXJjZSgpJ3Mgd2VsbEZv
cm1lZCBpcyBtb3JlIHBlcm1pc3NpdmUgdGhhbiB3ZWxsRm9ybWVkKCkuCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhY2RkMjVjNTVkYzAzNWI4ZjMyYTc0MTc1YTQ2ZDk4
OWVlYjI3NWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vpbmln
IChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBYTUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIFhN
TERvY3VtZW50UGFyc2VyX2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24uaCIKLSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIK
LSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi0j
aW5jbHVkZSA8cXhtbHN0cmVhbS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgot
I2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIENvbnRhaW5lck5vZGU7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBD
YWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBEb2N1
bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBQZW5kaW5nQ2Fs
bGJhY2tzOwotY2xhc3MgVGV4dDsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBjbGFzcyBY
TUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4g
Y3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25z
dCBDU3RyaW5nJiBjaHVuayk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNv
bnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0
YSk7Ci0gICAgICAgIH5YTUxQYXJzZXJDb250ZXh0KCk7Ci0gICAgICAgIHhtbFBhcnNlckN0eHRQ
dHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCi0gICAg
ICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgY2xh
c3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBw
dWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50
UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIo
ZG9jdW1lbnQsIHZpZXcpKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxY
TUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNl
cihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlzc2lvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAg
flhNTERvY3VtZW50UGFyc2VyKCk7Ci0KLSAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tz
OgotICAgICAgICBlbnVtIEVycm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9Owot
ICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
aW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB2b2lkIGhhbmRsZUVy
cm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7Ci0KLSAg
ICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERv
Y3VtZW50ID0gaXNYSFRNTDsgfQotICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAg
ICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1Q
RG9jdW1lbnQgPSBpc1hIVE1MOyB9Ci0gICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9Ci0jZW5kaWYKLQotICAgICAgICBz
dGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRG
cmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KLSAgICAg
ICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsg
fQotCi0gICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAg
IFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKLQotICAgICAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAw
KTsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQq
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotCi0gICAgICAgIC8vIEZyb20gRG9jdW1l
bnRQYXJzZXIKLSAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
ZmluaXNoV2FzQ2FsbGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3Jp
cHRzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIo
KSBjb25zdDsKLSAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OwotCi0gICAgICAgIC8v
IGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0KLSAgICAgICAgdm9pZCBlbmQoKTsKLQotICAgICAg
ICB2b2lkIHBhdXNlUGFyc2luZygpOwotICAgICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKLQot
ICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwotCi0jaWYg
VVNFKFFYTUxTVFJFQU0pCi1wcml2YXRlOgotICAgICAgICB2b2lkIHBhcnNlKCk7Ci0gICAgICAg
IHZvaWQgc3RhcnREb2N1bWVudCgpOwotICAgICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7
Ci0gICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDaGFy
YWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAg
ICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7Ci0g
ICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKLSAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOwotICAg
ICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7Ci0jZWxzZQotcHVibGljOgotICAgICAgICAvLyBj
YWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCi0gICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMs
IDApOwotICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2Fs
TmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGlu
dCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENo
YXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29u
c3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgICAgICB2b2lkIGVuZEVsZW1lbnRO
cygpOwotICAgICAgICB2b2lkIGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7
Ci0gICAgICAgIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdl
dCwgY29uc3QgeG1sQ2hhciogZGF0YSk7Ci0gICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4
bWxDaGFyKiBzLCBpbnQgbGVuKTsKLSAgICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIq
IHMpOwotICAgICAgICB2b2lkIHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwg
Y29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKTsKLSAgICAgICAgdm9pZCBp
bnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5h
bElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQo
KTsKLSNlbmRpZgotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNv
bnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5nKCkpOwotCi0gICAgICAgIHZvaWQg
cHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKLSAgICAgICAgdm9pZCBwb3BDdXJyZW50
Tm9kZSgpOwotICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotCi0gICAgICAg
IHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKLQotICAgICAgICB2b2lkIGVudGVyVGV4
dCgpOwotICAgICAgICB2b2lkIGV4aXRUZXh0KCk7Ci0KLSAgICAgICAgdm9pZCBkb1dyaXRlKGNv
bnN0IFN0cmluZyYpOwotICAgICAgICB2b2lkIGRvRW5kKCk7Ci0KLSAgICAgICAgRnJhbWVWaWV3
KiBtX3ZpZXc7Ci0KLSAgICAgICAgU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07
Ci0KLSNpZiBVU0UoUVhNTFNUUkVBTSkKLSAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVh
bTsKLSAgICAgICAgYm9vbCBtX3dyb3RlVGV4dDsKLSNlbHNlCi0gICAgICAgIHhtbFBhcnNlckN0
eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29u
dGV4dCgpIDogMDsgfTsKLSAgICAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4
dDsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsK
LSAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1fYnVmZmVyZWRUZXh0OwotI2VuZGlmCi0gICAgICAg
IENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5vZGU7Ci0gICAgICAgIFZlY3RvcjxDb250YWluZXJO
b2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOwotCi0gICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZU
ZXh0Tm9kZTsKLQotICAgICAgICBib29sIG1fc2F3RXJyb3I7Ci0gICAgICAgIGJvb2wgbV9zYXdD
U1M7Ci0gICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9zYXdG
aXJzdEVsZW1lbnQ7Ci0gICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7Ci0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKLSAgICAgICAgYm9v
bCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKLSNlbmRpZgotCi0gICAgICAgIGJvb2wgbV9wYXJz
ZXJQYXVzZWQ7Ci0gICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICBib29s
IG1fZmluaXNoQ2FsbGVkOwotCi0gICAgICAgIGludCBtX2Vycm9yQ291bnQ7Ci0gICAgICAgIFRl
eHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3NpdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fZXJyb3JN
ZXNzYWdlczsKLQotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1f
cGVuZGluZ1NjcmlwdDsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsK
LSAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRpb247Ci0KLSAgICAgICAg
Ym9vbCBtX3BhcnNpbmdGcmFnbWVudDsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5h
bWVzcGFjZVVSSTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9t
aWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKLSAgICAgICAgUHJlZml4Rm9yTmFtZXNw
YWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VNYXA7Ci0gICAgICAgIFNlZ21lbnRlZFN0cmluZyBt
X3BlbmRpbmdTcmM7Ci0gICAgICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3Njcmlw
dGluZ1Blcm1pc3Npb247Ci0gICAgfTsKLQotI2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9j
UHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgdXJsKTsKLSNlbmRpZgotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBw
YXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGYyZjM5ZmI0ZWM3ZGVlMDcwYTgzNTE1YWUwYzRmNDEwZjZiNzI4
NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkg
PHBta0Bwb3N0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwg
V2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1l
bnRQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hl
ZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRl
ICJIVE1MRW50aXR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5o
IgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtU291cmNlLmgiCi0jaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgotI2luY2x1ZGUgIlhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCIKLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8
bGlieG1sL3BhcnNlckludGVybmFscy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotI2lmIEVOQUJMRShYU0xUKQotI2luY2x1ZGUgIlhNTFRyZWVWaWV3ZXIuaCIKLSNpbmNsdWRl
IDxsaWJ4c2x0L3hzbHQuaD4KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0jaW5jbHVk
ZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNlbmRpZgotCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUGVuZGluZ0NhbGxiYWNrcyk7Ci1wdWJsaWM6Ci0gICAgflBl
bmRpbmdDYWxsYmFja3MoKSB7IH0KLSAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nQ2FsbGJh
Y2tzPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5n
Q2FsbGJhY2tzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRTdGFydEVsZW1lbnROU0Nh
bGxiYWNrKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJl
Zml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNlcywg
aW50IG5iX2F0dHJpYnV0ZXMsIGludCBuYl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBhdHRy
aWJ1dGVzKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFj
ayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnhtbExvY2FsTmFtZSA9IHhtbFN0cmR1cCh4bWxMb2Nh
bE5hbWUpOwotICAgICAgICBjYWxsYmFjay0+eG1sUHJlZml4ID0geG1sU3RyZHVwKHhtbFByZWZp
eCk7Ci0gICAgICAgIGNhbGxiYWNrLT54bWxVUkkgPSB4bWxTdHJkdXAoeG1sVVJJKTsKLSAgICAg
ICAgY2FsbGJhY2stPm5iX25hbWVzcGFjZXMgPSBuYl9uYW1lc3BhY2VzOwotICAgICAgICBjYWxs
YmFjay0+bmFtZXNwYWNlcyA9IHN0YXRpY19jYXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVv
Zih4bWxDaGFyKikgKiBuYl9uYW1lc3BhY2VzICogMikpOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG5iX25hbWVzcGFjZXMgKiAyIDsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2stPm5h
bWVzcGFjZXNbaV0gPSB4bWxTdHJkdXAobmFtZXNwYWNlc1tpXSk7Ci0gICAgICAgIGNhbGxiYWNr
LT5uYl9hdHRyaWJ1dGVzID0gbmJfYXR0cmlidXRlczsKLSAgICAgICAgY2FsbGJhY2stPm5iX2Rl
ZmF1bHRlZCA9IG5iX2RlZmF1bHRlZDsKLSAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXMgPSBz
dGF0aWNfY2FzdDx4bWxDaGFyKio+KHhtbE1hbGxvYyhzaXplb2YoeG1sQ2hhciopICogbmJfYXR0
cmlidXRlcyAqIDUpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVz
OyBpKyspIHsKLSAgICAgICAgICAgIC8vIEVhY2ggYXR0cmlidXRlIGhhcyA1IGVsZW1lbnRzIGlu
IHRoZSBhcnJheToKLSAgICAgICAgICAgIC8vIG5hbWUsIHByZWZpeCwgdXJpLCB2YWx1ZSBhbmQg
YW4gZW5kIHBvaW50ZXIuCi0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisr
KQotICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5hdHRyaWJ1dGVzW2kgKiA1ICsgal0gPSB4bWxT
dHJkdXAoYXR0cmlidXRlc1tpICogNSArIGpdKTsKLQotICAgICAgICAgICAgaW50IGxlbiA9IGF0
dHJpYnV0ZXNbaSAqIDUgKyA0XSAtIGF0dHJpYnV0ZXNbaSAqIDUgKyAzXTsKLQotICAgICAgICAg
ICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyAzXSA9IHhtbFN0cm5kdXAoYXR0cmlidXRl
c1tpICogNSArIDNdLCBsZW4pOwotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAq
IDUgKyA0XSA9IGNhbGxiYWNrLT5hdHRyaWJ1dGVzW2kgKiA1ICsgM10gKyBsZW47Ci0gICAgICAg
IH0KLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGFwcGVuZEVuZEVsZW1lbnROU0NhbGxiYWNrKCkKLSAgICB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLmFwcGVuZChhZG9wdFB0cihuZXcgUGVuZGluZ0VuZEVsZW1lbnROU0Nh
bGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2soY29u
c3QgeG1sQ2hhciogcywgaW50IGxlbikKLSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2hh
cmFjdGVyc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2hhcmFjdGVy
c0NhbGxiYWNrKTsKLQotICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsK
LSAgICAgICAgY2FsbGJhY2stPmxlbiA9IGxlbjsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBl
bmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZFByb2Nlc3Np
bmdJbnN0cnVjdGlvbkNhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hh
ciogZGF0YSkKLSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25DYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnRhcmdldCA9IHhtbFN0cmR1
cCh0YXJnZXQpOwotICAgICAgICBjYWxsYmFjay0+ZGF0YSA9IHhtbFN0cmR1cChkYXRhKTsKLQot
ICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGVuZENEQVRBQmxvY2tDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQg
bGVuKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2spOwotCi0gICAg
ICAgIGNhbGxiYWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOwotICAgICAgICBjYWxsYmFjay0+
bGVuID0gbGVuOwotCi0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNl
KCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kQ29tbWVudENhbGxiYWNrKGNvbnN0IHhtbENo
YXIqIHMpCi0gICAgewotICAgICAgICBPd25QdHI8UGVuZGluZ0NvbW1lbnRDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ0NvbW1lbnRDYWxsYmFjayk7Ci0KLSAgICAgICAg
Y2FsbGJhY2stPnMgPSB4bWxTdHJkdXAocyk7Ci0KLSAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5k
KGNhbGxiYWNrLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRJbnRlcm5hbFN1
YnNldENhbGxiYWNrKGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFs
SUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlEKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRp
bmdJbnRlcm5hbFN1YnNldENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5n
SW50ZXJuYWxTdWJzZXRDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm5hbWUgPSB4bWxT
dHJkdXAobmFtZSk7Ci0gICAgICAgIGNhbGxiYWNrLT5leHRlcm5hbElEID0geG1sU3RyZHVwKGV4
dGVybmFsSUQpOwotICAgICAgICBjYWxsYmFjay0+c3lzdGVtSUQgPSB4bWxTdHJkdXAoc3lzdGVt
SUQpOwotCi0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgYXBwZW5kRXJyb3JDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlcjo6
RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHhtbENoYXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBp
bnQgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdFcnJvckNhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nRXJyb3JDYWxsYmFjayk7Ci0KLSAg
ICAgICAgY2FsbGJhY2stPm1lc3NhZ2UgPSB4bWxTdHJkdXAobWVzc2FnZSk7Ci0gICAgICAgIGNh
bGxiYWNrLT50eXBlID0gdHlwZTsKLSAgICAgICAgY2FsbGJhY2stPmxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyOwotICAgICAgICBjYWxsYmFjay0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwot
Ci0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0K
LQotICAgIHZvaWQgY2FsbEFuZFJlbW92ZUZpcnN0Q2FsbGJhY2soWE1MRG9jdW1lbnRQYXJzZXIq
IHBhcnNlcikKLSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7Ci0gICAgICAgIGNhbGxiYWNrLT5jYWxsKHBhcnNl
cik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFj
a3MuaXNFbXB0eSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGluZ0NhbGxiYWNrcygpIHsgfQot
Ci0gICAgc3RydWN0IFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdD
YWxsYmFjaygpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyKSA9IDA7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50
TlNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5Q
ZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHht
bEZyZWUoeG1sTG9jYWxOYW1lKTsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sUHJlZml4KTsKLSAg
ICAgICAgICAgIHhtbEZyZWUoeG1sVVJJKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbmJfbmFtZXNwYWNlcyAqIDI7IGkrKykKLSAgICAgICAgICAgICAgICB4bWxGcmVlKG5hbWVz
cGFjZXNbaV0pOwotICAgICAgICAgICAgeG1sRnJlZShuYW1lc3BhY2VzKTsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRlczsgaSsrKQotICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVl
KGF0dHJpYnV0ZXNbaSAqIDUgKyBqXSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJz
ZXIqIHBhcnNlcikKLSAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLT5zdGFydEVsZW1lbnRO
cyh4bWxMb2NhbE5hbWUsIHhtbFByZWZpeCwgeG1sVVJJLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYl9uYW1lc3BhY2VzLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIq
Kj4obmFtZXNwYWNlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5i
X2F0dHJpYnV0ZXMsIG5iX2RlZmF1bHRlZCwgY29uc3RfY2FzdDxjb25zdCB4bWxDaGFyKio+KGF0
dHJpYnV0ZXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHhtbExvY2FsTmFtZTsK
LSAgICAgICAgeG1sQ2hhciogeG1sUHJlZml4OwotICAgICAgICB4bWxDaGFyKiB4bWxVUkk7Ci0g
ICAgICAgIGludCBuYl9uYW1lc3BhY2VzOwotICAgICAgICB4bWxDaGFyKiogbmFtZXNwYWNlczsK
LSAgICAgICAgaW50IG5iX2F0dHJpYnV0ZXM7Ci0gICAgICAgIGludCBuYl9kZWZhdWx0ZWQ7Ci0g
ICAgICAgIHhtbENoYXIqKiBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGlu
Z0VuZEVsZW1lbnROU0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHBhcnNlci0+ZW5kRWxlbWVudE5zKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgc3RydWN0IFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0Nh
bGxiYWNrIHsKLSAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjaygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUocyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwYXJzZXItPmNoYXJhY3RlcnMocywgbGVuKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHhtbENoYXIqIHM7Ci0gICAgICAgIGludCBsZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQ
ZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxi
YWNrIHsKLSAgICAgICAgdmlydHVhbCB+UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxi
YWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgeG1sRnJlZSh0YXJnZXQpOwotICAgICAgICAg
ICAgeG1sRnJlZShkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxs
KFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNl
ci0+cHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB4bWxDaGFyKiB0YXJnZXQ7Ci0gICAgICAgIHhtbENoYXIqIGRhdGE7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxs
YmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2soKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB4bWxGcmVlKHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcGFyc2VyLT5jZGF0YUJsb2NrKHMsIGxlbik7Ci0gICAgICAgIH0KLQotICAgICAg
ICB4bWxDaGFyKiBzOwotICAgICAgICBpbnQgbGVuOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVu
ZGluZ0NvbW1lbnRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nQ29tbWVudENhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAg
eG1sRnJlZShzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERv
Y3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+Y29t
bWVudChzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2Fs
bGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjaygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUobmFtZSk7Ci0gICAgICAgICAgICB4bWxG
cmVlKGV4dGVybmFsSUQpOwotICAgICAgICAgICAgeG1sRnJlZShzeXN0ZW1JRCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2Vy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXItPmludGVybmFsU3Vic2V0KG5hbWUsIGV4
dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIG5hbWU7
Ci0gICAgICAgIHhtbENoYXIqIGV4dGVybmFsSUQ7Ci0gICAgICAgIHhtbENoYXIqIHN5c3RlbUlE
OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0Vycm9yQ2FsbGJhY2s6IHB1YmxpYyBQZW5k
aW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nRXJyb3JDYWxsYmFjaygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBwYXJzZXItPmhhbmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG1lc3NhZ2UpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXI6OkVycm9yVHlwZSB0eXBlOwotICAgICAgICB4
bWxDaGFyKiBtZXNzYWdlOwotICAgICAgICBpbnQgbGluZU51bWJlcjsKLSAgICAgICAgaW50IGNv
bHVtbk51bWJlcjsKLSAgICB9OwotCi0gICAgRGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4g
PiBtX2NhbGxiYWNrczsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1zdGF0aWMgaW50IGdsb2JhbERlc2NyaXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgbGlieG1sTG9hZGVyVGhyZWFkID0gMDsKLQotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3Qg
Y2hhciopCi17Ci0gICAgLy8gT25seSBtYXRjaCBsb2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMg
b2YgbGlieG1sMiBmcm9tIHdpdGhpbiBYTUxEb2N1bWVudFBhcnNlciB0byBhdm9pZAotICAgIC8v
IGludGVyZmVyaW5nIHdpdGggY2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnht
bDIuICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJl
dHVybiBYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIg
JiYgY3VycmVudFRocmVhZCgpID09IGxpYnhtbExvYWRlclRocmVhZDsKLX0KLQotY2xhc3MgT2Zm
c2V0QnVmZmVyIHsKLXB1YmxpYzoKLSAgICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+
JiBiKSA6IG1fYnVmZmVyKGIpLCBtX2N1cnJlbnRPZmZzZXQoMCkgeyB9Ci0KLSAgICBpbnQgcmVh
ZE91dEJ5dGVzKGNoYXIqIG91dHB1dEJ1ZmZlciwgdW5zaWduZWQgYXNrZWRUb1JlYWQpCi0gICAg
ewotICAgICAgICB1bnNpZ25lZCBieXRlc0xlZnQgPSBtX2J1ZmZlci5zaXplKCkgLSBtX2N1cnJl
bnRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGxlblRvQ29weSA9IG1pbihhc2tlZFRvUmVhZCwg
Ynl0ZXNMZWZ0KTsKLSAgICAgICAgaWYgKGxlblRvQ29weSkgewotICAgICAgICAgICAgbWVtY3B5
KG91dHB1dEJ1ZmZlciwgbV9idWZmZXIuZGF0YSgpICsgbV9jdXJyZW50T2Zmc2V0LCBsZW5Ub0Nv
cHkpOwotICAgICAgICAgICAgbV9jdXJyZW50T2Zmc2V0ICs9IGxlblRvQ29weTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbGVuVG9Db3B5OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI7Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50T2Zmc2V0OwotfTsKLQot
c3RhdGljIHZvaWQgc3dpdGNoVG9VVEYxNih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCi17Ci0gICAg
Ly8gSGFjayBhcm91bmQgbGlieG1sMidzIGxhY2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0
IGJ5IG1hbnVhbGx5Ci0gICAgLy8gcmVzZXR0aW5nIHRoZSBlbmNvZGluZyB0byBVVEYtMTYgYmVm
b3JlIGV2ZXJ5IGNodW5rLiAgT3RoZXJ3aXNlIGxpYnhtbAotICAgIC8vIHdpbGwgZGV0ZWN0IDw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IjxlbmNvZGluZyBuYW1lPiI/PiBibG9ja3MKLSAg
ICAvLyBhbmQgc3dpdGNoIGVuY29kaW5ncywgY2F1c2luZyB0aGUgcGFyc2UgdG8gZmFpbC4KLSAg
ICBjb25zdCBVQ2hhciBCT00gPSAweEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01I
aWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsK
LSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NI
QVJfRU5DT0RJTkdfVVRGMTZMRSA6IFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkUpOwotfQotCi1z
dGF0aWMgYm9vbCBzaG91bGRBbGxvd0V4dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKLQotICAgIC8vIE9uIG5vbi1XaW5k
b3dzIHBsYXRmb3JtcyBsaWJ4bWwgYXNrcyBmb3IgdGhpcyBVUkwsIHRoZQotICAgIC8vICJYTUxf
WE1MX0RFRkFVTFRfQ0FUQUxPRyIsIG9uIGluaXRpYWxpemF0aW9uLgotICAgIGlmICh1cmxTdHJp
bmcgPT0gImZpbGU6Ly8vZXRjL3htbC9jYXRhbG9nIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gT24gV2luZG93cywgbGlieG1sIGNvbXB1dGVzIGEgVVJMIHJlbGF0aXZlIHRvIHdo
ZXJlIGl0cyBETEwgcmVzaWRlcy4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImZpbGU6
Ly8vIiwgZmFsc2UpICYmIHVybFN0cmluZy5lbmRzV2l0aCgiL2V0Yy9jYXRhbG9nIiwgZmFsc2Up
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgbW9zdCBjb21tb24gRFRELiAg
VGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiBoYW1tZXJpbmcgd3d3LnczYy5vcmcKLSAgICAvLyBi
eSByZXF1ZXN0aW5nIHRoaXMgVVJMIGZvciBldmVyeSBYSFRNTCBkb2N1bWVudC4KLSAgICBpZiAo
dXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sIiwgZmFsc2Up
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTaW1pbGFybHksIHRoZXJlIGlzbid0
IG11Y2ggcG9pbnQgaW4gcmVxdWVzdGluZyB0aGUgU1ZHIERURC4KLSAgICBpZiAodXJsU3RyaW5n
LnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRyIsIGZhbHNlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGxpYnhtbCBkb2Vzbid0IGdpdmUgdXMg
YSBsb3Qgb2YgY29udGV4dCBmb3IgZGVjaWRpbmcgd2hldGhlciB0bwotICAgIC8vIGFsbG93IHRo
aXMgcmVxdWVzdC4gIEluIHRoZSB3b3JzdCBjYXNlLCB0aGlzIGxvYWQgY291bGQgYmUgZm9yIGFu
Ci0gICAgLy8gZXh0ZXJuYWwgZW50aXR5IGFuZCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGNvdWxk
IHNpbXBseSByZWFkIHRoZQotICAgIC8vIHJldHJpZXZlZCBjb250ZW50LiAgSWYgd2UgaGFkIG1v
cmUgY29udGV4dCwgd2UgY291bGQgcG90ZW50aWFsbHkgYWxsb3cKLSAgICAvLyB0aGUgcGFyc2Vy
IHRvIGxvYWQgYSBEVEQuICBBcyB0aGluZ3Mgc3RhbmQsIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2
ZQotICAgIC8vIHJvdXRlIGFuZCBhbGxvdyBzYW1lLW9yaWdpbiByZXF1ZXN0cyBvbmx5LgotICAg
IGlmICghWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVy
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAg
ICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5w
cmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3Qg
Y2hhciogdXJpKQotewotICAgIEFTU0VSVChYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50
Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGli
eG1sTG9hZGVyVGhyZWFkKTsKLQotICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKLQotICAgIGlm
ICghc2hvdWxkQWxsb3dFeHRlcm5hbExvYWQodXJsKSkKLSAgICAgICAgcmV0dXJuICZnbG9iYWxE
ZXNjcmlwdG9yOwotCi0gICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0KLSAgICB7Ci0gICAgICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IFhNTERvY3VtZW50
UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXJTY29wZSBzY29wZSgwKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZXN0b3JlIHRoZSBvcmlnaW5hbCBnbG9iYWwgZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgotCi0gICAg
ICAgIGlmIChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hl
ZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7
Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2ZSB0byBjaGVjayB0aGUgVVJMIGFnYWluIGFmdGVyIHRo
ZSBsb2FkIHRvIGNhdGNoIHJlZGlyZWN0cy4KLSAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2Mz4uCi0gICAgaWYgKCFzaG91bGRBbGxvd0V4dGVy
bmFsTG9hZChyZXNwb25zZS51cmwoKSkpCi0gICAgICAgIHJldHVybiAmZ2xvYmFsRGVzY3JpcHRv
cjsKLQotICAgIHJldHVybiBuZXcgT2Zmc2V0QnVmZmVyKGRhdGEpOwotfQotCi1zdGF0aWMgaW50
IHJlYWRGdW5jKHZvaWQqIGNvbnRleHQsIGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICAv
LyBEbyAwLWJ5dGUgcmVhZHMgaW4gY2FzZSBvZiBhIG51bGwgZGVzY3JpcHRvcgotICAgIGlmIChj
b250ZXh0ID09ICZnbG9iYWxEZXNjcmlwdG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE9m
ZnNldEJ1ZmZlciogZGF0YSA9IHN0YXRpY19jYXN0PE9mZnNldEJ1ZmZlcio+KGNvbnRleHQpOwot
ICAgIHJldHVybiBkYXRhLT5yZWFkT3V0Qnl0ZXMoYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMg
aW50IHdyaXRlRnVuYyh2b2lkKiwgY29uc3QgY2hhciosIGludCkKLXsKLSAgICAvLyBBbHdheXMg
anVzdCBkbyAwLWJ5dGUgd3JpdGVzCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xv
c2VGdW5jKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgaWYgKGNvbnRleHQgIT0gJmdsb2JhbERlc2Ny
aXB0b3IpIHsKLSAgICAgICAgT2Zmc2V0QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0
QnVmZmVyKj4oY29udGV4dCk7Ci0gICAgICAgIGRlbGV0ZSBkYXRhOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQotI2lmIEVOQUJMRShYU0xUKQotc3RhdGljIHZvaWQgZXJyb3JGdW5jKHZvaWQq
LCBjb25zdCBjaGFyKiwgLi4uKQotewotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRv
IGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMgc29tZXdoZXJlLgotfQotI2VuZGlmCi0KLXN0YXRpYyBi
b29sIGRpZEluaXQgPSBmYWxzZTsKLQotUGFzc1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQ
YXJzZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVy
cywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbElu
aXRQYXJzZXIoKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMs
IG9wZW5GdW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRw
dXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwot
ICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRp
ZEluaXQgPSB0cnVlOwotICAgIH0KLQotICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1s
Q3JlYXRlUHVzaFBhcnNlckN0eHQoaGFuZGxlcnMsIDAsIDAsIDAsIDApOwotICAgIHBhcnNlci0+
X3ByaXZhdGUgPSB1c2VyRGF0YTsKLSAgICBwYXJzZXItPnJlcGxhY2VFbnRpdGllcyA9IHRydWU7
Ci0gICAgc3dpdGNoVG9VVEYxNihwYXJzZXIpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBY
TUxQYXJzZXJDb250ZXh0KHBhcnNlcikpOwotfQotCi0KLS8vIENodW5rIHNob3VsZCBiZSBlbmNv
ZGVkIGluIFVURi04Ci1QYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRl
eHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1
c2VyRGF0YSwgY29uc3QgQ1N0cmluZyYgY2h1bmspCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0g
ICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNr
cyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1s
UmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBj
bG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7
Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIGFwcGVuZEZyYWdtZW50
U291cmNlKCkgY2hlY2tzIHRoYXQgdGhlIGxlbmd0aCBkb2Vzbid0IG92ZXJmbG93IGFuIGludC4K
LSAgICB4bWxQYXJzZXJDdHh0UHRyIHBhcnNlciA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQo
Y2h1bmsuZGF0YSgpLCBjaHVuay5sZW5ndGgoKSk7Ci0KLSAgICBpZiAoIXBhcnNlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDb3B5IHRoZSBzYXggaGFuZGxlcgotICAgIG1lbWNweShw
YXJzZXItPnNheCwgaGFuZGxlcnMsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7Ci0KLSAgICAvLyBT
ZXQgcGFyc2VyIG9wdGlvbnMuCi0gICAgLy8gWE1MX1BBUlNFX05PRElDVDogZGVmYXVsdCBkaWN0
aW9uYXJ5IG9wdGlvbi4KLSAgICAvLyBYTUxfUEFSU0VfTk9FTlQ6IGZvcmNlIGVudGl0aWVzIHN1
YnN0aXR1dGlvbnMuCi0gICAgeG1sQ3R4dFVzZU9wdGlvbnMocGFyc2VyLCBYTUxfUEFSU0VfTk9E
SUNUIHwgWE1MX1BBUlNFX05PRU5UKTsKLQotICAgIC8vIEludGVybmFsIGluaXRpYWxpemF0aW9u
Ci0gICAgcGFyc2VyLT5zYXgyID0gMTsKLSAgICBwYXJzZXItPmluc3RhdGUgPSBYTUxfUEFSU0VS
X0NPTlRFTlQ7IC8vIFdlIGFyZSBwYXJzaW5nIGEgQ09OVEVOVAotICAgIHBhcnNlci0+ZGVwdGgg
PSAwOwotICAgIHBhcnNlci0+c3RyX3htbCA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBC
QURfQ0FTVCAieG1sIiwgMyk7Ci0gICAgcGFyc2VyLT5zdHJfeG1sbnMgPSB4bWxEaWN0TG9va3Vw
KHBhcnNlci0+ZGljdCwgQkFEX0NBU1QgInhtbG5zIiwgNSk7Ci0gICAgcGFyc2VyLT5zdHJfeG1s
X25zID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIFhNTF9YTUxfTkFNRVNQQUNFLCAzNik7
Ci0gICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRhOwotCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBYTUxQYXJzZXJDb250ZXh0KHBhcnNlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIFhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIHJldHVybiB2ZXJzaW9uID09ICIx
LjAiOwotfQotCi1YTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQq
IGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlcihkb2N1bWVudCkKLSAgICAsIG1fdmlldyhmcmFtZVZpZXcpCi0gICAgLCBtX2NvbnRl
eHQoMCkKLSAgICAsIG1fcGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUo
KSkKLSAgICAsIG1fY3VycmVudE5vZGUoZG9jdW1lbnQpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNl
KQotICAgICwgbV9zYXdDU1MoZmFsc2UpCi0gICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkK
LSAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQotICAgICwgbV9pc1hIVE1MRG9jdW1lbnQo
ZmFsc2UpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZh
bHNlKQotICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCi0jZW5kaWYKLSAgICAs
IG1fcGFyc2VyUGF1c2VkKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQot
ICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCi0gICAgLCBtX2Vycm9yQ291bnQoMCkKLSAgICAs
IG1fbGFzdEVycm9yUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkp
Ci0gICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihU
ZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKLSAgICAsIG1fcGFyc2luZ0ZyYWdt
ZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5n
QWxsb3dlZCkKLXsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFi
bGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQot
ICAgICwgbV9jb250ZXh0KDApCi0gICAgLCBtX3BlbmRpbmdDYWxsYmFja3MoUGVuZGluZ0NhbGxi
YWNrczo6Y3JlYXRlKCkpCi0gICAgLCBtX2N1cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9z
YXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFu
c2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNY
SFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1M
TVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQot
I2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1Nj
cmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNv
dW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0
YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBt
X3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlw
dGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5h
bWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBl
bGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNr
LmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQotICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFy
ZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVu
dE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
U3RhY2subGFzdCgpOyAhZWxlbVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3Qo
KSkgewotICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0
ZXMoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5n
dGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0
dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09
IHhtbG5zQXRvbSkKLSAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0g
YXR0ci0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9
PSB4bWxuc0F0b20pCi0gICAgICAgICAgICAgICAgICAgIG1fcHJlZml4VG9OYW1lc3BhY2VNYXAu
c2V0KGF0dHItPmxvY2FsTmFtZSgpLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBub3QgaW4g
ZG9jdW1lbnQgdHJlZSwgdGhlcmUgbWF5IGJlIG5vIHhtbG5zIGF0dHJpYnV0ZTsganVzdCBkZWZh
dWx0IHRvIHRoZSBwYXJlbnQncyBuYW1lc3BhY2UuCi0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFj
ZVVSSS5pc051bGwoKSAmJiAhcGFyZW50RWxlbWVudC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBt
X2RlZmF1bHROYW1lc3BhY2VVUkkgPSBwYXJlbnRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0K
LQotWE1MUGFyc2VyQ29udGV4dDo6flhNTFBhcnNlckNvbnRleHQoKQotewotICAgIGlmIChtX2Nv
bnRleHQtPm15RG9jKQotICAgICAgICB4bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAg
IHhtbEZyZWVQYXJzZXJDdHh0KG1fY29udGV4dCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+
WE1MRG9jdW1lbnRQYXJzZXIoKQotewotICAgIC8vIFRoZSBYTUxEb2N1bWVudFBhcnNlciB3aWxs
IGFsd2F5cyBiZSBkZXRhY2hlZCBiZWZvcmUgYmVpbmcgZGVzdHJveWVkLgotICAgIEFTU0VSVCht
X2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUp
OwotCi0gICAgLy8gRklYTUU6IG1fcGVuZGluZ1NjcmlwdCBoYW5kbGluZyBzaG91bGQgYmUgbW92
ZWQgaW50byBYTUxEb2N1bWVudFBhcnNlci5jcHAhCi0gICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkK
LSAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKLXsK
LSAgICBBU1NFUlQoIWlzRGV0YWNoZWQoKSk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAg
IGluaXRpYWxpemVQYXJzZXJDb250ZXh0KCk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBsaWJ4bWwg
Y29udGV4dCBmcm9tIGRlbGV0aW9uIGR1cmluZyBhIGNhbGxiYWNrCi0gICAgUmVmUHRyPFhNTFBh
cnNlckNvbnRleHQ+IGNvbnRleHQgPSBtX2NvbnRleHQ7Ci0KLSAgICAvLyBsaWJYTUwgdGhyb3dz
IGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gc3dpdGNoIHRoZSBlbmNvZGluZyBmb3IgYW4gZW1wdHkg
c3RyaW5nLgotICAgIGlmIChwYXJzZVN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICAvLyBKYXZh
U2NyaXB0IG1heSBjYXVzZSB0aGUgcGFyc2VyIHRvIGRldGFjaCBkdXJpbmcgeG1sUGFyc2VDaHVu
awotICAgICAgICAvLyBrZWVwIHRoaXMgYWxpdmUgdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBkb25l
LgotICAgICAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAg
ICAgICAgc3dpdGNoVG9VVEYxNihjb250ZXh0LT5jb250ZXh0KCkpOwotICAgICAgICBYTUxEb2N1
bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkp
OwotICAgICAgICB4bWxQYXJzZUNodW5rKGNvbnRleHQtPmNvbnRleHQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgc2l6ZW9mKFVDaGFy
KSAqIHBhcnNlU3RyaW5nLmxlbmd0aCgpLCAwKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0ICh3
aGljaCBtYXkgYmUgcnVuIHVuZGVyIHRoZSB4bWxQYXJzZUNodW5rIGNhbGxzdGFjaykgbWF5Ci0g
ICAgICAgIC8vIGNhdXNlIHRoZSBwYXJzZXIgdG8gYmUgc3RvcHBlZCBvciBkZXRhY2hlZC4KLSAg
ICAgICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBoZXJlPyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9j
ZXNzIHRoZSBwYXNzZWQgc291cmNlPwotICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYg
ZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBk
ZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQot
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+Y29u
dGV4dCgpLT5pbnB1dC0+bGluZSwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0
cmluZywgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5nKSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKTsK
LX0KLQotc3RhdGljIGlubGluZSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1s
Q2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpm
cm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKLX0K
LQotc3RhdGljIGlubGluZSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hh
ciogc3RyaW5nKQotewotICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOwotfQotCi1zdHJ1Y3QgX3htbFNBWDJOYW1l
c3BhY2UgewotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1
cmk7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgeG1sU0FYMk5hbWVzcGFj
ZTsKLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQq
IG5ld0VsZW1lbnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfbmFt
ZXNwYWNlcywgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJOYW1lc3BhY2UqIG5hbWVzcGFjZXMg
PSByZWludGVycHJldF9jYXN0PHhtbFNBWDJOYW1lc3BhY2UqPihsaWJ4bWxOYW1lc3BhY2VzKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX25hbWVzcGFjZXM7IGkrKykgewotICAgICAgICBB
dG9taWNTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSB4bWxuc0F0b207Ci0gICAgICAgIEF0b21pY1N0
cmluZyBuYW1lc3BhY2VVUkkgPSB0b0F0b21pY1N0cmluZyhuYW1lc3BhY2VzW2ldLnVyaSk7Ci0g
ICAgICAgIGlmIChuYW1lc3BhY2VzW2ldLnByZWZpeCkKLSAgICAgICAgICAgIG5hbWVzcGFjZVFO
YW1lID0gInhtbG5zOiIgKyB0b1N0cmluZyhuYW1lc3BhY2VzW2ldLnByZWZpeCk7Ci0gICAgICAg
IG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5TKFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJ
LCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNlVVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7
Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB7Ci0g
ICAgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1lOwotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsK
LSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci0gICAgY29uc3QgeG1sQ2hhciogdmFsdWU7Ci0gICAg
Y29uc3QgeG1sQ2hhciogZW5kOwotfTsKLXR5cGVkZWYgc3RydWN0IF94bWxTQVgyQXR0cmlidXRl
cyB4bWxTQVgyQXR0cmlidXRlczsKLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRB
dHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRy
aWJ1dGVzLCBpbnQgbmJfYXR0cmlidXRlcywgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJBdHRy
aWJ1dGVzKiBhdHRyaWJ1dGVzID0gcmVpbnRlcnByZXRfY2FzdDx4bWxTQVgyQXR0cmlidXRlcyo+
KGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRl
czsgaSsrKSB7Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oYXR0
cmlidXRlc1tpXS5lbmQgLSBhdHRyaWJ1dGVzW2ldLnZhbHVlKTsKLSAgICAgICAgQXRvbWljU3Ry
aW5nIGF0dHJWYWx1ZSA9IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udmFsdWUsIHZhbHVl
TGVuZ3RoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJQcmVmaXggPSB0b1N0cmluZyhhdHRyaWJ1dGVz
W2ldLnByZWZpeCk7Ci0gICAgICAgIEF0b21pY1N0cmluZyBhdHRyVVJJID0gYXR0clByZWZpeC5p
c0VtcHR5KCkgPyBBdG9taWNTdHJpbmcoKSA6IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0u
dXJpKTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0
eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDogYXR0clByZWZp
eCArICI6IiArIHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKLQotICAgICAgICBu
ZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwg
ZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBz
ZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2Fs
TmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGlu
dCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2Rl
ZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGlz
U3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsK
LSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNr
KHhtbExvY2FsTmFtZSwgeG1sUHJlZml4LCB4bWxVUkksIG5iX25hbWVzcGFjZXMsIGxpYnhtbE5h
bWVzcGFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLy8g
Y2hlY2sgaWYgdGhlIERPQ1RZUEUgRGVjbGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudCBleGlz
dHMKLSAgICBpZiAoIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhU
TUxNUERvY3VtZW50KCkpIHsKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRl
Y2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBBdG9taWNT
dHJpbmcgbG9jYWxOYW1lID0gdG9BdG9taWNTdHJpbmcoeG1sTG9jYWxOYW1lKTsKLSAgICBBdG9t
aWNTdHJpbmcgdXJpID0gdG9BdG9taWNTdHJpbmcoeG1sVVJJKTsKLSAgICBBdG9taWNTdHJpbmcg
cHJlZml4ID0gdG9BdG9taWNTdHJpbmcoeG1sUHJlZml4KTsKLQotICAgIGlmIChtX3BhcnNpbmdG
cmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkp
Ci0gICAgICAgICAgICB1cmkgPSBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwLmdldChwcmVmaXgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAm
JiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3
LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCi0gICAgICAgIC8vIHdl
IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFu
ZAotICAgICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSByb290IGVsbWVudCAnaHRtbCcKLSAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCcKLSAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0
bWxUYWcubG9jYWxOYW1lKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhU
TUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2RlZmF1bHROYW1lc3Bh
Y2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgdXJpID0g
bV9kZWZhdWx0TmFtZXNwYWNlVVJJOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBi
b29sIGlzRmlyc3RFbGVtZW50ID0gIW1fc2F3Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RF
bGVtZW50ID0gdHJ1ZTsKLQotICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5h
bWUsIHVyaSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5j
cmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKLSAgICBpZiAoIW5ld0VsZW1lbnQpIHsKLSAgICAg
ICAgc3RvcFBhcnNpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0
KCksIGxpYnhtbE5hbWVzcGFjZXMsIG5iX25hbWVzcGFjZXMsIGVjLCBtX3NjcmlwdGluZ1Blcm1p
c3Npb24pOwotICAgIGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5n
ZXQoKSwgbGlieG1sQXR0cmlidXRlcywgbmJfYXR0cmlidXRlcywgZWMsIG1fc2NyaXB0aW5nUGVy
bWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBuZXdFbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigp
OwotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChu
ZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVu
dE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJl
bnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQt
PmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1l
bnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAg
ICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50ICYmIGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCkt
PmZyYW1lKCkpCi0gICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRj
aERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjplbmRFbGVtZW50TnMoKQotewotICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNr
cy0+YXBwZW5kRW5kRWxlbWVudE5TQ2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRo
aXMgaXMgbm90IHJlbGVhc2VkCi0gICAgLy8gYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBtZXRob2Qu
Ci0gICAgUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXhp
dFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsK
LSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Bl
cm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5v
ZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkg
ewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgewotICAgICAgICBwb3BDdXJyZW50Tm9k
ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFy
ZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8g
UGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0
ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVu
dE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNj
cmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRF
bGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBEb24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUg
ZG9jdW1lbnRzIChmb3Igbm93KS4KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7Ci0gICAg
bV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKLQotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFy
ZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwg
U2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKLSAgICBpZiAo
IXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlm
ICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFs
bG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5z
ZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gRklYTUU6IFNjcmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBi
ZXR3ZWVuCi0gICAgICAgIC8vIHRoZSBsaWJ4bWwyIGFuZCBRdCBYTUxEb2N1bWVudFBhcnNlciBp
bXBsZW1lbnRhdGlvbnMuCi0KLSAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBh
cnNlckV4ZWN1dGVkKCkpCi0gICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVu
dCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNj
cmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVu
ZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+
YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBi
ZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVk
IGl0LgotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBw
YXVzZVBhcnNpbmcoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1l
bnQgPSAwOwotCi0gICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBh
cnNlcgotICAgICAgICBpZiAoaXNEZXRhY2hlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKLSAgICBwb3BDdXJyZW50Tm9kZSgp
OwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIq
IHMsIGludCBsZW4pCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5h
cHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2socywgbGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAgICAgIGVudGVyVGV4dCgpOwotICAgIG1f
YnVmZmVyZWRUZXh0LmFwcGVuZChzLCBsZW4pOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjplcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdmFfbGlzdCBhcmdz
KQotewotICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQ09NUElM
RVIoTVNWQykgfHwgQ09NUElMRVIoUlZDVCkgfHwgQ09NUElMRVIoTUlOR1cpCi0gICAgY2hhciBt
WzEwMjRdOwotICAgIHZzbnByaW50ZihtLCBzaXplb2YobSkgLSAxLCBtZXNzYWdlLCBhcmdzKTsK
LSNlbHNlCi0gICAgY2hhciogbTsKLSAgICBpZiAodmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdz
KSA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAobV9wYXJzZXJQYXVz
ZWQpCi0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBl
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBsaW5l
TnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLQotI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09N
UElMRVIoUlZDVCkgJiYgIUNPTVBJTEVSKE1JTkdXKQotICAgIGZyZWUobSk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHht
bENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKLXsKLSAgICBpZiAoaXNTdG9wcGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewotICAgICAg
ICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNr
KHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgp
OwotCi0gICAgLy8gIyMjIGhhbmRsZSBleGNlcHRpb25zCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5j
cmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0gICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRv
U3RyaW5nKGRhdGEpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
aS0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2Vy
QWRkQ2hpbGQocGkuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIXBpLT5hdHRhY2hlZCgpKQot
ICAgICAgICBwaS0+YXR0YWNoKCk7Ci0KLSAgICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7
Ci0KLSAgICBpZiAocGktPmlzQ1NTKCkpCi0gICAgICAgIG1fc2F3Q1NTID0gdHJ1ZTsKLSNpZiBF
TkFCTEUoWFNMVCkKLSAgICBtX3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAm
JiBwaS0+aXNYU0woKTsKLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIWRvY3VtZW50KCkt
PnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFy
KiBzLCBpbnQgbGVuKQotewotICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+
YXBwZW5kQ0RBVEFCbG9ja0NhbGxiYWNrKHMsIGxlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9
IENEQVRBU2VjdGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwotICAg
IG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmICht
X3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgp
OwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjb21tZW50KGNvbnN0IHhtbENoYXIqIHMp
Ci17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9w
YXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDb21tZW50
Q2FsbGJhY2socyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwot
Ci0gICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSwgdG9TdHJpbmcocykpOwotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05v
ZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAg
ICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFy
dERvY3VtZW50KGNvbnN0IHhtbENoYXIqIHZlcnNpb24sIGNvbnN0IHhtbENoYXIqIGVuY29kaW5n
LCBpbnQgc3RhbmRhbG9uZSkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlm
ICh2ZXJzaW9uKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZl
cnNpb24pLCBlYyk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25l
ID09IDEsIGVjKTsgLy8gcG9zc2libGUgdmFsdWVzIGFyZSAwLCAxLCBhbmQgLTEKLSAgICBpZiAo
ZW5jb2RpbmcpCi0gICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVu
Y29kaW5nKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsK
LSAgICBleGl0VGV4dCgpOwotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgIG1faGFzRG9jVHlwZURl
Y2xhcmF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJu
YWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKG5hbWUsIGV4dGVy
bmFsSUQsIHN5c3RlbUlEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkb2N1
bWVudCgpKSB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRv
U3RyaW5nKGV4dGVybmFsSUQpOwotICAgICAgICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5h
bWUpOwotICAgICAgICBpZiAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMC8vRU4iCi0gICAgICAgICAgICB8fCBleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRN
TCBNb2JpbGUgMS4xLy9FTiIpIHsKLSAgICAgICAgICAgIGlmIChkdGROYW1lICE9IEhUTUxOYW1l
czo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZh
dGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9v
dCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkt
PmlzWEhUTUxNUERvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1l
bnQodHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTERv
Y3VtZW50KHRydWUpOwotCi0gICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRy
dWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENo
aWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0
cmluZyhleHRlcm5hbElEKSwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgaW5saW5lIFhNTERvY3VtZW50UGFyc2VyKiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkKLXsK
LSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRy
PihjbG9zdXJlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WE1MRG9jdW1lbnRQYXJzZXIqPihj
dHh0LT5fcHJpdmF0ZSk7Ci19Ci0KLS8vIFRoaXMgaXMgYSBoYWNrIGFyb3VuZCBodHRwOi8vYnVn
emlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkyMTkKLS8vIE90aGVyd2lzZSBsaWJ4
bWwgc2VlbXMgdG8gY2FsbCBhbGwgdGhlIFNBWCBjYWxsYmFja3MgdHdpY2UgZm9yIGFueSByZXBs
YWNlZCBlbnRpdHkuCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1
Zyh2b2lkKiBjbG9zdXJlKQotewotI2lmIExJQlhNTF9WRVJTSU9OID49IDIwNjI3Ci0gICAgVU5V
U0VEX1BBUkFNKGNsb3N1cmUpOwotCi0gICAgLy8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4g
bGlieG1sIDIuNi4yNy4KLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKS0+bm9kZTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBzdGFydEVsZW1lbnROc0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1s
Q2hhciogbG9jYWxuYW1lLCBjb25zdCB4bWxDaGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIqIHVy
aSwgaW50IG5iX25hbWVzcGFjZXMsIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJf
YXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJp
YnV0ZXMpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c3RhcnRFbGVtZW50TnMo
bG9jYWxuYW1lLCBwcmVmaXgsIHVyaSwgbmJfbmFtZXNwYWNlcywgbmFtZXNwYWNlcywgbmJfYXR0
cmlidXRlcywgbmJfZGVmYXVsdGVkLCBsaWJ4bWxBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZv
aWQgZW5kRWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29u
c3QgeG1sQ2hhciosIGNvbnN0IHhtbENoYXIqKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1M
RW50aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xv
c3VyZSktPmVuZEVsZW1lbnROcygpOwotfQotCi1zdGF0aWMgdm9pZCBjaGFyYWN0ZXJzSGFuZGxl
cih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmICho
YWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBnZXRQYXJzZXIoY2xvc3VyZSktPmNoYXJhY3RlcnMocywgbGVuKTsKLX0KLQotc3RhdGljIHZv
aWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxD
aGFyKiB0YXJnZXQsIGNvbnN0IHhtbENoYXIqIGRhdGEpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRM
aWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNl
cihjbG9zdXJlKS0+cHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgZGF0YSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNkYXRhQmxvY2tIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIq
IHMsIGludCBsZW4pCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3Vy
ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2RhdGFCbG9j
ayhzLCBsZW4pOwotfQotCi1zdGF0aWMgdm9pZCBjb21tZW50SGFuZGxlcih2b2lkKiBjbG9zdXJl
LCBjb25zdCB4bWxDaGFyKiBjb21tZW50KQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50
aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3Vy
ZSktPmNvbW1lbnQoY29tbWVudCk7Ci19Ci0KLVdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpCi1z
dGF0aWMgdm9pZCB3YXJuaW5nSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNz
YWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3Nh
Z2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Ondh
cm5pbmcsIG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJ
QlVURV9QUklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIGZhdGFsRXJyb3JIYW5kbGVyKHZvaWQqIGNs
b3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0g
ICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7Ci0gICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJv
cihYTUxEb2N1bWVudFBhcnNlcjo6ZmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChh
cmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIG5vcm1h
bEVycm9ySGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17
Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdl
dFBhcnNlcihjbG9zdXJlKS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Om5vbkZhdGFsLCBtZXNz
YWdlLCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci19Ci0KLS8vIFVzaW5nIGEgc3RhdGljIGVu
dGl0eSBhbmQgbWFya2luZyBpdCBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkgaXMKLS8v
IGEgaGFjayB0byBhdm9pZCBtYWxsb2MvZnJlZS4gVXNpbmcgYSBnbG9iYWwgdmFyaWFibGUgbGlr
ZSB0aGlzIGNvdWxkIGNhdXNlIHRyb3VibGUKLS8vIGlmIGxpYnhtbCBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWxzIHdlcmUgdG8gY2hhbmdlCi1zdGF0aWMgeG1sQ2hhciBzaGFyZWRYSFRNTEVudGl0eVJl
c3VsdFs1XSA9IHswLCAwLCAwLCAwLCAwfTsKLQotc3RhdGljIHhtbEVudGl0eVB0ciBzaGFyZWRY
SFRNTEVudGl0eSgpCi17Ci0gICAgc3RhdGljIHhtbEVudGl0eSBlbnRpdHk7Ci0gICAgaWYgKCFl
bnRpdHkudHlwZSkgewotICAgICAgICBlbnRpdHkudHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAg
ICAgICAgZW50aXR5Lm9yaWcgPSBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50
aXR5LmNvbnRlbnQgPSBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmV0
eXBlID0gWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZOwotICAgIH0KLSAgICByZXR1cm4g
JmVudGl0eTsKLX0KLQotc3RhdGljIHhtbEVudGl0eVB0ciBnZXRYSFRNTEVudGl0eShjb25zdCB4
bWxDaGFyKiBuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihuYW1lKSk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIENTdHJpbmcgdmFsdWUgPSBTdHJpbmcoJmMsIDEpLnV0ZjgoKTsKLSAgICBB
U1NFUlQodmFsdWUubGVuZ3RoKCkgPCA1KTsKLSAgICB4bWxFbnRpdHlQdHIgZW50aXR5ID0gc2hh
cmVkWEhUTUxFbnRpdHkoKTsKLSAgICBlbnRpdHktPmxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwot
ICAgIGVudGl0eS0+bmFtZSA9IG5hbWU7Ci0gICAgbWVtY3B5KHNoYXJlZFhIVE1MRW50aXR5UmVz
dWx0LCB2YWx1ZS5kYXRhKCksIGVudGl0eS0+bGVuZ3RoICsgMSk7Ci0KLSAgICByZXR1cm4gZW50
aXR5OwotfQotCi1zdGF0aWMgeG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pZCogY2xv
c3VyZSwgY29uc3QgeG1sQ2hhciogbmFtZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQg
PSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICB4bWxFbnRpdHlQ
dHIgZW50ID0geG1sR2V0UHJlZGVmaW5lZEVudGl0eShuYW1lKTsKLSAgICBpZiAoZW50KSB7Ci0g
ICAgICAgIGVudC0+ZXR5cGUgPSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7Ci0gICAg
ICAgIHJldHVybiBlbnQ7Ci0gICAgfQotCi0gICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQt
Pm15RG9jLCBuYW1lKTsKLSAgICBpZiAoIWVudCAmJiAoZ2V0UGFyc2VyKGNsb3N1cmUpLT5pc1hI
VE1MRG9jdW1lbnQoKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICAgICAgICAgICAgICB8fCBn
ZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxNUERvY3VtZW50KCkKLSNlbmRpZgotICAgICAgICkp
IHsKLSAgICAgICAgZW50ID0gZ2V0WEhUTUxFbnRpdHkobmFtZSk7Ci0gICAgICAgIGlmIChlbnQp
Ci0gICAgICAgICAgICBlbnQtPmV0eXBlID0gWE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwot
ICAgIH0KLQotICAgIHJldHVybiBlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0RG9jdW1lbnRI
YW5kbGVyKHZvaWQqIGNsb3N1cmUpCi17Ci0gICAgeG1sUGFyc2VyQ3R4dCogY3R4dCA9IHN0YXRp
Y19jYXN0PHhtbFBhcnNlckN0eHQqPihjbG9zdXJlKTsKLSAgICBzd2l0Y2hUb1VURjE2KGN0eHQp
OwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c3RhcnREb2N1bWVudChjdHh0LT52ZXJzaW9uLCBj
dHh0LT5lbmNvZGluZywgY3R4dC0+c3RhbmRhbG9uZSk7Ci0gICAgeG1sU0FYMlN0YXJ0RG9jdW1l
bnQoY2xvc3VyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZERvY3VtZW50SGFuZGxlcih2b2lkKiBj
bG9zdXJlKQotewotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZW5kRG9jdW1lbnQoKTsKLSAgICB4
bWxTQVgyRW5kRG9jdW1lbnQoY2xvc3VyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVybmFsU3Vi
c2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxD
aGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCkKLXsKLSAgICBnZXRQYXJz
ZXIoY2xvc3VyZSktPmludGVybmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsK
LSAgICB4bWxTQVgySW50ZXJuYWxTdWJzZXQoY2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lz
dGVtSUQpOwotfQotCi1zdGF0aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xv
c3VyZSwgY29uc3QgeG1sQ2hhciosIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHht
bENoYXIqKQotewotICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwotICAg
IGlmICgoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikK
LSAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIikKLSAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpCi0gICAg
ICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCi0g
ICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCi0g
ICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIu
MC8vRU4iKQotICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVz
IE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8v
V0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpCi0gICAgICAgKQotICAgICAgICBn
ZXRQYXJzZXIoY2xvc3VyZSktPnNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMg
aWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCi19Ci0KLXN0YXRpYyB2b2lkIGlnbm9yYWJs
ZVdoaXRlc3BhY2VIYW5kbGVyKHZvaWQqLCBjb25zdCB4bWxDaGFyKiwgaW50KQotewotICAgIC8v
IG5vdGhpbmcgdG8gZG8sIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVy
Ci0gICAgLy8gaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1
Ci0gICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MgotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBD
U3RyaW5nJiBjaHVuaykKLXsKLSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNh
eCwgMCwgc2l6ZW9mKHNheCkpOwotCi0gICAgc2F4LmVycm9yID0gbm9ybWFsRXJyb3JIYW5kbGVy
OwotICAgIHNheC5mYXRhbEVycm9yID0gZmF0YWxFcnJvckhhbmRsZXI7Ci0gICAgc2F4LmNoYXJh
Y3RlcnMgPSBjaGFyYWN0ZXJzSGFuZGxlcjsKLSAgICBzYXgucHJvY2Vzc2luZ0luc3RydWN0aW9u
ID0gcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKLSAgICBzYXguY2RhdGFCbG9jayA9IGNk
YXRhQmxvY2tIYW5kbGVyOwotICAgIHNheC5jb21tZW50ID0gY29tbWVudEhhbmRsZXI7Ci0gICAg
c2F4Lndhcm5pbmcgPSB3YXJuaW5nSGFuZGxlcjsKLSAgICBzYXguc3RhcnRFbGVtZW50TnMgPSBz
dGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnRO
c0hhbmRsZXI7Ci0gICAgc2F4LmdldEVudGl0eSA9IGdldEVudGl0eUhhbmRsZXI7Ci0gICAgc2F4
LnN0YXJ0RG9jdW1lbnQgPSBzdGFydERvY3VtZW50SGFuZGxlcjsKLSAgICBzYXguZW5kRG9jdW1l
bnQgPSBlbmREb2N1bWVudEhhbmRsZXI7Ci0gICAgc2F4LmludGVybmFsU3Vic2V0ID0gaW50ZXJu
YWxTdWJzZXRIYW5kbGVyOwotICAgIHNheC5leHRlcm5hbFN1YnNldCA9IGV4dGVybmFsU3Vic2V0
SGFuZGxlcjsKLSAgICBzYXguaWdub3JhYmxlV2hpdGVzcGFjZSA9IGlnbm9yYWJsZVdoaXRlc3Bh
Y2VIYW5kbGVyOwotICAgIHNheC5lbnRpdHlEZWNsID0geG1sU0FYMkVudGl0eURlY2w7Ci0gICAg
c2F4LmluaXRpYWxpemVkID0gWE1MX1NBWDJfTUFHSUM7Ci0gICAgRG9jdW1lbnRQYXJzZXI6OnN0
YXJ0UGFyc2luZygpOwotICAgIG1fc2F3RXJyb3IgPSBmYWxzZTsKLSAgICBtX3Nhd0NTUyA9IGZh
bHNlOwotICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gZmFsc2U7Ci0gICAgbV9zYXdGaXJzdEVsZW1l
bnQgPSBmYWxzZTsKLQotICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQo
KS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQot
ICAgICAgICBtX2NvbnRleHQgPSBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIo
JnNheCwgdGhpcywgY2h1bmspOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoIWNodW5rLmRh
dGEoKSk7Ci0gICAgICAgIG1fY29udGV4dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmlu
Z1BhcnNlcigmc2F4LCB0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmRvRW5kKCkKLXsKLSAgICBpZiAoIWlzU3RvcHBlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgICAgIC8vIFRlbGwgbGlieG1sIHdlJ3JlIGRvbmUuCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZUNo
dW5rKGNvbnRleHQoKSwgMCwgMCwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1f
Y29udGV4dCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBY
TUxUcmVlVmlld2VyIHhtbFRyZWVWaWV3ZXIoZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCB4bWxWaWV3
ZXJNb2RlID0gIW1fc2F3RXJyb3IgJiYgIW1fc2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAm
JiB4bWxUcmVlVmlld2VyLmhhc05vU3R5bGVJbmZvcm1hdGlvbigpOwotICAgIGlmICh4bWxWaWV3
ZXJNb2RlKQotICAgICAgICB4bWxUcmVlVmlld2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmll
dygpOwotCi0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9
IHhtbERvY1B0ckZvclN0cmluZyhkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBt
X29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJh
bnNmb3JtU291cmNlKGRvYykpKTsKLQotICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZh
bHNlKTsgLy8gTWFrZSB0aGUgZG9jdW1lbnQgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFw
cGx5IFhTTCBzdHlsZXNoZWV0cy4KLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNo
YW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBh
cnNpbmcodHJ1ZSk7Ci0KLSAgICAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7Ci0g
ICAgfQotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0
cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVu
ayBpbnRvIGFuIHhtbERvY1B0cgotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJz
IHNvIHRoYXQgYSBmYWlsdXJlIHRvIHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4K
LSAgICAvLyBnb29kIGVycm9yIG1lc3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVG
RjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOwotCi0gICAgWE1MRG9jdW1lbnRQYXJzZXJT
Y29wZSBzY29wZShjYWNoZWRSZXNvdXJjZUxvYWRlciwgZXJyb3JGdW5jLCAwKTsKLSAgICB4bWxE
b2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJV
VEYtMTZMRSIgOiAiVVRGLTE2QkUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhTTFRfUEFSU0VfT1BUSU9OUyk7Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLSNl
bmRpZgotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGlu
dCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0dXJuIDAtYmFzZWQuCi0gICAgcmV0dXJuIGNvbnRleHQo
KSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRh
dGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1
cm4gMC1iYXNlZC4KLSAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29s
IDogMTsKLX0KLQotVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9u
KCkgY29uc3QKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0
KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWlu
aW11bVBvc2l0aW9uKCk7Ci0gICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IHByb2JhYmx5IGNvbnRh
aW5zIDEtYmFzZWQgbnVtYmVycywgYnV0IHdlIHRyZWF0IHRoZW0gYXMgMC1iYXNlZCwKLSAgICAv
LyAgICAgICAgdG8gYmUgY29uc2lzdGVudCB3aXRoIGZpeG1lJ3MgaW4gbGluZU51bWJlcigpIGFu
ZCBjb2x1bW5OdW1iZXIKLSAgICAvLyAgICAgICAgbWV0aG9kcy4KLSAgICByZXR1cm4gVGV4dFBv
c2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5p
bnB1dC0+bGluZSksCi0gICAgICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2Vk
SW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaGFzIGEgY29y
cmVjdCBpbXBsZW1lbnRhdGlvbiwgaW4gY29udHJhc3QgdG8gdGV4dFBvc2l0aW9uKCkgbWV0aG9k
LgotLy8gSXQgc2hvdWxkIHJlcGxhY2UgdGV4dFBvc2l0aW9uKCkuCi1UZXh0UG9zaXRpb24xIFhN
TERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgeG1s
UGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0gdGhpcy0+Y29udGV4dCgpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOwotICAg
IHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0gICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZy
b21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+Y29sKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKLXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNp
bmcoKTsKLSAgICBpZiAoY29udGV4dCgpKQotICAgICAgICB4bWxTdG9wUGFyc2VyKGNvbnRleHQo
KSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQotewotICAg
IEFTU0VSVCghaXNEZXRhY2hlZCgpKTsKLSAgICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0g
ICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBw
ZW5kaW5nIGNhbGxiYWNrcwotICAgIHdoaWxlICghbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5jYWxsQW5kUmVtb3ZlRmlyc3RDYWxs
YmFjayh0aGlzKTsKLQotICAgICAgICAvLyBBIGNhbGxiYWNrIHBhdXNlZCB0aGUgcGFyc2VyCi0g
ICAgICAgIGlmIChtX3BhcnNlclBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5n
IHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBw
ZW5kKHJlc3QpOwotCi0gICAgLy8gRmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVk
IGFuZCB3cml0ZSgpIGRpZG4ndCByZXN1bHQKLSAgICAvLyBpbiBhbnkgZnVydGhlciBjYWxsYmFj
a3MgYmVpbmcgcXVldWVkLCBjYWxsIGVuZCgpCi0gICAgaWYgKG1fZmluaXNoQ2FsbGVkICYmIG1f
cGVuZGluZ0NhbGxiYWNrcy0+aXNFbXB0eSgpKQotICAgICAgICBlbmQoKTsKLX0KLQotYm9vbCBY
TUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kRnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBjaHVu
aykKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFyc2luZ0ZyYWdt
ZW50KTsKLQotICAgIENTdHJpbmcgY2h1bmtBc1V0ZjggPSBjaHVuay51dGY4KCk7Ci0gICAgCi0g
ICAgLy8gbGlieG1sMiB0YWtlcyBhbiBpbnQgZm9yIGEgbGVuZ3RoLCBhbmQgdGhlcmVmb3JlIGNh
bid0IGhhbmRsZSBYTUwgY2h1bmtzIGxhcmdlciB0aGFuIDIgR2lCLgotICAgIGlmIChjaHVua0Fz
VXRmOC5sZW5ndGgoKSA+IElOVF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlu
aXRpYWxpemVQYXJzZXJDb250ZXh0KGNodW5rQXNVdGY4KTsKLSAgICB4bWxQYXJzZUNvbnRlbnQo
Y29udGV4dCgpKTsKLSAgICBlbmREb2N1bWVudCgpOyAvLyBDbG9zZSBhbnkgb3BlbiB0ZXh0IG5v
ZGVzLgotCi0gICAgLy8gRklYTUU6IElmIHRoaXMgY29kZSBpcyBhY3R1YWxseSBuZWVkZWQsIGl0
IHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIGZpbmlzaCgpCi0gICAgLy8gWE1MRG9jdW1lbnRQYXJz
ZXJRdCBoYXMgYSBzaW1pbGFyIGNoZWNrIChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1S
ZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgaW4gZG9FbmQoKS4KLSAgICAvLyBD
aGVjayBpZiBhbGwgdGhlIGNodW5rIGhhcyBiZWVuIHByb2Nlc3NlZC4KLSAgICBsb25nIGJ5dGVz
UHJvY2Vzc2VkID0geG1sQnl0ZUNvbnN1bWVkKGNvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVzUHJv
Y2Vzc2VkID09IC0xIHx8ICgodW5zaWduZWQgbG9uZylieXRlc1Byb2Nlc3NlZCkgIT0gY2h1bmtB
c1V0ZjgubGVuZ3RoKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEkgZG9uJ3QgYmVsaWV2ZSB3ZSBj
YW4gaGl0IHRoaXMgY2FzZSB3aXRob3V0IGFsc28gaGF2aW5nIHNlZW4gYW4gZXJyb3Igb3IgYSBu
dWxsIGJ5dGUuCi0gICAgICAgIC8vIElmIHdlIGhpdCB0aGlzIEFTU0VSVCwgd2UndmUgZm91bmQg
YSB0ZXN0IGNhc2Ugd2hpY2ggZGVtb25zdHJhdGVzIHRoZSBuZWVkIGZvciB0aGlzIGNvZGUuCi0g
ICAgICAgIEFTU0VSVChtX3Nhd0Vycm9yIHx8IChieXRlc1Byb2Nlc3NlZCA+PSAwICYmICFjaHVu
a0FzVXRmOC5kYXRhKClbYnl0ZXNQcm9jZXNzZWRdKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBObyBlcnJvciBpZiB0aGUgY2h1bmsgaXMgd2VsbCBmb3JtZWQgb3Ig
aXQgaXMgbm90IGJ1dCB3ZSBoYXZlIG5vIGVycm9yLgotICAgIHJldHVybiBjb250ZXh0KCktPndl
bGxGb3JtZWQgfHwgIXhtbEN0eHRHZXRMYXN0RXJyb3IoY29udGV4dCgpKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3Rh
dGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBn
b3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5z
SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0
IHhtbENoYXIqIC8qeG1sUHJlZml4Ki8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqIC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFj
ZXMqLywgY29uc3QgeG1sQ2hhcioqIC8qbmFtZXNwYWNlcyovLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVm
YXVsdGVkKi8sIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzKQotewotICAgIGlmIChz
dHJjbXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJz
IikgIT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0g
c3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4dFB0cj4oY2xvc3VyZSk7Ci0gICAgQXR0cmlidXRlUGFy
c2VTdGF0ZSogc3RhdGUgPSBzdGF0aWNfY2FzdDxBdHRyaWJ1dGVQYXJzZVN0YXRlKj4oY3R4dC0+
X3ByaXZhdGUpOwotCi0gICAgc3RhdGUtPmdvdEF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgeG1s
U0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRy
aWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9h
dHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSB0b1N0cmlu
ZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSk7Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IChp
bnQpIChhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0dHJpYnV0ZXNbaV0udmFsdWUpOwotICAgICAgICBT
dHJpbmcgYXR0clZhbHVlID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5n
dGgpOwotICAgICAgICBTdHJpbmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0u
cHJlZml4KTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgp
ID8gYXR0ckxvY2FsTmFtZSA6IGF0dHJQcmVmaXggKyAiOiIgKyBhdHRyTG9jYWxOYW1lOwotCi0g
ICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNldChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7Ci0gICAg
fQotfQotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0spCi17Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBz
dGF0ZTsKLSAgICBzdGF0ZS5nb3RBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLSAgICB4bWxTQVhIYW5k
bGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwotICAgIHNheC5zdGFy
dEVsZW1lbnROcyA9IGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4Lmlu
aXRpYWxpemVkID0gWE1MX1NBWDJfTUFHSUM7Ci0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+
IHBhcnNlciA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCAmc3Rh
dGUpOwotICAgIFN0cmluZyBwYXJzZVN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/Pjxh
dHRycyAiICsgc3RyaW5nICsgIiAvPiI7Ci0gICAgeG1sUGFyc2VDaHVuayhwYXJzZXItPmNvbnRl
eHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVy
cygpKSwgcGFyc2VTdHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAxKTsKLSAgICBhdHRy
c09LID0gc3RhdGUuZ290QXR0cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2Vy
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2
YjY4NWMwNmZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDcyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVs
IFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQ
YXJzZXIuaCIKLQotI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNj
cmlwdC5oIgotI2luY2x1ZGUgIkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxv
YWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVu
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJI
VE1MRW50aXR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgot
I2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKLSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTY3Jp
cHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybVNvdXJjZS5oIgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoWEhU
TUxNUCkKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVu
dC5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRW50aXR5UmVzb2x2ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29s
dmVyIHsKLSAgICB2aXJ0dWFsIFFTdHJpbmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3Qg
UVN0cmluZyAmbmFtZSk7Ci19OwotCi1RU3RyaW5nIEVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5k
ZWNsYXJlZEVudGl0eShjb25zdCBRU3RyaW5nICZuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNv
ZGVOYW1lZEVudGl0eShuYW1lLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKLSAgICByZXR1cm4gUVN0
cmluZyhjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9v
bCBYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKLXsKLSAgICByZXR1cm4gdmVyc2lvbiA9PSAiMS4wIjsKLX0KLQotWE1MRG9jdW1lbnRQ
YXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBm
cmFtZVZpZXcpCi0gICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0gICAg
LCBtX3ZpZXcoZnJhbWVWaWV3KQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1
cnJlbnROb2RlKGRvY3VtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3
Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0Zp
cnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVO
QUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1f
aGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNl
ZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNo
Q2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBv
c2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5k
aW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKLSAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0g
ICAgbV9zdHJlYW0uc2V0RW50aXR5UmVzb2x2ZXIobmV3IEVudGl0eVJlc29sdmVyKTsKLX0KLQot
WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gcGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0g
ICAgLCBtX2N1cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAg
ICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAg
LCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNl
KQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkK
LSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Bh
cnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAs
IG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xh
c3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAg
ICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0
cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCi17Ci0gICAgZnJh
Z21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVu
dCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVu
dEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQot
ICAgICAgICBOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBp
ZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAg
IGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRWG1sU3Ry
ZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIG5hbWVzcGFjZXM7Ci0gICAgZm9yIChFbGVtZW50KiBl
bGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFj
ay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVt
ZW50LT5hdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0
ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5s
b2NhbE5hbWUoKSA9PSAieG1sbnMiKQotICAgICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1l
c3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHIt
PnByZWZpeCgpID09ICJ4bWxucyIpCi0gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYXBw
ZW5kKFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbihhdHRyLT5sb2NhbE5hbWUoKSwgYXR0
ci0+dmFsdWUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3Ry
ZWFtLmFkZEV4dHJhTmFtZXNwYWNlRGVjbGFyYXRpb25zKG5hbWVzcGFjZXMpOwotICAgIG1fc3Ry
ZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAvLyBJZiB0
aGUgcGFyZW50IGVsZW1lbnQgaXMgbm90IGluIGRvY3VtZW50IHRyZWUsIHRoZXJlIG1heSBiZSBu
byB4bWxucyBhdHRyaWJ1dGU7IGp1c3QgZGVmYXVsdCB0byB0aGUgcGFyZW50J3MgbmFtZXNwYWNl
LgotICAgIGlmIChtX2RlZmF1bHROYW1lc3BhY2VVUkkuaXNOdWxsKCkgJiYgIXBhcmVudEVsZW1l
bnQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gcGFyZW50
RWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9j
dW1lbnRQYXJzZXIoKQotewotICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmICht
X3BlbmRpbmdTY3JpcHQpCi0gICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRo
aXMpOwotICAgIGRlbGV0ZSBtX3N0cmVhbS5lbnRpdHlSZXNvbHZlcigpOwotfQotCi12b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpkb1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCi17Ci0g
ICAgbV93cm90ZVRleHQgPSB0cnVlOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAm
JiBkb2N1bWVudCgpLT5kZWNvZGVyKCktPnNhd0Vycm9yKCkpIHsKLSAgICAgICAgLy8gSWYgdGhl
IGRlY29kZXIgc2F3IGFuIGVycm9yLCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcp
Ci0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFFTdHJp
bmcgZGF0YShwYXJzZVN0cmluZyk7Ci0gICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAg
ICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0aGUgcGFyc2VyIHRvIGRldGFjaCwKLSAgICAgICAg
Ly8ga2VlcCB0aGlzIGFsaXZlIHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAg
UmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgIG1fc3Ry
ZWFtLmFkZERhdGEoZGF0YSk7Ci0gICAgICAgIHBhcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
OwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChj
b25zdCBDU3RyaW5nJikKLXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7Ci0g
ICAgbV9zYXdFcnJvciA9IGZhbHNlOwotICAgIG1fc2F3Q1NTID0gZmFsc2U7Ci0gICAgbV9zYXdY
U0xUcmFuc2Zvcm0gPSBmYWxzZTsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOwotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCgpCi17Ci0jaWYgRU5BQkxFKFhTTFQpCi0g
ICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5z
Zm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VG
b3JUcmFuc2Zvcm0pKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAv
LyBNYWtlIHRoZSBkb2MgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVl
dHMuCi0gICAgICAgIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOwotICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKHRydWUpOwotICAg
ICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGlmIChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9m
RG9jdW1lbnRFcnJvcgotICAgICAgICB8fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVt
ZW50ICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhbV9zYXdFcnJvcikpCi0gICAgICAgIGhhbmRs
ZUVycm9yKGZhdGFsLCBxUHJpbnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVt
YmVyKCksIGNvbHVtbk51bWJlcigpKTsKLX0KLQotaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5l
TnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdHJlYW0ubGluZU51bWJlcigpOwotfQot
Ci1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fc3RyZWFtLmNvbHVtbk51bWJlcigpOwotfQotCi1UZXh0UG9zaXRpb24wIFhNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBUZXh0UG9zaXRp
b24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSks
IFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7
Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGluY29ycmVjdGx5IHJlaW50ZXJwcmV0cyB6ZXJvLWJhc2Ug
bGluZU51bWJlciBtZXRob2QgYXMgb25lLWJhc2VkIG51bWJlci4KLS8vIEZJWE1FOiBUaGlzIGVy
cm9yIGlzIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuIFdlIHNob3VsZCBmaXggaXQgZXZlbnR1YWxs
eS4gCi1UZXh0UG9zaXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6T25lQmFzZWROdW1iZXI6OmZy
b21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpzdG9wUGFyc2luZygpCi17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9w
UGFyc2luZygpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkK
LXsKLSAgICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBm
YWxzZTsKLQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAg
IHBhcnNlKCk7Ci0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJl
c3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5k
KHJlc3QpOwotCi0gICAgLy8gRmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFu
ZCBhcHBlbmQoKSBkaWRuJ3QgcmVzdWx0Ci0gICAgLy8gaW4gYW55IGZ1cnRoZXIgY2FsbGJhY2tz
IGJlaW5nIHF1ZXVlZCwgY2FsbCBlbmQoKQotICAgIGlmIChtX2ZpbmlzaENhbGxlZCAmJiAhbV9w
YXJzZXJQYXVzZWQgJiYgIW1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJv
b2wgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYg
c291cmNlKQotewotICAgIEFTU0VSVCghbV9zYXdGaXJzdEVsZW1lbnQpOwotICAgIGFwcGVuZChT
dHJpbmcoIjxxeG1sc3RyZWFtZHVtbXllbGVtZW50PiIpKTsKLSAgICBhcHBlbmQoc291cmNlKTsK
LSAgICBhcHBlbmQoU3RyaW5nKCI8L3F4bWxzdHJlYW1kdW1teWVsZW1lbnQ+IikpOwotICAgIHJl
dHVybiAhaGFzRXJyb3IoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGlj
IHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcihBdHRyaWJ1dGVQYXJzZVN0YXRl
KiBzdGF0ZSwgY29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0ZXMmIGF0dHJzKQotewotICAgIGlmIChh
dHRycy5jb3VudCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlLT5nb3RBdHRy
aWJ1dGVzID0gdHJ1ZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsg
aSsrKSB7Ci0gICAgICAgIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUmIGF0dHIgPSBhdHRyc1tp
XTsKLSAgICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKLSAgICAgICAg
U3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBhdHRyLnZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBhdHRy
VVJJICAgICAgID0gYXR0ci5uYW1lc3BhY2VVcmkoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFt
ZSAgICAgPSBhdHRyLnF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMu
c2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNP
SykKLXsKLSAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0YXRlOwotICAgIHN0YXRlLmdvdEF0dHJp
YnV0ZXMgPSBmYWxzZTsKLQotICAgIFFYbWxTdHJlYW1SZWFkZXIgc3RyZWFtOwotICAgIFFTdHJp
bmcgZHVtbXkgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+
PGF0dHJzICUxIC8+IikpLmFyZyhzdHJpbmcpOwotICAgIHN0cmVhbS5hZGREYXRhKGR1bW15KTsK
LSAgICB3aGlsZSAoIXN0cmVhbS5hdEVuZCgpKSB7Ci0gICAgICAgIHN0cmVhbS5yZWFkTmV4dCgp
OwotICAgICAgICBpZiAoc3RyZWFtLmlzU3RhcnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGF0
dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoJnN0YXRlLCBzdHJlYW0uYXR0cmlidXRlcygp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsK
LSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcg
cHJlZml4RnJvbVFOYW1lKGNvbnN0IFFTdHJpbmcmIHFOYW1lKQotewotICAgIGNvbnN0IGludCBv
ZmZzZXQgPSBxTmFtZS5pbmRleE9mKFFMYXRpbjFDaGFyKCc6JykpOwotICAgIGlmIChvZmZzZXQg
PD0gMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IHFOYW1lLmxlZnQob2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1l
bnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1OYW1lc3Bh
Y2VEZWNsYXJhdGlvbnMgJm5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2Ny
aXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5zLmNvdW50KCk7
ICsraSkgewotICAgICAgICBjb25zdCBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gJmRl
Y2wgPSBuc1tpXTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGRlY2wubmFtZXNwYWNl
VXJpKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2VRTmFtZSA9IGRlY2wucHJlZml4KCkuaXNF
bXB0eSgpID8gU3RyaW5nKCJ4bWxucyIpIDogU3RyaW5nKCJ4bWxuczoiKTsKLSAgICAgICAgbmFt
ZXNwYWNlUU5hbWUuYXBwZW5kKGRlY2wucHJlZml4KCkpOwotICAgICAgICBuZXdFbGVtZW50LT5z
ZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCBuYW1lc3BhY2VR
TmFtZSwgbmFtZXNwYWNlVVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlm
IChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVz
KEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzICZhdHRycywg
RXhjZXB0aW9uQ29kZSYgZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAg
Y29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0ZSAmYXR0ciA9IGF0dHJzW2ldOwotICAgICAgICBTdHJp
bmcgYXR0ckxvY2FsTmFtZSA9IGF0dHIubmFtZSgpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVl
ICAgICA9IGF0dHIudmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJVUkkgICAgICAgPSBhdHRy
Lm5hbWVzcGFjZVVyaSgpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogU3RyaW5nKGF0dHIubmFtZXNw
YWNlVXJpKCkpOwotICAgICAgICBTdHJpbmcgYXR0clFOYW1lICAgICA9IGF0dHIucXVhbGlmaWVk
TmFtZSgpOwotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRy
UU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAo
ZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlKCkKLXsKLSAgICB3aGls
ZSAoIWlzU3RvcHBlZCgpICYmICFtX3BhcnNlclBhdXNlZCAmJiAhbV9zdHJlYW0uYXRFbmQoKSkg
ewotICAgICAgICBtX3N0cmVhbS5yZWFkTmV4dCgpOwotICAgICAgICBzd2l0Y2ggKG1fc3RyZWFt
LnRva2VuVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1
bWVudDogewotICAgICAgICAgICAgc3RhcnREb2N1bWVudCgpOwotICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDog
ewotICAgICAgICAgICAgZW5kRG9jdW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7Ci0jaWYg
RU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9j
dW1lbnQoKSAmJiAhbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSNlbmRpZgotICAgICAgICAgICAgcGFyc2VTdGFydEVsZW1lbnQoKTsKLSAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRWxl
bWVudDogewotICAgICAgICAgICAgcGFyc2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6
IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbS5pc0NEQVRBKCkpIHsKLSAgICAgICAgICAgICAg
ICAvL2NkYXRhCi0gICAgICAgICAgICAgICAgcGFyc2VDZGF0YSgpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvL2NoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICBwYXJz
ZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6Q29tbWVudDogewotICAgICAgICAg
ICAgcGFyc2VDb21tZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRURDogewotICAgICAgICAgICAgLy9xRGVidWcoKTw8
Ii0tLS0tLS0tLS0tLS0gRFREIjsKLSAgICAgICAgICAgIHBhcnNlRHRkKCk7Ci0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0
cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7Ci0gICAgICAgICAgICAvL3FEZWJ1ZygpPDwi
LS0tLS0tLS0tLSBFTlRJVFkgPSAiPDxtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKQotICAgICAg
ICAgICAgLy8gICAgICAgIDw8IiwgdCA9ICI8PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygpOwot
ICAgICAgICAgICAgaWYgKGlzWEhUTUxEb2N1bWVudCgpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0g
ICAgICAgICAgICAgICAgfHwgaXNYSFRNTE1QRG9jdW1lbnQoKQotI2VuZGlmCi0gICAgICAgICAg
ICAgICApIHsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUo
KS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0
eShlbnRpdHkudG9VdGY4KCkuY29uc3REYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9s
ZWFmVGV4dE5vZGUpCi0gICAgICAgICAgICAgICAgICAgIGVudGVyVGV4dCgpOwotICAgICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIo
JmMsIDEpOwotICAgICAgICAgICAgICAgIC8vIHFEZWJ1ZygpPDwiIC0tLS0tLS0gYWRkaW5nIGVu
dGl0eSAiPDxzdHI7Ci0gICAgICAgICAgICAgICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEo
c3RyLCBlYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjogewot
ICAgICAgICAgICAgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmIChtX3N0
cmVhbS5lcnJvcigpICE9IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRF
cnJvcikgewotICAgICAgICAgICAgICAgIEVycm9yVHlwZSB0eXBlID0gKG1fc3RyZWFtLmVycm9y
KCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6Tm90V2VsbEZvcm1lZEVycm9yKSA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCA6IHdhcm5pbmc7Ci0gICAgICAgICAgICAgICAg
aGFuZGxlRXJyb3IodHlwZSwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGlu
ZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoKQotewot
ICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0KLSAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNl
dFhNTFN0YW5kYWxvbmUobV9zdHJlYW0uaXNTdGFuZGFsb25lRG9jdW1lbnQoKSwgZWMpOwotCi0g
ICAgICAgIFFTdHJpbmdSZWYgdmVyc2lvbiA9IG1fc3RyZWFtLmRvY3VtZW50VmVyc2lvbigpOwot
ICAgICAgICBpZiAoIXZlcnNpb24uaXNFbXB0eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+
c2V0WE1MVmVyc2lvbih2ZXJzaW9uLCBlYyk7Ci0gICAgICAgIFFTdHJpbmdSZWYgZW5jb2Rpbmcg
PSBtX3N0cmVhbS5kb2N1bWVudEVuY29kaW5nKCk7Ci0gICAgICAgIGlmICghZW5jb2RpbmcuaXNF
bXB0eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcoZW5jb2Rpbmcp
OwotICAgIH0KLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQo
KQotewotICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgbV9wYXJzaW5nRnJhZ21lbnQpIHsK
LSAgICAgICAgLy8gc2tpcCBkdW1teSBlbGVtZW50IGZvciBmcmFnbWVudHMKLSAgICAgICAgbV9z
YXdGaXJzdEVsZW1lbnQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXhp
dFRleHQoKTsKLQotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCk7Ci0gICAg
U3RyaW5nIHVyaSAgICAgICA9IG1fc3RyZWFtLm5hbWVzcGFjZVVyaSgpOwotICAgIFN0cmluZyBw
cmVmaXggICAgPSBwcmVmaXhGcm9tUU5hbWUobV9zdHJlYW0ucXVhbGlmaWVkTmFtZSgpLnRvU3Ry
aW5nKCkpOwotCi0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewot
ICAgICAgICBRX0FTU0VSVChwcmVmaXguaXNOdWxsKCkpOwotICAgICAgICB1cmkgPSBtX2RlZmF1
bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0gICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgs
IGxvY2FsTmFtZSwgdXJpKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOwotICAgIGlmICghbmV3RWxlbWVudCkg
ewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
RU5BQkxFKFhIVE1MTVApCi0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBE
b2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEFzIHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhI
VE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwKLSAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3Vy
ZSB0aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCi0gICAgICAgIC8vIGVu
c3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50
ICdodG1sJwotICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
JwotICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUo
KSkgewotICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4
cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJl
cigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmku
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1l
czo6eGh0bWxOYW1lc3BhY2VVUkk7Ci0gICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3Bh
Y2VVUkk7Ci0gICAgICAgICAgICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9u
KFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0Zp
cnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9
IHRydWU7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBoYW5kbGVFbGVtZW50TmFt
ZXNwYWNlcyhuZXdFbGVtZW50LmdldCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMo
KSwgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0
b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBoYW5kbGVFbGVtZW50
QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgpLCBtX3N0cmVhbS5hdHRyaWJ1dGVzKCksIGVjLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2lu
ZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0
RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9u
T25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1l
bnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAg
IGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1l
bnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAg
ICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0
ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAgICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1l
bnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRp
c3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlRW5kRWxlbWVudCgpCi17Ci0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50
Tm9kZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkg
fHwgIW1fdmlldykgewotICAgICAgICBpZiAoIW1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsK
LQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1v
dmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNl
LCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3Vt
ZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQo
ZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnRO
b2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBkb24ndCBsb2FkIGV4dGVy
bmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KQotICAgIEFTU0VS
VCghbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotCi0g
ICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3Jp
cHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJ
blR5cGVBdHRyaWJ1dGUpOwotICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKLSNpZiBF
TkFCTEUoWEhUTUxNUCkKLSAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVT
dXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkK
LSAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
dHJ1ZSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+
cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKLSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4
ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50
KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAg
ZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAg
ICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Ci0g
ICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgbV9wZW5k
aW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Nj
cmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50
KCkgZXhlY3V0ZWQgaXQuCi0gICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAg
ICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
c2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgfQotICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNl
OwotICAgIHBvcEN1cnJlbnROb2RlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlQ2hhcmFjdGVycygpCi17Ci0gICAgaWYgKCFtX2xlYWZUZXh0Tm9kZSkKLSAgICAgICAgZW50
ZXJUZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9sZWFmVGV4dE5vZGUt
PmFwcGVuZERhdGEobV9zdHJlYW0udGV4dCgpLCBlYyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkKLXsKLSAgICBleGl0VGV4dCgpOwot
Ci0gICAgLy8gIyMjIGhhbmRsZSBleGNlcHRpb25zCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0g
ICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0gICAgICAgIG1fc3RyZWFtLnByb2Nlc3NpbmdJbnN0cnVj
dGlvblRhcmdldCgpLAotICAgICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRh
KCksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGktPnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBh
cnNlckFkZENoaWxkKHBpLmdldCgpKTsKLSAgICBpZiAobV92aWV3ICYmICFwaS0+YXR0YWNoZWQo
KSkKLSAgICAgICAgcGktPmF0dGFjaCgpOwotCi0gICAgcGktPmZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpOwotCi0gICAgaWYgKHBpLT5pc0NTUygpKQotICAgICAgICBtX3Nhd0NTUyA9IHRydWU7Ci0j
aWYgRU5BQkxFKFhTTFQpCi0gICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAhbV9zYXdGaXJzdEVsZW1l
bnQgJiYgcGktPmlzWFNMKCk7Ci0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtICYmICFkb2N1bWVu
dCgpLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKQotICAgICAgICBzdG9wUGFyc2luZygpOwot
I2VuZGlmCi19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEoKQotewotICAg
IGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFT
ZWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKLQotICAgIG1fY3Vy
cmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcg
JiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNvbW1lbnQoKQotewotICAgIGV4aXRUZXh0
KCk7Ci0KLSAgICBSZWZQdHI8Q29tbWVudD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBtX3N0cmVhbS50ZXh0KCkpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRk
Q2hpbGQobmV3Tm9kZS5nZXQoKSk7Ci0gICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNo
ZWQoKSkKLSAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQ
YXJzZXI6Omhhc0Vycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdHJlYW0uaGFzRXJyb3Io
KTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQotewotICAgIFFTdHJp
bmdSZWYgbmFtZSA9IG1fc3RyZWFtLmR0ZE5hbWUoKTsKLSAgICBRU3RyaW5nUmVmIHB1YmxpY0lk
ID0gbV9zdHJlYW0uZHRkUHVibGljSWQoKTsKLSAgICBRU3RyaW5nUmVmIHN5c3RlbUlkID0gbV9z
dHJlYW0uZHRkU3lzdGVtSWQoKTsKLQotICAgIC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwg
cHVibGljSWQgPDwgc3lzdGVtSWQ7Ci0gICAgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5n
KCItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIpKQotICAgICAgICB8fCAo
cHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpKQot
ICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwg
MS4wIFN0cmljdC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmco
Ii0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iKSkKLSAgICAgICAgfHwgKHB1Ymxp
Y0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkK
LSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1M
IDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0
aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZH
IDEuMS8vRU4iKSkKLSNpZiAhRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHx8IChwdWJsaWNJZCA9
PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikp
Ci0jZW5kaWYKLSAgICAgICApCi0gICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8g
Y29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCi0jaWYgRU5BQkxFKFhIVE1M
TVApCi0gICAgZWxzZSBpZiAoKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVN
Ly9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iKSkKLSAgICAgICAgICAgICB8fCAocHVibGljSWQg
PT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIp
KSkgewotICAgICAgICBpZiAoQXRvbWljU3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRh
Zy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlk
IERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwg
bGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgLy8g
Y2hlY2sgaWYgdGhlIE1JTUUgdHlwZSBpcyBjb3JyZWN0IHdpdGggdGhpcyBtZXRob2QKLSAgICAg
ICAgICAgIHNldElzWEhUTUxNUERvY3VtZW50KHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFt
X3BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9j
dW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7
Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0NzNlZDIzMDgyZjM3ZDM5M2E4ZDEx
ZjFhZGExNWVjYzNjMzcyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJj
ZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9h
ZGVyID0gMDsKLQotWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29w
ZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgOiBtX29s
ZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSNpZiBF
TkFCTEUoWFNMVCkKLSAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3Ip
Ci0gICAgLCBtX29sZFN0cnVjdHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQotICAg
ICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKLSNlbmRpZgotewot
ICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwot
fQotCi0jaWYgRU5BQkxFKFhTTFQpCi1YTUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVu
dFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwg
eG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JG
dW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4dCkKLSAgICA6IG1fb2xk
Q2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICwg
bV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdlbmVyaWNFcnJvcikKLSAgICAsIG1fb2xkU3RydWN0
dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCi0gICAgLCBtX29sZEVycm9yQ29udGV4
dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxv
YWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwotICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQot
ICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9y
RnVuYyk7Ci0gICAgaWYgKHN0cnVjdHVyZWRFcnJvckZ1bmMpCi0gICAgICAgIHhtbFNldFN0cnVj
dHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKLX0KLSNl
bmRpZgotCi1YTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgp
Ci17Ci0gICAgY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1f
b2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVyaWNFcnJvckZ1bmMpOwotICAgIHhtbFNldFN0cnVj
dHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVu
Yyk7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDA0M2I0OGIxMWVjNWI4
ODM2MGFlM2UxNzliNWQxZWUxMmRmZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAot
I2RlZmluZSBYTUxEb2N1bWVudFBhcnNlclNjb3BlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotCi0jaWYgRU5BQkxFKFhTTFQpCi0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI7Ci0KLSAgICBjbGFzcyBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHsKLSAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoWE1MRG9jdW1lbnRQYXJzZXJTY29wZSk7Ci0gICAgcHVibGlj
OgotICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAgIH5YTUxEb2N1bWVudFBhcnNlclNjb3BlKCk7
Ci0KLSAgICAgICAgc3RhdGljIENhY2hlZFJlc291cmNlTG9hZGVyKiBjdXJyZW50Q2FjaGVkUmVz
b3VyY2VMb2FkZXI7Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHhtbEdl
bmVyaWNFcnJvckZ1bmMgZ2VuZXJpY0Vycm9yRnVuYywgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBz
dHJ1Y3R1cmVkRXJyb3JGdW5jID0gMCwgdm9pZCogZXJyb3JDb250ZXh0ID0gMCk7Ci0jZW5kaWYK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBtX29sZENhY2hl
ZFJlc291cmNlTG9hZGVyOwotCi0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgIHhtbEdlbmVyaWNF
cnJvckZ1bmMgbV9vbGRHZW5lcmljRXJyb3JGdW5jOwotICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJy
b3JGdW5jIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYzsKLSAgICAgICAgdm9pZCogbV9vbGRFcnJv
ckNvbnRleHQ7Ci0jZW5kaWYKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBYTUxEb2N1bWVudFBhcnNlclNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2M2VhZDFhM2Y5Zjg2
ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2MzdiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtp
dC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNEQVRB
U2VjdGlvbi5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQu
aCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlw
ZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAi
SW1hZ2VMb2FkZXIuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisj
aW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIK
KyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKKyNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworY29uc3QgaW50IG1heEVycm9ycyA9IDI1OworCit2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjpwdXNoQ3VycmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKK3sK
KyAgICBBU1NFUlQobik7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOworICAgIGlmIChuICE9
IGRvY3VtZW50KCkpCisgICAgICAgIG4tPnJlZigpOworICAgIG1fY3VycmVudE5vZGVTdGFjay5h
cHBlbmQobV9jdXJyZW50Tm9kZSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG47CisgICAgaWYgKG1f
Y3VycmVudE5vZGVTdGFjay5zaXplKCkgPiBtYXhET01UcmVlRGVwdGgpCisgICAgICAgIGhhbmRs
ZUVycm9yKGZhdGFsLCAiRXhjZXNzaXZlIG5vZGUgbmVzdGluZy4iLCBsaW5lTnVtYmVyKCksIGNv
bHVtbk51bWJlcigpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5v
ZGUoKQoreworICAgIGlmICghbV9jdXJyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpKTsKKworICAgIGlmIChtX2N1cnJlbnROb2Rl
ICE9IGRvY3VtZW50KCkpCisgICAgICAgIG1fY3VycmVudE5vZGUtPmRlcmVmKCk7CisKKyAgICBt
X2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnRO
b2RlU3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjbGVh
ckN1cnJlbnROb2RlU3RhY2soKQoreworICAgIGlmIChtX2N1cnJlbnROb2RlICYmIG1fY3VycmVu
dE5vZGUgIT0gZG9jdW1lbnQoKSkKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKKyAg
ICBtX2N1cnJlbnROb2RlID0gMDsKKyAgICBtX2xlYWZUZXh0Tm9kZSA9IDA7CisKKyAgICBpZiAo
bV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAt
LWkpCisgICAgICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7CisgICAgICAg
IGlmIChtX2N1cnJlbnROb2RlU3RhY2tbMF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IGRv
Y3VtZW50KCkpCisgICAgICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2tbMF0tPmRlcmVmKCk7Cisg
ICAgICAgIG1fY3VycmVudE5vZGVTdGFjay5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChj
b25zdCBTZWdtZW50ZWRTdHJpbmcmIHMpCit7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gcy50
b1N0cmluZygpOworCisgICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxl
bWVudCkKKyAgICAgICAgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmlu
ZzsKKworICAgIGlmIChpc1N0b3BwZWQoKSB8fCBtX3Nhd1hTTFRyYW5zZm9ybSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ1Ny
Yy5hcHBlbmQocyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb1dyaXRlKHMudG9T
dHJpbmcoKSk7CisKKyAgICAvLyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2gg
aW1hZ2UgYmVmb3JlbG9hZCBldmVudHMuCisgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGlu
Z0JlZm9yZUxvYWRFdmVudHMoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxl
RXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG0sIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKQoreworICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIFRleHRQb3NpdGlvbjEo
V1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKSkpOworfQorCit2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hh
ciogbSwgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbikKK3sKKyAgICBpZiAodHlwZSA9PSBmYXRhbCB8
fCAobV9lcnJvckNvdW50IDwgbWF4RXJyb3JzICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9saW5l
ICE9IHBvc2l0aW9uLm1fbGluZSAmJiBtX2xhc3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9IHBv
c2l0aW9uLm1fY29sdW1uKSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2Ugd2FybmluZzoKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gIndhcm5p
bmcgb24gbGluZSAiICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50
KCkpICsgIiBhdCBjb2x1bW4gIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpICsgIjogIiArIG07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIGZhdGFsOgorICAgICAgICAgICAgY2FzZSBub25GYXRhbDoKKyAgICAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gImVycm9yIG9uIGxpbmUgIiArIFN0cmluZzo6bnVtYmVy
KHBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKSArICIgYXQgY29sdW1uICIgKyBTdHJpbmc6
Om51bWJlcihwb3NpdGlvbi5tX2NvbHVtbi5vbmVCYXNlZEludCgpKSArICI6ICIgKyBtOworICAg
ICAgICB9CisKKyAgICAgICAgbV9sYXN0RXJyb3JQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAg
ICArK21fZXJyb3JDb3VudDsKKyAgICB9CisKKyAgICBpZiAodHlwZSAhPSB3YXJuaW5nKQorICAg
ICAgICBtX3Nhd0Vycm9yID0gdHJ1ZTsKKworICAgIGlmICh0eXBlID09IGZhdGFsKQorICAgICAg
ICBzdG9wUGFyc2luZygpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQo
KQoreworI2lmICFVU0UoUVhNTFNUUkVBTSkKKyAgICBBU1NFUlQobV9idWZmZXJlZFRleHQuc2l6
ZSgpID09IDApOworI2VuZGlmCisgICAgQVNTRVJUKCFtX2xlYWZUZXh0Tm9kZSk7CisgICAgbV9s
ZWFmVGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgIiIpOworICAgIG1fY3VycmVu
dE5vZGUtPnBhcnNlckFkZENoaWxkKG1fbGVhZlRleHROb2RlLmdldCgpKTsKK30KKworI2lmICFV
U0UoUVhNTFNUUkVBTSkKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENo
YXIqIHN0cmluZywgc2l6ZV90IHNpemUpIAoreyAKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsgCit9CisjZW5k
aWYKKworCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpleGl0VGV4dCgpCit7CisgICAgaWYgKGlz
U3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGVhZlRleHROb2RlKQor
ICAgICAgICByZXR1cm47CisKKyNpZiAhVVNFKFFYTUxTVFJFQU0pCisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEodG9TdHJpbmcobV9idWZm
ZXJlZFRleHQuZGF0YSgpLCBtX2J1ZmZlcmVkVGV4dC5zaXplKCkpLCBlYyk7CisgICAgVmVjdG9y
PHhtbENoYXI+IGVtcHR5OworICAgIG1fYnVmZmVyZWRUZXh0LnN3YXAoZW1wdHkpOworI2VuZGlm
CisKKyAgICBpZiAobV92aWV3ICYmICFtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgbV9sZWFmVGV4dE5vZGUtPmF0dGFjaCgpOworCisgICAgbV9sZWFmVGV4dE5vZGUgPSAwOwor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkZXRhY2goKQoreworICAgIGNsZWFyQ3VycmVu
dE5vZGVTdGFjaygpOworICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZGV0YWNoKCk7Cit9
CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZCgpCit7CisgICAgLy8gWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyIHdpbGwgZG8gYmFkIHRoaW5ncyB0byB0aGUgZG9jdW1lbnQgaWYgZG9FbmQo
KSBpcyBjYWxsZWQuCisgICAgLy8gSSBkb24ndCBiZWxpZXZlIFhNTERvY3VtZW50UGFyc2VyUXQg
bmVlZHMgZG9FbmQgY2FsbGVkIGluIHRoZSBmcmFnbWVudCBjYXNlLgorICAgIEFTU0VSVCghbV9w
YXJzaW5nRnJhZ21lbnQpOworCisgICAgZG9FbmQoKTsKKworICAgIC8vIGRvRW5kKCkgY291bGQg
cHJvY2VzcyBhIHNjcmlwdCB0YWcsIHRodXMgcGF1c2luZyBwYXJzaW5nLgorICAgIGlmIChtX3Bh
cnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2F3RXJyb3IpCisgICAg
ICAgIGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CisgICAgZWxzZSB7CisgICAgICAgIGV4aXRU
ZXh0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0
eWxlSW1tZWRpYXRlbHkpOworICAgIH0KKworICAgIGlmIChpc1BhcnNpbmcoKSkKKyAgICAgICAg
cHJlcGFyZVRvU3RvcFBhcnNpbmcoKTsKKyAgICBkb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERv
Y3VtZW50OjpJbnRlcmFjdGl2ZSk7CisgICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7CisgICAg
ZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmZpbmlzaCgpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fcGFyc2Vy
U3RvcHBlZCkgaGVyZSwgc2luY2UgaXQgZG9lcyBub3QKKyAgICAvLyBtYWtlcyBzZW5zZSB0byBj
YWxsIGFueSBtZXRob2RzIG9uIERvY3VtZW50UGFyc2VyIG9uY2UgaXQncyBiZWVuIHN0b3BwZWQu
CisgICAgLy8gSG93ZXZlciwgRnJhbWVMb2FkZXI6OnN0b3AgY2FsbHMgRG9jdW1lbnRQYXJzZXI6
OmZpbmlzaCB1bmNvbmRpdGlvbmFsbHkuCisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpCisgICAg
ICAgIG1fZmluaXNoQ2FsbGVkID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGVuZCgpOworfQor
Citib29sIFhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQoreworICAgIHJldHVy
biBtX2ZpbmlzaENhbGxlZDsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8RWxlbWVudD4gY3Jl
YXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZXMpCit7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBkb2Mt
PmNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInBhcnNlcmVycm9yIiwgeGh0
bWxOYW1lc3BhY2VVUkkpLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+c2V0QXR0cmlidXRl
KHN0eWxlQXR0ciwgImRpc3BsYXk6IGJsb2NrOyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJw
eCBzb2xpZCAjYzc3OyBwYWRkaW5nOiAwIDFlbSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91
bmQtY29sb3I6ICNmZGQ7IGNvbG9yOiBibGFjayIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBm
YWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKKyAg
ICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5z
IHRoZSBmb2xsb3dpbmcgZXJyb3JzOiIpLCBlYyk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZml4
ZWQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoZGl2VGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVu
dC0+YXBwZW5kQ2hpbGQoZml4ZWQuZ2V0KCksIGVjKTsKKyAgICBmaXhlZC0+c2V0QXR0cmlidXRl
KHN0eWxlQXR0ciwgImZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIpOworICAg
IGZpeGVkLT5hcHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpLCBl
Yyk7CisKKyAgICBoMyA9IGRvYy0+Y3JlYXRlRWxlbWVudChoM1RhZywgZmFsc2UpOworICAgIHJl
cG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKGgzLmdldCgpLCBlYyk7CisgICAgaDMtPmFwcGVuZENo
aWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoIkJlbG93IGlzIGEgcmVuZGVyaW5nIG9mIHRoZSBwYWdl
IHVwIHRvIHRoZSBmaXJzdCBlcnJvci4iKSwgZWMpOworCisgICAgcmV0dXJuIHJlcG9ydEVsZW1l
bnQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2Nr
KCkKK3sKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIC8vIE9uZSBvciBtb3JlIGVycm9ycyBvY2N1cnJl
ZCBkdXJpbmcgcGFyc2luZyBvZiB0aGUgY29kZS4gRGlzcGxheSBhbiBlcnJvciBibG9jayB0byB0
aGUgdXNlciBhYm92ZQorICAgIC8vIHRoZSBub3JtYWwgY29udGVudCAodGhlIERPTSB0cmVlIGlz
IGNyZWF0ZWQgbWFudWFsbHkgYW5kIGluY2x1ZGVzIGxpbmUvY29sIGluZm8gcmVnYXJkaW5nCisg
ICAgLy8gd2hlcmUgdGhlIGVycm9ycyBhcmUgbG9jYXRlZCkKKworICAgIC8vIENyZWF0ZSBlbGVt
ZW50cyBmb3IgZGlzcGxheQorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3Vt
ZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50RWxlbWVudCkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1
bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5h
cHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9k
eSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9v
dEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50
ID0gYm9keS5nZXQoKTsKKyAgICB9CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2N1
bWVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkp
IHsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0
ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9
IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVs
ZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVjKTsKKyAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQo
ZG9jdW1lbnRFbGVtZW50LCBlYyk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290
RWxlbWVudC5nZXQoKSwgZWMpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgp
OworICAgIH0KKyNlbmRpZgorICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3Jl
YXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihkb2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKKyAg
ICBkb2N1bWVudEVsZW1lbnQtPmluc2VydEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKSwgZWMpOworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChkb2N1
bWVudC0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gcGFyYWdyYXBoID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQocFRhZywgZmFsc2UpOworICAg
ICAgICBwYXJhZ3JhcGgtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9y
bWFsIik7CisgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRl
eHROb2RlKCJUaGlzIGRvY3VtZW50IHdhcyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNM
IHRyYW5zZm9ybWF0aW9uLiBUaGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZy
b20gdGhlIHRyYW5zZm9ybWVkIHJlc3VsdC4iKSwgZWMpOworICAgICAgICByZXBvcnRFbGVtZW50
LT5hcHBlbmRDaGlsZChwYXJhZ3JhcGgucmVsZWFzZSgpLCBlYyk7CisgICAgfQorI2VuZGlmCisg
ICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKK30KKwordm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQor
eworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkUmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1f
cGVuZGluZ1NjcmlwdCk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQo
KSA+IDApOworCisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1Njcmlw
dC5nZXQoKSk7CisgICAgYm9vbCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJv
ck9jY3VycmVkKCk7CisgICAgYm9vbCB3YXNDYW5jZWxlZCA9IG1fcGVuZGluZ1NjcmlwdC0+d2Fz
Q2FuY2VsZWQoKTsKKworICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwor
ICAgIG1fcGVuZGluZ1NjcmlwdCA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZSA9IG1fc2Ny
aXB0RWxlbWVudDsKKyAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOworCisgICAgU2NyaXB0RWxlbWVu
dCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChlLmdldCgpKTsKKyAgICBBU1NFUlQo
c2NyaXB0RWxlbWVudCk7CisKKyAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhpcyBwYXJz
ZXIsIG1ha2Ugc3VyZSBpdCdzIGtlcHQgYWxpdmUgZXZlbiBpZiBkZXRhY2hlZC4KKyAgICBSZWZQ
dHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisgICAgCisgICAgaWYgKGVycm9y
T2NjdXJyZWQpCisgICAgICAgIHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOwor
ICAgIGVsc2UgaWYgKCF3YXNDYW5jZWxlZCkgeworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVj
dXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaExv
YWRFdmVudCgpOworICAgIH0KKworICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICBpZiAo
IWlzRGV0YWNoZWQoKSAmJiAhbV9yZXF1ZXN0aW5nU2NyaXB0KQorICAgICAgICByZXN1bWVQYXJz
aW5nKCk7Cit9CisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BlbmRpbmdTY3JpcHQ7Cit9CisKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnBhdXNlUGFyc2luZygpCit7CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhcnNlclBhdXNlZCA9IHRydWU7Cit9CisKK2Jv
b2wgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcm
IGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1l
bnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorewor
ICAgIGlmICghY2h1bmsubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZSBIVE1MNSBYTUwgRnJhZ21lbnQgcGFyc2lu
ZyBhbGdvcml0aG06CisgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXhodG1sLXN5bnRheC5odG1sI3htbC1mcmFnbWVu
dC1wYXJzaW5nLWFsZ29yaXRobQorICAgIC8vIEZvciBub3cgd2UgaGF2ZSBhIGhhY2sgZm9yIHNj
cmlwdC9zdHlsZSBpbm5lckhUTUwgc3VwcG9ydDoKKyAgICBpZiAoY29udGV4dEVsZW1lbnQgJiYg
KGNvbnRleHRFbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGNv
bnRleHRFbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpKSB7CisgICAg
ICAgIGZyYWdtZW50LT5wYXJzZXJBZGRDaGlsZChmcmFnbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUoY2h1bmspKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVm
UHRyPFhNTERvY3VtZW50UGFyc2VyPiBwYXJzZXIgPSBYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRl
KGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgYm9v
bCB3ZWxsRm9ybWVkID0gcGFyc2VyLT5hcHBlbmRGcmFnbWVudFNvdXJjZShjaHVuayk7CisgICAg
Ly8gRG8gbm90IGNhbGwgZmluaXNoKCkuICBDdXJyZW50IGZpbmlzaCgpIGFuZCBkb0VuZCgpIGlt
cGxlbWVudGF0aW9ucyB0b3VjaCB0aGUgbWFpbiBEb2N1bWVudC9sb2FkZXIKKyAgICAvLyBhbmQg
Y2FuIGNhdXNlIGNyYXNoZXMgaW4gdGhlIGZyYWdtZW50IGNhc2UuCisgICAgcGFyc2VyLT5kZXRh
Y2goKTsgLy8gQWxsb3dzIH5Eb2N1bWVudFBhcnNlciB0byBhc3NlcnQgaXQgd2FzIGRldGFjaGVk
IGJlZm9yZSBkZXN0cnVjdGlvbi4KKyAgICByZXR1cm4gd2VsbEZvcm1lZDsgLy8gYXBwZW5kRnJh
Z21lbnRTb3VyY2UoKSdzIHdlbGxGb3JtZWQgaXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2VsbEZv
cm1lZCgpLgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjZGQyNWM1NWRjMDM1
YjhmMzJhNzQxNzVhNDZkOTg5ZWViMjc1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMCwwICsxLDIzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBYTUxEb2N1bWVudFBhcnNlcl9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gK
KworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIK
KyNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50
ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCisjaWYgVVNFKFFYTUxTVFJFQU0pCisjaW5jbHVkZSA8cXhtbHN0cmVh
bS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94
bWxzdHJpbmcuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRh
aW5lck5vZGU7CitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cjsKK2NsYXNzIERvY3VtZW50RnJhZ21lbnQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1l
bnQ7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOworY2xhc3MgVGV4
dDsKKworI2lmICFVU0UoUVhNTFNUUkVBTSkKKyAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2Vy
KHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmlu
Z1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgICAgIH5YTUxQ
YXJzZXJDb250ZXh0KCk7CisgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgWE1MUGFyc2Vy
Q29udGV4dCh4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0
ciBtX2NvbnRleHQ7CisgICAgfTsKKyNlbmRpZgorCisgICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJz
ZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4g
Y3JlYXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVu
dCwgcGVybWlzc2lvbikpOworICAgICAgICB9CisKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2Vy
KCk7CisKKyAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tzOgorICAgICAgICBlbnVtIEVy
cm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9OworICAgICAgICB2b2lkIGhhbmRs
ZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIpOworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29u
c3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7CisKKyAgICAgICAgdm9pZCBzZXRJc1hI
VE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsg
fQorICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRN
TERvY3VtZW50OyB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRN
TE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1M
OyB9CisgICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
WEhUTUxNUERvY3VtZW50OyB9CisjZW5kaWYKKworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURv
Y3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQq
IHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCk7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBi
ZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KKyAgICAgICAgdmlydHVhbCBib29sIHdl
bGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQorCisgICAgICAgIFRleHRQ
b3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4
dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKKworICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKKyAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24pOworCisgICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKKyAgICAgICAg
dmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmlzaCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7CisgICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAg
aW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworCisgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7CisKKyAgICAgICAgdm9pZCBlbmQoKTsKKworICAgICAgICB2b2lkIHBhdXNlUGFyc2lu
ZygpOworICAgICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKKworICAgICAgICBib29sIGFwcGVu
ZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOworCisjaWYgVVNFKFFYTUxTVFJFQU0pCitw
cml2YXRlOgorICAgICAgICB2b2lkIHBhcnNlKCk7CisgICAgICAgIHZvaWQgc3RhcnREb2N1bWVu
dCgpOworICAgICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFy
c2VFbmRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAg
IHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBwYXJzZUNk
YXRhKCk7CisgICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7CisgICAgICAgIHZvaWQgZW5kRG9j
dW1lbnQoKTsKKyAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOworICAgICAgICBib29sIGhhc0Vycm9y
KCkgY29uc3Q7CisjZWxzZQorcHVibGljOgorICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJz
ZXIgU0FYCisgICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdl
LCB2YV9saXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lk
IHN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hh
ciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBp
bnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnht
bEF0dHJpYnV0ZXMpOworICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lk
IGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJv
Y2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciog
ZGF0YSk7CisgICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVu
KTsKKyAgICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lk
IHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5j
b2RpbmcsIGludCBzdGFuZGFsb25lKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25z
dCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFy
KiBzeXN0ZW1JRCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmlu
ZyYgY2h1bmsgPSBDU3RyaW5nKCkpOworCisgICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENv
bnRhaW5lck5vZGUqKTsKKyAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICB2
b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOworCisgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JN
ZXNzYWdlQmxvY2soKTsKKworICAgICAgICB2b2lkIGVudGVyVGV4dCgpOworICAgICAgICB2b2lk
IGV4aXRUZXh0KCk7CisKKyAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOworICAg
ICAgICB2b2lkIGRvRW5kKCk7CisKKyAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7CisKKyAgICAg
ICAgU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07CisKKyNpZiBVU0UoUVhNTFNU
UkVBTSkKKyAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKKyAgICAgICAgYm9vbCBt
X3dyb3RlVGV4dDsKKyNlbHNlCisgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKKyAg
ICAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgT3duUHRy
PFBlbmRpbmdDYWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKKyAgICAgICAgVmVjdG9yPHht
bENoYXI+IG1fYnVmZmVyZWRUZXh0OworI2VuZGlmCisgICAgICAgIENvbnRhaW5lck5vZGUqIG1f
Y3VycmVudE5vZGU7CisgICAgICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9k
ZVN0YWNrOworCisgICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKworICAgICAg
ICBib29sIG1fc2F3RXJyb3I7CisgICAgICAgIGJvb2wgbV9zYXdDU1M7CisgICAgICAgIGJvb2wg
bV9zYXdYU0xUcmFuc2Zvcm07CisgICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAg
ICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAg
IGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKKyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNs
YXJhdGlvbjsKKyNlbmRpZgorCisgICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CisgICAgICAg
IGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OworICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOwor
CisgICAgICAgIGludCBtX2Vycm9yQ291bnQ7CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0
RXJyb3JQb3NpdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKKworICAgICAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKKyAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKKyAgICAgICAgVGV4dFBvc2l0
aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRpb247CisKKyAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFn
bWVudDsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKworICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZv
ck5hbWVzcGFjZU1hcDsKKyAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9O
YW1lc3BhY2VNYXA7CisgICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CisgICAg
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Cisg
ICAgfTsKKworI2lmIEVOQUJMRShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hl
ZFJlc291cmNlTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJs
KTsKKyNlbmRpZgorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29u
c3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYz
OWZiNGVjN2RlZTA3MGE4MzUxNWFlMGM0ZjQxMGY2YjcyODZlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBA
IC0wLDAgKzEsMTUxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSA8
cG1rQHBvc3QuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFy
b2dhQHBhcm9nYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYTUxEb2N1bWVu
dFBhcnNlci5oIgorCisjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ2FjaGVk
U2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkhUTUxFbnRpdHlQYXJzZXIuaCIKKyNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VD
b2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1Tb3VyY2UuaCIKKyNpbmNsdWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oIgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxs
aWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CisjaWYgRU5BQkxFKFhTTFQpCisjaW5jbHVkZSAiWE1MVHJlZVZpZXdlci5oIgorI2luY2x1ZGUg
PGxpYnhzbHQveHNsdC5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRl
ICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQZW5kaW5nQ2FsbGJhY2tzKTsKK3B1YmxpYzoKKyAgICB+UGVu
ZGluZ0NhbGxiYWNrcygpIHsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdDYWxsYmFj
a3M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdD
YWxsYmFja3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2Fs
bGJhY2soY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVm
aXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBp
bnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGF0dHJp
YnV0ZXMpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNr
KTsKKworICAgICAgICBjYWxsYmFjay0+eG1sTG9jYWxOYW1lID0geG1sU3RyZHVwKHhtbExvY2Fs
TmFtZSk7CisgICAgICAgIGNhbGxiYWNrLT54bWxQcmVmaXggPSB4bWxTdHJkdXAoeG1sUHJlZml4
KTsKKyAgICAgICAgY2FsbGJhY2stPnhtbFVSSSA9IHhtbFN0cmR1cCh4bWxVUkkpOworICAgICAg
ICBjYWxsYmFjay0+bmJfbmFtZXNwYWNlcyA9IG5iX25hbWVzcGFjZXM7CisgICAgICAgIGNhbGxi
YWNrLT5uYW1lc3BhY2VzID0gc3RhdGljX2Nhc3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6ZW9m
KHhtbENoYXIqKSAqIG5iX25hbWVzcGFjZXMgKiAyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbmJfbmFtZXNwYWNlcyAqIDIgOyBpKyspCisgICAgICAgICAgICBjYWxsYmFjay0+bmFt
ZXNwYWNlc1tpXSA9IHhtbFN0cmR1cChuYW1lc3BhY2VzW2ldKTsKKyAgICAgICAgY2FsbGJhY2st
Pm5iX2F0dHJpYnV0ZXMgPSBuYl9hdHRyaWJ1dGVzOworICAgICAgICBjYWxsYmFjay0+bmJfZGVm
YXVsdGVkID0gbmJfZGVmYXVsdGVkOworICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlcyA9IHN0
YXRpY19jYXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9hdHRy
aWJ1dGVzICogNSkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7
IGkrKykgeworICAgICAgICAgICAgLy8gRWFjaCBhdHRyaWJ1dGUgaGFzIDUgZWxlbWVudHMgaW4g
dGhlIGFycmF5OgorICAgICAgICAgICAgLy8gbmFtZSwgcHJlZml4LCB1cmksIHZhbHVlIGFuZCBh
biBlbmQgcG9pbnRlci4KKworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKysp
CisgICAgICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyBqXSA9IHhtbFN0
cmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgal0pOworCisgICAgICAgICAgICBpbnQgbGVuID0gYXR0
cmlidXRlc1tpICogNSArIDRdIC0gYXR0cmlidXRlc1tpICogNSArIDNdOworCisgICAgICAgICAg
ICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICogNSArIDNdID0geG1sU3RybmR1cChhdHRyaWJ1dGVz
W2kgKiA1ICsgM10sIGxlbik7CisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICog
NSArIDRdID0gY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyAzXSArIGxlbjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kRW5kRWxlbWVudE5TQ2FsbGJhY2soKQorICAgIHsKKyAgICAg
ICAgbV9jYWxsYmFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBQZW5kaW5nRW5kRWxlbWVudE5TQ2Fs
bGJhY2spKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhjb25z
dCB4bWxDaGFyKiBzLCBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDaGFy
YWN0ZXJzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdDaGFyYWN0ZXJz
Q2FsbGJhY2spOworCisgICAgICAgIGNhbGxiYWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOwor
ICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVuOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFy
KiBkYXRhKQorICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbkNhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+dGFyZ2V0ID0geG1sU3RyZHVw
KHRhcmdldCk7CisgICAgICAgIGNhbGxiYWNrLT5kYXRhID0geG1sU3RyZHVwKGRhdGEpOworCisg
ICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKwor
ICAgIHZvaWQgYXBwZW5kQ0RBVEFCbG9ja0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMsIGludCBs
ZW4pCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk7CisKKyAgICAg
ICAgY2FsbGJhY2stPnMgPSB4bWxTdHJuZHVwKHMsIGxlbik7CisgICAgICAgIGNhbGxiYWNrLT5s
ZW4gPSBsZW47CisKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2Uo
KSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRDb21tZW50Q2FsbGJhY2soY29uc3QgeG1sQ2hh
ciogcykKKyAgICB7CisgICAgICAgIE93blB0cjxQZW5kaW5nQ29tbWVudENhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ29tbWVudENhbGxiYWNrKTsKKworICAgICAgICBj
YWxsYmFjay0+cyA9IHhtbFN0cmR1cChzKTsKKworICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQo
Y2FsbGJhY2sucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEludGVybmFsU3Vi
c2V0Q2FsbGJhY2soY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJ
RCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGlu
Z0ludGVybmFsU3Vic2V0Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdJ
bnRlcm5hbFN1YnNldENhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bmFtZSA9IHhtbFN0
cmR1cChuYW1lKTsKKyAgICAgICAgY2FsbGJhY2stPmV4dGVybmFsSUQgPSB4bWxTdHJkdXAoZXh0
ZXJuYWxJRCk7CisgICAgICAgIGNhbGxiYWNrLT5zeXN0ZW1JRCA9IHhtbFN0cmR1cChzeXN0ZW1J
RCk7CisKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBhcHBlbmRFcnJvckNhbGxiYWNrKFhNTERvY3VtZW50UGFyc2VyOjpF
cnJvclR5cGUgdHlwZSwgY29uc3QgeG1sQ2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0Vycm9yQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdFcnJvckNhbGxiYWNrKTsKKworICAg
ICAgICBjYWxsYmFjay0+bWVzc2FnZSA9IHhtbFN0cmR1cChtZXNzYWdlKTsKKyAgICAgICAgY2Fs
bGJhY2stPnR5cGUgPSB0eXBlOworICAgICAgICBjYWxsYmFjay0+bGluZU51bWJlciA9IGxpbmVO
dW1iZXI7CisgICAgICAgIGNhbGxiYWNrLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisK
KyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQor
CisgICAgdm9pZCBjYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlciog
cGFyc2VyKQorICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sg
PSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgY2FsbGJhY2stPmNhbGwocGFyc2Vy
KTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNr
cy5pc0VtcHR5KCk7IH0KKworcHJpdmF0ZToKKyAgICBQZW5kaW5nQ2FsbGJhY2tzKCkgeyB9CisK
KyAgICBzdHJ1Y3QgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0Nh
bGxiYWNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2Vy
KiBwYXJzZXIpID0gMDsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdTdGFydEVsZW1lbnRO
U0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBl
bmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1s
RnJlZSh4bWxMb2NhbE5hbWUpOworICAgICAgICAgICAgeG1sRnJlZSh4bWxQcmVmaXgpOworICAg
ICAgICAgICAgeG1sRnJlZSh4bWxVUkkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuYl9uYW1lc3BhY2VzICogMjsgaSsrKQorICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZXNw
YWNlc1tpXSk7CisgICAgICAgICAgICB4bWxGcmVlKG5hbWVzcGFjZXMpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUo
YXR0cmlidXRlc1tpICogNSArIGpdKTsKKyAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlcyk7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXJ0RWxlbWVudE5z
KHhtbExvY2FsTmFtZSwgeG1sUHJlZml4LCB4bWxVUkksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5iX25hbWVzcGFjZXMsIGNvbnN0X2Nhc3Q8Y29uc3QgeG1sQ2hhcioq
PihuYW1lc3BhY2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJf
YXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4oYXR0
cmlidXRlcykpOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogeG1sTG9jYWxOYW1lOwor
ICAgICAgICB4bWxDaGFyKiB4bWxQcmVmaXg7CisgICAgICAgIHhtbENoYXIqIHhtbFVSSTsKKyAg
ICAgICAgaW50IG5iX25hbWVzcGFjZXM7CisgICAgICAgIHhtbENoYXIqKiBuYW1lc3BhY2VzOwor
ICAgICAgICBpbnQgbmJfYXR0cmlidXRlczsKKyAgICAgICAgaW50IG5iX2RlZmF1bHRlZDsKKyAg
ICAgICAgeG1sQ2hhcioqIGF0dHJpYnV0ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5n
RW5kRWxlbWVudE5TQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcGFyc2VyLT5lbmRFbGVtZW50TnMoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBzdHJ1Y3QgUGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2Fs
bGJhY2sgeworICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgeG1sRnJlZShzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZp
cnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHBhcnNlci0+Y2hhcmFjdGVycyhzLCBsZW4pOworICAgICAgICB9CisKKyAgICAg
ICAgeG1sQ2hhciogczsKKyAgICAgICAgaW50IGxlbjsKKyAgICB9OworCisgICAgc3RydWN0IFBl
bmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJh
Y2sgeworICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJh
Y2soKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxGcmVlKHRhcmdldCk7CisgICAgICAgICAg
ICB4bWxGcmVlKGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwo
WE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2Vy
LT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHhtbENoYXIqIHRhcmdldDsKKyAgICAgICAgeG1sQ2hhciogZGF0YTsKKyAgICB9OworCisg
ICAgc3RydWN0IFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxi
YWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHhtbEZyZWUocyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAg
ICAgICAgICBwYXJzZXItPmNkYXRhQmxvY2socywgbGVuKTsKKyAgICAgICAgfQorCisgICAgICAg
IHhtbENoYXIqIHM7CisgICAgICAgIGludCBsZW47CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5k
aW5nQ29tbWVudENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZp
cnR1YWwgflBlbmRpbmdDb21tZW50Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICB4
bWxGcmVlKHMpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9j
dW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5jb21t
ZW50KHMpOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAgICB9OworCisgICAg
c3RydWN0IFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxs
YmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKCkK
KyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJlZShuYW1lKTsKKyAgICAgICAgICAgIHhtbEZy
ZWUoZXh0ZXJuYWxJRCk7CisgICAgICAgICAgICB4bWxGcmVlKHN5c3RlbUlEKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0
ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogbmFtZTsK
KyAgICAgICAgeG1sQ2hhciogZXh0ZXJuYWxJRDsKKyAgICAgICAgeG1sQ2hhciogc3lzdGVtSUQ7
CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nRXJyb3JDYWxsYmFjazogcHVibGljIFBlbmRp
bmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdFcnJvckNhbGxiYWNrKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgeG1sRnJlZShtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBhcnNlci0+aGFuZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obWVzc2FnZSksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIH0K
KworICAgICAgICBYTUxEb2N1bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIHht
bENoYXIqIG1lc3NhZ2U7CisgICAgICAgIGludCBsaW5lTnVtYmVyOworICAgICAgICBpbnQgY29s
dW1uTnVtYmVyOworICAgIH07CisKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiA+
IG1fY2FsbGJhY2tzOworfTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K3N0YXRpYyBpbnQgZ2xvYmFsRGVzY3JpcHRvciA9IDA7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmll
ciBsaWJ4bWxMb2FkZXJUaHJlYWQgPSAwOworCitzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBj
aGFyKikKK3sKKyAgICAvLyBPbmx5IG1hdGNoIGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBv
ZiBsaWJ4bWwyIGZyb20gd2l0aGluIFhNTERvY3VtZW50UGFyc2VyIHRvIGF2b2lkCisgICAgLy8g
aW50ZXJmZXJpbmcgd2l0aCBjbGllbnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1s
Mi4gIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCisgICAgcmV0
dXJuIFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciAm
JiBjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkOworfQorCitjbGFzcyBPZmZz
ZXRCdWZmZXIgeworcHVibGljOgorICAgIE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0b3I8Y2hhcj4m
IGIpIDogbV9idWZmZXIoYiksIG1fY3VycmVudE9mZnNldCgwKSB7IH0KKworICAgIGludCByZWFk
T3V0Qnl0ZXMoY2hhciogb3V0cHV0QnVmZmVyLCB1bnNpZ25lZCBhc2tlZFRvUmVhZCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVzTGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVu
dE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgbGVuVG9Db3B5ID0gbWluKGFza2VkVG9SZWFkLCBi
eXRlc0xlZnQpOworICAgICAgICBpZiAobGVuVG9Db3B5KSB7CisgICAgICAgICAgICBtZW1jcHko
b3V0cHV0QnVmZmVyLCBtX2J1ZmZlci5kYXRhKCkgKyBtX2N1cnJlbnRPZmZzZXQsIGxlblRvQ29w
eSk7CisgICAgICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gbGVuVG9Db3B5OworICAgICAgICB9
CisgICAgICAgIHJldHVybiBsZW5Ub0NvcHk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxjaGFyPiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRPZmZzZXQ7Cit9OworCitz
dGF0aWMgdm9pZCBzd2l0Y2hUb1VURjE2KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKK3sKKyAgICAv
LyBIYWNrIGFyb3VuZCBsaWJ4bWwyJ3MgbGFjayBvZiBlbmNvZGluZyBvdmVyaWRlIHN1cHBvcnQg
YnkgbWFudWFsbHkKKyAgICAvLyByZXNldHRpbmcgdGhlIGVuY29kaW5nIHRvIFVURi0xNiBiZWZv
cmUgZXZlcnkgY2h1bmsuICBPdGhlcndpc2UgbGlieG1sCisgICAgLy8gd2lsbCBkZXRlY3QgPD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iPGVuY29kaW5nIG5hbWU+Ij8+IGJsb2NrcworICAg
IC8vIGFuZCBzd2l0Y2ggZW5jb2RpbmdzLCBjYXVzaW5nIHRoZSBwYXJzZSB0byBmYWlsLgorICAg
IGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhp
Z2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOwor
ICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hB
Ul9FTkNPRElOR19VVEYxNkxFIDogWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRSk7Cit9CisKK3N0
YXRpYyBib29sIHNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOworCisgICAgLy8gT24gbm9uLVdpbmRv
d3MgcGxhdGZvcm1zIGxpYnhtbCBhc2tzIGZvciB0aGlzIFVSTCwgdGhlCisgICAgLy8gIlhNTF9Y
TUxfREVGQVVMVF9DQVRBTE9HIiwgb24gaW5pdGlhbGl6YXRpb24uCisgICAgaWYgKHVybFN0cmlu
ZyA9PSAiZmlsZTovLy9ldGMveG1sL2NhdGFsb2ciKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBPbiBXaW5kb3dzLCBsaWJ4bWwgY29tcHV0ZXMgYSBVUkwgcmVsYXRpdmUgdG8gd2hl
cmUgaXRzIERMTCByZXNpZGVzLgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTov
Ly8iLCBmYWxzZSkgJiYgdXJsU3RyaW5nLmVuZHNXaXRoKCIvZXRjL2NhdGFsb2ciLCBmYWxzZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBEVEQuICBU
aGVyZSBpc24ndCBtdWNoIHBvaW50IGluIGhhbW1lcmluZyB3d3cudzNjLm9yZworICAgIC8vIGJ5
IHJlcXVlc3RpbmcgdGhpcyBVUkwgZm9yIGV2ZXJ5IFhIVE1MIGRvY3VtZW50LgorICAgIGlmICh1
cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwiLCBmYWxzZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNpbWlsYXJseSwgdGhlcmUgaXNuJ3Qg
bXVjaCBwb2ludCBpbiByZXF1ZXN0aW5nIHRoZSBTVkcgRFRELgorICAgIGlmICh1cmxTdHJpbmcu
c3RhcnRzV2l0aCgiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHIiwgZmFsc2UpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgbGlieG1sIGRvZXNuJ3QgZ2l2ZSB1cyBh
IGxvdCBvZiBjb250ZXh0IGZvciBkZWNpZGluZyB3aGV0aGVyIHRvCisgICAgLy8gYWxsb3cgdGhp
cyByZXF1ZXN0LiAgSW4gdGhlIHdvcnN0IGNhc2UsIHRoaXMgbG9hZCBjb3VsZCBiZSBmb3IgYW4K
KyAgICAvLyBleHRlcm5hbCBlbnRpdHkgYW5kIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgY291bGQg
c2ltcGx5IHJlYWQgdGhlCisgICAgLy8gcmV0cmlldmVkIGNvbnRlbnQuICBJZiB3ZSBoYWQgbW9y
ZSBjb250ZXh0LCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdworICAgIC8vIHRoZSBwYXJzZXIg
dG8gbG9hZCBhIERURC4gIEFzIHRoaW5ncyBzdGFuZCwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZl
CisgICAgLy8gcm91dGUgYW5kIGFsbG93IHNhbWUtb3JpZ2luIHJlcXVlc3RzIG9ubHkuCisgICAg
aWYgKCFYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAg
ICBYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPnBy
aW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBj
aGFyKiB1cmkpCit7CisgICAgQVNTRVJUKFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRD
YWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4
bWxMb2FkZXJUaHJlYWQpOworCisgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOworCisgICAgaWYg
KCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZCh1cmwpKQorICAgICAgICByZXR1cm4gJmdsb2JhbERl
c2NyaXB0b3I7CisKKyAgICBSZXNvdXJjZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKworICAgIHsKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyOworICAgICAgICBYTUxEb2N1
bWVudFBhcnNlclNjb3BlIHNjb3BlKDApOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJl
c3RvcmUgdGhlIG9yaWdpbmFsIGdsb2JhbCBlcnJvciBoYW5kbGVyIGFzIHdlbGwuCisKKyAgICAg
ICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgY2FjaGVk
UmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsK
KyAgICB9CisKKyAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIHRoZSBVUkwgYWdhaW4gYWZ0ZXIgdGhl
IGxvYWQgdG8gY2F0Y2ggcmVkaXJlY3RzLgorICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTYzPi4KKyAgICBpZiAoIXNob3VsZEFsbG93RXh0ZXJu
YWxMb2FkKHJlc3BvbnNlLnVybCgpKSkKKyAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9y
OworCisgICAgcmV0dXJuIG5ldyBPZmZzZXRCdWZmZXIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQg
cmVhZEZ1bmModm9pZCogY29udGV4dCwgY2hhciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIC8v
IERvIDAtYnl0ZSByZWFkcyBpbiBjYXNlIG9mIGEgbnVsbCBkZXNjcmlwdG9yCisgICAgaWYgKGNv
bnRleHQgPT0gJmdsb2JhbERlc2NyaXB0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgT2Zm
c2V0QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7Cisg
ICAgcmV0dXJuIGRhdGEtPnJlYWRPdXRCeXRlcyhidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBp
bnQgd3JpdGVGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgaW50KQoreworICAgIC8vIEFsd2F5cyBq
dXN0IGRvIDAtYnl0ZSB3cml0ZXMKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9z
ZUZ1bmModm9pZCogY29udGV4dCkKK3sKKyAgICBpZiAoY29udGV4dCAhPSAmZ2xvYmFsRGVzY3Jp
cHRvcikgeworICAgICAgICBPZmZzZXRCdWZmZXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxPZmZzZXRC
dWZmZXIqPihjb250ZXh0KTsKKyAgICAgICAgZGVsZXRlIGRhdGE7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitzdGF0aWMgdm9pZCBlcnJvckZ1bmModm9pZCos
IGNvbnN0IGNoYXIqLCAuLi4pCit7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8g
ZGlzcGxheSBlcnJvciBtZXNzYWdlcyBzb21ld2hlcmUuCit9CisjZW5kaWYKKworc3RhdGljIGJv
b2wgZGlkSW5pdCA9IGZhbHNlOworCitQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBh
cnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJz
LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5p
dFBhcnNlcigpOworICAgICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywg
b3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1
dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7Cisg
ICAgICAgIGxpYnhtbExvYWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlk
SW5pdCA9IHRydWU7CisgICAgfQorCisgICAgeG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSB4bWxD
cmVhdGVQdXNoUGFyc2VyQ3R4dChoYW5kbGVycywgMCwgMCwgMCwgMCk7CisgICAgcGFyc2VyLT5f
cHJpdmF0ZSA9IHVzZXJEYXRhOworICAgIHBhcnNlci0+cmVwbGFjZUVudGl0aWVzID0gdHJ1ZTsK
KyAgICBzd2l0Y2hUb1VURjE2KHBhcnNlcik7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhN
TFBhcnNlckNvbnRleHQocGFyc2VyKSk7Cit9CisKKworLy8gQ2h1bmsgc2hvdWxkIGJlIGVuY29k
ZWQgaW4gVVRGLTgKK1Bhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gWE1MUGFyc2VyQ29udGV4
dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQqIHVz
ZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuaykKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAg
ICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tz
KG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxS
ZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNs
b3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExvYWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsK
KyAgICAgICAgZGlkSW5pdCA9IHRydWU7CisgICAgfQorCisgICAgLy8gYXBwZW5kRnJhZ21lbnRT
b3VyY2UoKSBjaGVja3MgdGhhdCB0aGUgbGVuZ3RoIGRvZXNuJ3Qgb3ZlcmZsb3cgYW4gaW50Lgor
ICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dChj
aHVuay5kYXRhKCksIGNodW5rLmxlbmd0aCgpKTsKKworICAgIGlmICghcGFyc2VyKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIENvcHkgdGhlIHNheCBoYW5kbGVyCisgICAgbWVtY3B5KHBh
cnNlci0+c2F4LCBoYW5kbGVycywgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKworICAgIC8vIFNl
dCBwYXJzZXIgb3B0aW9ucy4KKyAgICAvLyBYTUxfUEFSU0VfTk9ESUNUOiBkZWZhdWx0IGRpY3Rp
b25hcnkgb3B0aW9uLgorICAgIC8vIFhNTF9QQVJTRV9OT0VOVDogZm9yY2UgZW50aXRpZXMgc3Vi
c3RpdHV0aW9ucy4KKyAgICB4bWxDdHh0VXNlT3B0aW9ucyhwYXJzZXIsIFhNTF9QQVJTRV9OT0RJ
Q1QgfCBYTUxfUEFSU0VfTk9FTlQpOworCisgICAgLy8gSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24K
KyAgICBwYXJzZXItPnNheDIgPSAxOworICAgIHBhcnNlci0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJf
Q09OVEVOVDsgLy8gV2UgYXJlIHBhcnNpbmcgYSBDT05URU5UCisgICAgcGFyc2VyLT5kZXB0aCA9
IDA7CisgICAgcGFyc2VyLT5zdHJfeG1sID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIEJB
RF9DQVNUICJ4bWwiLCAzKTsKKyAgICBwYXJzZXItPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAo
cGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sbnMiLCA1KTsKKyAgICBwYXJzZXItPnN0cl94bWxf
bnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsK
KyAgICBwYXJzZXItPl9wcml2YXRlID0gdXNlckRhdGE7CisKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFhNTFBhcnNlckNvbnRleHQocGFyc2VyKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVy
c2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEu
MCI7Cit9CisKK1hNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCog
ZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKGRvY3VtZW50KQorICAgICwgbV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fY29udGV4
dCgwKQorICAgICwgbV9wZW5kaW5nQ2FsbGJhY2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgp
KQorICAgICwgbV9jdXJyZW50Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2Up
CisgICAgLCBtX3Nhd0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQor
ICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChm
YWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFs
c2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwg
bV9wYXJzZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisg
ICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwg
bV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
KyAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21l
bnQoZmFsc2UpCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdB
bGxvd2VkKQoreworfQorCitYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIDogU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV92aWV3KDApCisg
ICAgLCBtX2NvbnRleHQoMCkKKyAgICAsIG1fcGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJh
Y2tzOjpjcmVhdGUoKSkKKyAgICAsIG1fY3VycmVudE5vZGUoZnJhZ21lbnQpCisgICAgLCBtX3Nh
d0Vycm9yKGZhbHNlKQorICAgICwgbV9zYXdDU1MoZmFsc2UpCisgICAgLCBtX3Nhd1hTTFRyYW5z
Zm9ybShmYWxzZSkKKyAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQorICAgICwgbV9pc1hI
VE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxN
UERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisj
ZW5kaWYKKyAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0aW5nU2Ny
aXB0KGZhbHNlKQorICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCisgICAgLCBtX2Vycm9yQ291
bnQoMCkKKyAgICAsIG1fbGFzdEVycm9yUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5n
ZVBvc2l0aW9uKCkpCisgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0U3Rh
cnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1f
cGFyc2luZ0ZyYWdtZW50KHRydWUpCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0
aW5nUGVybWlzc2lvbikKK3sKKyAgICBmcmFnbWVudC0+cmVmKCk7CisKKyAgICAvLyBBZGQgbmFt
ZXNwYWNlcyBiYXNlZCBvbiB0aGUgcGFyZW50IG5vZGUKKyAgICBWZWN0b3I8RWxlbWVudCo+IGVs
ZW1TdGFjazsKKyAgICB3aGlsZSAocGFyZW50RWxlbWVudCkgeworICAgICAgICBlbGVtU3RhY2su
YXBwZW5kKHBhcmVudEVsZW1lbnQpOworCisgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJl
bnRFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgfQorCisgICAgaWYgKGVsZW1TdGFjay5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1T
dGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgp
KSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRl
cygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0
cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0g
eG1sbnNBdG9tKQorICAgICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBh
dHRyLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09
IHhtbG5zQXRvbSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVmaXhUb05hbWVzcGFjZU1hcC5z
ZXQoYXR0ci0+bG9jYWxOYW1lKCksIGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBk
b2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1
bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNl
VVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1f
ZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQor
CitYTUxQYXJzZXJDb250ZXh0Ojp+WE1MUGFyc2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29u
dGV4dC0+bXlEb2MpCisgICAgICAgIHhtbEZyZWVEb2MobV9jb250ZXh0LT5teURvYyk7CisgICAg
eG1sRnJlZVBhcnNlckN0eHQobV9jb250ZXh0KTsKK30KKworWE1MRG9jdW1lbnRQYXJzZXI6On5Y
TUxEb2N1bWVudFBhcnNlcigpCit7CisgICAgLy8gVGhlIFhNTERvY3VtZW50UGFyc2VyIHdpbGwg
YWx3YXlzIGJlIGRldGFjaGVkIGJlZm9yZSBiZWluZyBkZXN0cm95ZWQuCisgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7
CisKKyAgICAvLyBGSVhNRTogbV9wZW5kaW5nU2NyaXB0IGhhbmRsaW5nIHNob3VsZCBiZSBtb3Zl
ZCBpbnRvIFhNTERvY3VtZW50UGFyc2VyLmNwcCEKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQor
ICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQorewor
ICAgIEFTU0VSVCghaXNEZXRhY2hlZCgpKTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAg
aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoKTsKKworICAgIC8vIFByb3RlY3QgdGhlIGxpYnhtbCBj
b250ZXh0IGZyb20gZGVsZXRpb24gZHVyaW5nIGEgY2FsbGJhY2sKKyAgICBSZWZQdHI8WE1MUGFy
c2VyQ29udGV4dD4gY29udGV4dCA9IG1fY29udGV4dDsKKworICAgIC8vIGxpYlhNTCB0aHJvd3Mg
YW4gZXJyb3IgaWYgeW91IHRyeSB0byBzd2l0Y2ggdGhlIGVuY29kaW5nIGZvciBhbiBlbXB0eSBz
dHJpbmcuCisgICAgaWYgKHBhcnNlU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIEphdmFT
Y3JpcHQgbWF5IGNhdXNlIHRoZSBwYXJzZXIgdG8gZGV0YWNoIGR1cmluZyB4bWxQYXJzZUNodW5r
CisgICAgICAgIC8vIGtlZXAgdGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUu
CisgICAgICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAg
ICAgICBzd2l0Y2hUb1VURjE2KGNvbnRleHQtPmNvbnRleHQoKSk7CisgICAgICAgIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
CisgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29udGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIp
ICogcGFyc2VTdHJpbmcubGVuZ3RoKCksIDApOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgKHdo
aWNoIG1heSBiZSBydW4gdW5kZXIgdGhlIHhtbFBhcnNlQ2h1bmsgY2FsbHN0YWNrKSBtYXkKKyAg
ICAgICAgLy8gY2F1c2UgdGhlIHBhcnNlciB0byBiZSBzdG9wcGVkIG9yIGRldGFjaGVkLgorICAg
ICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGhlcmU/ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nl
c3MgdGhlIHBhc3NlZCBzb3VyY2U/CisgICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBk
b2N1bWVudCgpLT5kZWNvZGVyKCktPnNhd0Vycm9yKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRl
Y29kZXIgc2F3IGFuIGVycm9yLCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCisg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBjb250ZXh0LT5jb250
ZXh0KCktPmlucHV0LT5saW5lLCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3Ry
aW5nLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOwor
fQorCitzdGF0aWMgaW5saW5lIEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxD
aGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZy
b21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUpOworfQor
CitzdGF0aWMgaW5saW5lIEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFy
KiBzdHJpbmcpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZzo6ZnJvbVVURjgocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5nKSk7Cit9CisKK3N0cnVjdCBfeG1sU0FYMk5hbWVz
cGFjZSB7CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVy
aTsKK307Cit0eXBlZGVmIHN0cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB4bWxTQVgyTmFtZXNwYWNl
OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMoRWxlbWVudCog
bmV3RWxlbWVudCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1l
c3BhY2VzLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgeG1sU0FYMk5hbWVzcGFjZSogbmFtZXNwYWNlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMk5hbWVzcGFjZSo+KGxpYnhtbE5hbWVzcGFjZXMpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgIEF0
b21pY1N0cmluZyBuYW1lc3BhY2VRTmFtZSA9IHhtbG5zQXRvbTsKKyAgICAgICAgQXRvbWljU3Ry
aW5nIG5hbWVzcGFjZVVSSSA9IHRvQXRvbWljU3RyaW5nKG5hbWVzcGFjZXNbaV0udXJpKTsKKyAg
ICAgICAgaWYgKG5hbWVzcGFjZXNbaV0ucHJlZml4KQorICAgICAgICAgICAgbmFtZXNwYWNlUU5h
bWUgPSAieG1sbnM6IiArIHRvU3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKKyAgICAgICAg
bmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkks
IG5hbWVzcGFjZVFOYW1lLCBuYW1lc3BhY2VVUkksIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsK
KyAgICAgICAgaWYgKGVjKSAvLyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHsKKyAg
ICBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWU7CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4Owor
ICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKKyAgICBjb25zdCB4bWxDaGFyKiB2YWx1ZTsKKyAgICBj
b25zdCB4bWxDaGFyKiBlbmQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVz
IHhtbFNBWDJBdHRyaWJ1dGVzOworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudEF0
dHJpYnV0ZXMoRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJp
YnV0ZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgeG1sU0FYMkF0dHJp
YnV0ZXMqIGF0dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4o
bGlieG1sQXR0cmlidXRlcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVz
OyBpKyspIHsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihhdHRy
aWJ1dGVzW2ldLmVuZCAtIGF0dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICBBdG9taWNTdHJp
bmcgYXR0clZhbHVlID0gdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVM
ZW5ndGgpOworICAgICAgICBTdHJpbmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNb
aV0ucHJlZml4KTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJVUkkgPSBhdHRyUHJlZml4Lmlz
RW1wdHkoKSA/IEF0b21pY1N0cmluZygpIDogdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS51
cmkpOworICAgICAgICBBdG9taWNTdHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5
KCkgPyB0b0F0b21pY1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSkgOiBhdHRyUHJlZml4
ICsgIjoiICsgdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpOworCisgICAgICAgIG5l
d0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5TKGF0dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBl
Yywgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNl
dHRpbmcgYXR0cmlidXRlcworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxO
YW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50
IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
eG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVm
YXVsdGVkLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaXNT
dG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewor
ICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2so
eG1sTG9jYWxOYW1lLCB4bWxQcmVmaXgsIHhtbFVSSSwgbmJfbmFtZXNwYWNlcywgbGlieG1sTmFt
ZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5iX2RlZmF1bHRlZCwgbGlieG1sQXR0cmlidXRlcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAvLyBj
aGVjayBpZiB0aGUgRE9DVFlQRSBEZWNsYXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0
cworICAgIGlmICghbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRN
TE1QRG9jdW1lbnQoKSkgeworICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVj
bGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgZXhpdFRleHQoKTsKKworICAgIEF0b21pY1N0
cmluZyBsb2NhbE5hbWUgPSB0b0F0b21pY1N0cmluZyh4bWxMb2NhbE5hbWUpOworICAgIEF0b21p
Y1N0cmluZyB1cmkgPSB0b0F0b21pY1N0cmluZyh4bWxVUkkpOworICAgIEF0b21pY1N0cmluZyBw
cmVmaXggPSB0b0F0b21pY1N0cmluZyh4bWxQcmVmaXgpOworCisgICAgaWYgKG1fcGFyc2luZ0Zy
YWdtZW50ICYmIHVyaS5pc051bGwoKSkgeworICAgICAgICBpZiAoIXByZWZpeC5pc051bGwoKSkK
KyAgICAgICAgICAgIHVyaSA9IG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuZ2V0KHByZWZpeCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYm
IGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcu
MSBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwKKyAgICAgICAgLy8gd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5k
CisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24g
dGhlIHJvb3QgZWxtZW50ICdodG1sJworICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sJworICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRt
bFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRN
TE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFj
ZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7CisgICAgICAgICAgICB1cmkgPSBt
X2RlZmF1bHROYW1lc3BhY2VVUkk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJv
b2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVs
ZW1lbnQgPSB0cnVlOworCisgICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFt
ZSwgdXJpKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNy
ZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOworICAgIGlmICghbmV3RWxlbWVudCkgeworICAgICAg
ICBzdG9wUGFyc2luZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQo
KSwgbGlieG1sTmFtZXNwYWNlcywgbmJfbmFtZXNwYWNlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50Lmdl
dCgpLCBsaWJ4bWxBdHRyaWJ1dGVzLCBuYl9hdHRyaWJ1dGVzLCBlYywgbV9zY3JpcHRpbmdQZXJt
aXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG5ld0VsZW1lbnQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7
CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5l
d0VsZW1lbnQuZ2V0KCkpOworICAgIGlmIChzY3JpcHRFbGVtZW50KQorICAgICAgICBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24gPSB0ZXh0UG9zaXRpb25PbmVCYXNlZCgpOworCisgICAgbV9jdXJyZW50
Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CisKKyAgICBwdXNoQ3VycmVu
dE5vZGUobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3RWxlbWVudC0+
YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CisKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aHRtbFRhZykpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVu
dCo+KG5ld0VsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisjZW5kaWYKKworICAg
IGlmICghbV9wYXJzaW5nRnJhZ21lbnQgJiYgaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNo
RG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmVuZEVsZW1lbnROcygpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tz
LT5hcHBlbmRFbmRFbGVtZW50TlNDYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gSmF2YVNjcmlwdCBjYW4gZGV0YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhp
cyBpcyBub3QgcmVsZWFzZWQKKyAgICAvLyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4K
KyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBleGl0
VGV4dCgpOworCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG4gPSBtX2N1cnJlbnROb2RlOwor
ICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworCisgICAgaWYgKG1fc2NyaXB0aW5nUGVy
bWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQgJiYgbi0+aXNFbGVtZW50Tm9k
ZSgpICYmIHRvU2NyaXB0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSkpKSB7
CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgICAgIG4tPnJlbW92ZShlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW4tPmlzRWxlbWVudE5vZGUoKSB8fCAhbV92aWV3KSB7CisgICAgICAgIHBvcEN1cnJlbnROb2Rl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpOworCisgICAgLy8gVGhlIGVsZW1lbnQncyBwYXJl
bnQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSBkb2N1bWVudC4KKyAgICAvLyBQ
YXJzaW5nIGNvbnRpbnVlcyBpbiB0aGlzIGNhc2UsIGJ1dCBzY3JpcHRzIGFyZW4ndCBleGVjdXRl
ZC4KKyAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBwb3BDdXJyZW50
Tm9kZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoIXNjcmlwdEVs
ZW1lbnQpIHsKKyAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIERvbid0IGxvYWQgZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBk
b2N1bWVudHMgKGZvciBub3cpLgorICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKKyAgICBt
X3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOworCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJl
ZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBT
Y3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICgh
c3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYg
KCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNl
dFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGSVhNRTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJl
dHdlZW4KKyAgICAgICAgLy8gdGhlIGxpYnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2VyIGlt
cGxlbWVudGF0aW9ucy4KKworICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFy
c2VyRXhlY3V0ZWQoKSkKKyAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQo
U2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50
KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2Ny
aXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5k
aW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBt
X3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5h
ZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJl
IDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQg
aXQuCisgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBh
dXNlUGFyc2luZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVu
dCA9IDA7CisKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFy
c2VyCisgICAgICAgIGlmIChpc0RldGFjaGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOworICAgIHBvcEN1cnJlbnROb2RlKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciog
cywgaW50IGxlbikKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFw
cGVuZENoYXJhY3RlcnNDYWxsYmFjayhzLCBsZW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX2xlYWZUZXh0Tm9kZSkKKyAgICAgICAgZW50ZXJUZXh0KCk7CisgICAgbV9i
dWZmZXJlZFRleHQuYXBwZW5kKHMsIGxlbik7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmVycm9yKEVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3Mp
Cit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBDT01QSUxF
UihNU1ZDKSB8fCBDT01QSUxFUihSVkNUKSB8fCBDT01QSUxFUihNSU5HVykKKyAgICBjaGFyIG1b
MTAyNF07CisgICAgdnNucHJpbnRmKG0sIHNpemVvZihtKSAtIDEsIG1lc3NhZ2UsIGFyZ3MpOwor
I2Vsc2UKKyAgICBjaGFyKiBtOworICAgIGlmICh2YXNwcmludGYoJm0sIG1lc3NhZ2UsIGFyZ3Mp
ID09IC0xKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIGlmIChtX3BhcnNlclBhdXNl
ZCkKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KG0pLCBsaW5lTnVtYmVyKCksIGNvbHVt
bk51bWJlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIGxpbmVO
dW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworCisjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01Q
SUxFUihSVkNUKSAmJiAhQ09NUElMRVIoTUlOR1cpCisgICAgZnJlZShtKTsKKyNlbmRpZgorfQor
Cit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1s
Q2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQoreworICAgIGlmIChpc1N0b3BwZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAg
IG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2so
dGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7
CisKKyAgICAvLyAjIyMgaGFuZGxlIGV4Y2VwdGlvbnMKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBwaSA9IGRvY3VtZW50KCktPmNy
ZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigKKyAgICAgICAgdG9TdHJpbmcodGFyZ2V0KSwgdG9T
dHJpbmcoZGF0YSksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHBp
LT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJB
ZGRDaGlsZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisg
ICAgICAgIHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
KworICAgIGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVO
QUJMRShYU0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYm
IHBpLT5pc1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+
dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIq
IHMsIGludCBsZW4pCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5h
cHBlbmRDREFUQUJsb2NrQ2FsbGJhY2socywgbGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0g
Q0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAg
bV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1f
dmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1lbnQoY29uc3QgeG1sQ2hhciogcykK
K3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Bh
cnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENvbW1lbnRD
YWxsYmFjayhzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisK
KyAgICBSZWZQdHI8Q29tbWVudD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgp
LCB0b1N0cmluZyhzKSk7CisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9k
ZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0
RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2Rpbmcs
IGludCBzdGFuZGFsb25lKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYg
KHZlcnNpb24pCisgICAgICAgIGRvY3VtZW50KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVy
c2lvbiksIGVjKTsKKyAgICBkb2N1bWVudCgpLT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUg
PT0gMSwgZWMpOyAvLyBwb3NzaWJsZSB2YWx1ZXMgYXJlIDAsIDEsIGFuZCAtMQorICAgIGlmIChl
bmNvZGluZykKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcodG9TdHJpbmcoZW5j
b2RpbmcpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQoKQorewor
ICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpp
bnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5h
bElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3Bl
bmRpbmdDYWxsYmFja3MtPmFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2sobmFtZSwgZXh0ZXJu
YWxJRCwgc3lzdGVtSUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY3Vt
ZW50KCkpIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgU3RyaW5nIGV4dElkID0gdG9T
dHJpbmcoZXh0ZXJuYWxJRCk7CisgICAgICAgIFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFt
ZSk7CisgICAgICAgIGlmIChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUg
MS4wLy9FTiIKKyAgICAgICAgICAgIHx8IGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjEvL0VOIikgeworICAgICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVz
OjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0
YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290
IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+
aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVu
dCh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MRG9j
dW1lbnQodHJ1ZSk7CisKKyAgICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1
ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hp
bGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3Ry
aW5nKGV4dGVybmFsSUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgWE1MRG9jdW1lbnRQYXJzZXIqIGdldFBhcnNlcih2b2lkKiBjbG9zdXJlKQorewor
ICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+
KGNsb3N1cmUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxYTUxEb2N1bWVudFBhcnNlcio+KGN0
eHQtPl9wcml2YXRlKTsKK30KKworLy8gVGhpcyBpcyBhIGhhY2sgYXJvdW5kIGh0dHA6Ly9idWd6
aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTIxOQorLy8gT3RoZXJ3aXNlIGxpYnht
bCBzZWVtcyB0byBjYWxsIGFsbCB0aGUgU0FYIGNhbGxiYWNrcyB0d2ljZSBmb3IgYW55IHJlcGxh
Y2VkIGVudGl0eS4KK3N0YXRpYyBpbmxpbmUgYm9vbCBoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVn
KHZvaWQqIGNsb3N1cmUpCit7CisjaWYgTElCWE1MX1ZFUlNJT04gPj0gMjA2MjcKKyAgICBVTlVT
RURfUEFSQU0oY2xvc3VyZSk7CisKKyAgICAvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBs
aWJ4bWwgMi42LjI3LgorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpLT5ub2RlOworI2VuZGlmCit9CisKK3N0
YXRpYyB2b2lkIHN0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxD
aGFyKiBsb2NhbG5hbWUsIGNvbnN0IHhtbENoYXIqIHByZWZpeCwgY29uc3QgeG1sQ2hhciogdXJp
LCBpbnQgbmJfbmFtZXNwYWNlcywgY29uc3QgeG1sQ2hhcioqIG5hbWVzcGFjZXMsIGludCBuYl9h
dHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmli
dXRlcykKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhs
b2NhbG5hbWUsIHByZWZpeCwgdXJpLCBuYl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRy
aWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9p
ZCBlbmRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25z
dCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciopCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxF
bnRpdHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9z
dXJlKS0+ZW5kRWxlbWVudE5zKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYXJhY3RlcnNIYW5kbGVy
KHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGhh
Y2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IGdldFBhcnNlcihjbG9zdXJlKS0+Y2hhcmFjdGVycyhzLCBsZW4pOworfQorCitzdGF0aWMgdm9p
ZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENo
YXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExp
YlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2Vy
KGNsb3N1cmUpLT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKK30KKworc3Rh
dGljIHZvaWQgY2RhdGFCbG9ja0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciog
cywgaW50IGxlbikKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJl
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5jZGF0YUJsb2Nr
KHMsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUs
IGNvbnN0IHhtbENoYXIqIGNvbW1lbnQpCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRp
dHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJl
KS0+Y29tbWVudChjb21tZW50KTsKK30KKworV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKK3N0
YXRpYyB2b2lkIHdhcm5pbmdIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2Fn
ZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6d2Fy
bmluZywgbWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklC
VVRFX1BSSU5URigyLCAzKQorc3RhdGljIHZvaWQgZmF0YWxFcnJvckhhbmRsZXIodm9pZCogY2xv
c3VyZSwgY29uc3QgY2hhciogbWVzc2FnZSwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAg
ICB2YV9zdGFydChhcmdzLCBtZXNzYWdlKTsKKyAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVycm9y
KFhNTERvY3VtZW50UGFyc2VyOjpmYXRhbCwgbWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFy
Z3MpOworfQorCitXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKQorc3RhdGljIHZvaWQgbm9ybWFs
RXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sK
KyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0
UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6bm9uRmF0YWwsIG1lc3Nh
Z2UsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKK30KKworLy8gVXNpbmcgYSBzdGF0aWMgZW50
aXR5IGFuZCBtYXJraW5nIGl0IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSBpcworLy8g
YSBoYWNrIHRvIGF2b2lkIG1hbGxvYy9mcmVlLiBVc2luZyBhIGdsb2JhbCB2YXJpYWJsZSBsaWtl
IHRoaXMgY291bGQgY2F1c2UgdHJvdWJsZQorLy8gaWYgbGlieG1sIGltcGxlbWVudGF0aW9uIGRl
dGFpbHMgd2VyZSB0byBjaGFuZ2UKK3N0YXRpYyB4bWxDaGFyIHNoYXJlZFhIVE1MRW50aXR5UmVz
dWx0WzVdID0gezAsIDAsIDAsIDAsIDB9OworCitzdGF0aWMgeG1sRW50aXR5UHRyIHNoYXJlZFhI
VE1MRW50aXR5KCkKK3sKKyAgICBzdGF0aWMgeG1sRW50aXR5IGVudGl0eTsKKyAgICBpZiAoIWVu
dGl0eS50eXBlKSB7CisgICAgICAgIGVudGl0eS50eXBlID0gWE1MX0VOVElUWV9ERUNMOworICAg
ICAgICBlbnRpdHkub3JpZyA9IHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRp
dHkuY29udGVudCA9IHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuZXR5
cGUgPSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7CisgICAgfQorICAgIHJldHVybiAm
ZW50aXR5OworfQorCitzdGF0aWMgeG1sRW50aXR5UHRyIGdldFhIVE1MRW50aXR5KGNvbnN0IHht
bENoYXIqIG5hbWUpCit7CisgICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5hbWUpKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVy
biAwOworCisgICAgQ1N0cmluZyB2YWx1ZSA9IFN0cmluZygmYywgMSkudXRmOCgpOworICAgIEFT
U0VSVCh2YWx1ZS5sZW5ndGgoKSA8IDUpOworICAgIHhtbEVudGl0eVB0ciBlbnRpdHkgPSBzaGFy
ZWRYSFRNTEVudGl0eSgpOworICAgIGVudGl0eS0+bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Cisg
ICAgZW50aXR5LT5uYW1lID0gbmFtZTsKKyAgICBtZW1jcHkoc2hhcmVkWEhUTUxFbnRpdHlSZXN1
bHQsIHZhbHVlLmRhdGEoKSwgZW50aXR5LT5sZW5ndGggKyAxKTsKKworICAgIHJldHVybiBlbnRp
dHk7Cit9CisKK3N0YXRpYyB4bWxFbnRpdHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2lkKiBjbG9z
dXJlLCBjb25zdCB4bWxDaGFyKiBuYW1lKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9
IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHhtbEVudGl0eVB0
ciBlbnQgPSB4bWxHZXRQcmVkZWZpbmVkRW50aXR5KG5hbWUpOworICAgIGlmIChlbnQpIHsKKyAg
ICAgICAgZW50LT5ldHlwZSA9IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWTsKKyAgICAg
ICAgcmV0dXJuIGVudDsKKyAgICB9CisKKyAgICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+
bXlEb2MsIG5hbWUpOworICAgIGlmICghZW50ICYmIChnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhU
TUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICAgICAgIHx8IGdl
dFBhcnNlcihjbG9zdXJlKS0+aXNYSFRNTE1QRG9jdW1lbnQoKQorI2VuZGlmCisgICAgICAgKSkg
eworICAgICAgICBlbnQgPSBnZXRYSFRNTEVudGl0eShuYW1lKTsKKyAgICAgICAgaWYgKGVudCkK
KyAgICAgICAgICAgIGVudC0+ZXR5cGUgPSBYTUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGVudDsKK30KKworc3RhdGljIHZvaWQgc3RhcnREb2N1bWVudEhh
bmRsZXIodm9pZCogY2xvc3VyZSkKK3sKKyAgICB4bWxQYXJzZXJDdHh0KiBjdHh0ID0gc3RhdGlj
X2Nhc3Q8eG1sUGFyc2VyQ3R4dCo+KGNsb3N1cmUpOworICAgIHN3aXRjaFRvVVRGMTYoY3R4dCk7
CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5zdGFydERvY3VtZW50KGN0eHQtPnZlcnNpb24sIGN0
eHQtPmVuY29kaW5nLCBjdHh0LT5zdGFuZGFsb25lKTsKKyAgICB4bWxTQVgyU3RhcnREb2N1bWVu
dChjbG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgZW5kRG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNs
b3N1cmUpCit7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lbmREb2N1bWVudCgpOworICAgIHht
bFNBWDJFbmREb2N1bWVudChjbG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJuYWxTdWJz
ZXRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENo
YXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlEKQoreworICAgIGdldFBhcnNl
cihjbG9zdXJlKS0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwor
ICAgIHhtbFNBWDJJbnRlcm5hbFN1YnNldChjbG9zdXJlLCBuYW1lLCBleHRlcm5hbElELCBzeXN0
ZW1JRCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9z
dXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1s
Q2hhciopCit7CisgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJZCk7CisgICAg
aWYgKChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQor
ICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKQorICAgICAg
ICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIikKKyAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikKKyAg
ICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKKyAg
ICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4w
Ly9FTiIpCisgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMg
TWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9X
QVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikKKyAgICAgICApCisgICAgICAgIGdl
dFBhcnNlcihjbG9zdXJlKS0+c2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBp
ZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KK30KKworc3RhdGljIHZvaWQgaWdub3JhYmxl
V2hpdGVzcGFjZUhhbmRsZXIodm9pZCosIGNvbnN0IHhtbENoYXIqLCBpbnQpCit7CisgICAgLy8g
bm90aGluZyB0byBkbywgYnV0IHdlIG5lZWQgdGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIK
KyAgICAvLyBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUK
KyAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyCit9CisK
K3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IENT
dHJpbmcmIGNodW5rKQoreworICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4
LCAwLCBzaXplb2Yoc2F4KSk7CisKKyAgICBzYXguZXJyb3IgPSBub3JtYWxFcnJvckhhbmRsZXI7
CisgICAgc2F4LmZhdGFsRXJyb3IgPSBmYXRhbEVycm9ySGFuZGxlcjsKKyAgICBzYXguY2hhcmFj
dGVycyA9IGNoYXJhY3RlcnNIYW5kbGVyOworICAgIHNheC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24g
PSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyOworICAgIHNheC5jZGF0YUJsb2NrID0gY2Rh
dGFCbG9ja0hhbmRsZXI7CisgICAgc2F4LmNvbW1lbnQgPSBjb21tZW50SGFuZGxlcjsKKyAgICBz
YXgud2FybmluZyA9IHdhcm5pbmdIYW5kbGVyOworICAgIHNheC5zdGFydEVsZW1lbnROcyA9IHN0
YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguZW5kRWxlbWVudE5zID0gZW5kRWxlbWVudE5z
SGFuZGxlcjsKKyAgICBzYXguZ2V0RW50aXR5ID0gZ2V0RW50aXR5SGFuZGxlcjsKKyAgICBzYXgu
c3RhcnREb2N1bWVudCA9IHN0YXJ0RG9jdW1lbnRIYW5kbGVyOworICAgIHNheC5lbmREb2N1bWVu
dCA9IGVuZERvY3VtZW50SGFuZGxlcjsKKyAgICBzYXguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5h
bFN1YnNldEhhbmRsZXI7CisgICAgc2F4LmV4dGVybmFsU3Vic2V0ID0gZXh0ZXJuYWxTdWJzZXRI
YW5kbGVyOworICAgIHNheC5pZ25vcmFibGVXaGl0ZXNwYWNlID0gaWdub3JhYmxlV2hpdGVzcGFj
ZUhhbmRsZXI7CisgICAgc2F4LmVudGl0eURlY2wgPSB4bWxTQVgyRW50aXR5RGVjbDsKKyAgICBz
YXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FYMl9NQUdJQzsKKyAgICBEb2N1bWVudFBhcnNlcjo6c3Rh
cnRQYXJzaW5nKCk7CisgICAgbV9zYXdFcnJvciA9IGZhbHNlOworICAgIG1fc2F3Q1NTID0gZmFs
c2U7CisgICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSBmYWxzZTsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVu
dCA9IGZhbHNlOworCisgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisg
ICAgICAgIG1fY29udGV4dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcigm
c2F4LCB0aGlzLCBjaHVuayk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghY2h1bmsuZGF0
YSgpKTsKKyAgICAgICAgbV9jb250ZXh0ID0gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5n
UGFyc2VyKCZzYXgsIHRoaXMpOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZG9FbmQoKQoreworICAgIGlmICghaXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY29udGV4
dCkgeworICAgICAgICAgICAgLy8gVGVsbCBsaWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50
KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOworICAgICAgICAgICAgICAgIHhtbFBhcnNlQ2h1
bmsoY29udGV4dCgpLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9j
b250ZXh0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEVOQUJMRShYU0xUKQorICAgIFhN
TFRyZWVWaWV3ZXIgeG1sVHJlZVZpZXdlcihkb2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdl
ck1vZGUgPSAhbV9zYXdFcnJvciAmJiAhbV9zYXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYm
IHhtbFRyZWVWaWV3ZXIuaGFzTm9TdHlsZUluZm9ybWF0aW9uKCk7CisgICAgaWYgKHhtbFZpZXdl
ck1vZGUpCisgICAgICAgIHhtbFRyZWVWaWV3ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3
KCk7CisKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0pIHsKKyAgICAgICAgdm9pZCogZG9jID0g
eG1sRG9jUHRyRm9yU3RyaW5nKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1f
b3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0sIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsK
KyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VHJhbnNmb3JtU291cmNlKGFkb3B0UHRyKG5ldyBUcmFu
c2Zvcm1Tb3VyY2UoZG9jKSkpOworCisgICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFs
c2UpOyAvLyBNYWtlIHRoZSBkb2N1bWVudCB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBw
bHkgWFNMIHN0eWxlc2hlZXRzLgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFy
c2luZyh0cnVlKTsKKworICAgICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKKyAg
ICB9CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3Ry
aW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChzb3VyY2UuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5r
IGludG8gYW4geG1sRG9jUHRyCisgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMg
c28gdGhhdCBhIGZhaWx1cmUgdG8gcGFyc2UgdGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgor
ICAgIC8vIGdvb2QgZXJyb3IgbWVzc2FnZXMuCisgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZG
OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgQk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJkJPTSk7CisKKyAgICBYTUxEb2N1bWVudFBhcnNlclNj
b3BlIHNjb3BlKGNhY2hlZFJlc291cmNlTG9hZGVyLCBlcnJvckZ1bmMsIDApOworICAgIHhtbERv
Y1B0ciBzb3VyY2VEb2MgPSB4bWxSZWFkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHNvdXJjZS5jaGFyYWN0ZXJzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhciksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmxhdGluMSgpLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVU
Ri0xNkxFIiA6ICJVVEYtMTZCRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWFNMVF9QQVJTRV9PUFRJT05TKTsKKyAgICByZXR1cm4gc291cmNlRG9jOworfQorI2Vu
ZGlmCisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50
LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KKyAgICByZXR1cm4gY29udGV4dCgp
ID8gY29udGV4dCgpLT5pbnB1dC0+bGluZSA6IDE7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNl
cjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0
aW9uIHByb2JhYmx5IHJldHVybnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVy
biAwLWJhc2VkLgorICAgIHJldHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wg
OiAxOworfQorCitUZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24o
KSBjb25zdAoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQo
KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5p
bXVtUG9zaXRpb24oKTsKKyAgICAvLyBGSVhNRTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFp
bnMgMS1iYXNlZCBudW1iZXJzLCBidXQgd2UgdHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8v
ICAgICAgICB0byBiZSBjb25zaXN0ZW50IHdpdGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5k
IGNvbHVtbk51bWJlcgorICAgIC8vICAgICAgICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9z
aXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlu
cHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJ
bnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3Jy
ZWN0IGltcGxlbWVudGF0aW9uLCBpbiBjb250cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2Qu
CisvLyBJdCBzaG91bGQgcmVwbGFjZSB0ZXh0UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1M
RG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQ
YXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAg
cmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKK30KKwordm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6c3RvcFBhcnNpbmcoKQoreworICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2lu
ZygpOworICAgIGlmIChjb250ZXh0KCkpCisgICAgICAgIHhtbFN0b3BQYXJzZXIoY29udGV4dCgp
KTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAg
QVNTRVJUKCFpc0RldGFjaGVkKCkpOworICAgIEFTU0VSVChtX3BhcnNlclBhdXNlZCk7CisKKyAg
ICBtX3BhcnNlclBhdXNlZCA9IGZhbHNlOworCisgICAgLy8gRmlyc3QsIGV4ZWN1dGUgYW55IHBl
bmRpbmcgY2FsbGJhY2tzCisgICAgd2hpbGUgKCFtX3BlbmRpbmdDYWxsYmFja3MtPmlzRW1wdHko
KSkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmNhbGxBbmRSZW1vdmVGaXJzdENhbGxi
YWNrKHRoaXMpOworCisgICAgICAgIC8vIEEgY2FsbGJhY2sgcGF1c2VkIHRoZSBwYXJzZXIKKyAg
ICAgICAgaWYgKG1fcGFyc2VyUGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFRoZW4sIHdyaXRlIGFueSBwZW5kaW5nIGRhdGEKKyAgICBTZWdtZW50ZWRTdHJpbmcg
cmVzdCA9IG1fcGVuZGluZ1NyYzsKKyAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBhcHBl
bmQocmVzdCk7CisKKyAgICAvLyBGaW5hbGx5LCBpZiBmaW5pc2goKSBoYXMgYmVlbiBjYWxsZWQg
YW5kIHdyaXRlKCkgZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNr
cyBiZWluZyBxdWV1ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgbV9w
ZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhN
TERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIGNodW5r
KQoreworICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQobV9wYXJzaW5nRnJhZ21l
bnQpOworCisgICAgQ1N0cmluZyBjaHVua0FzVXRmOCA9IGNodW5rLnV0ZjgoKTsKKyAgICAKKyAg
ICAvLyBsaWJ4bWwyIHRha2VzIGFuIGludCBmb3IgYSBsZW5ndGgsIGFuZCB0aGVyZWZvcmUgY2Fu
J3QgaGFuZGxlIFhNTCBjaHVua3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisgICAgaWYgKGNodW5rQXNV
dGY4Lmxlbmd0aCgpID4gSU5UX01BWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5p
dGlhbGl6ZVBhcnNlckNvbnRleHQoY2h1bmtBc1V0ZjgpOworICAgIHhtbFBhcnNlQ29udGVudChj
b250ZXh0KCkpOworICAgIGVuZERvY3VtZW50KCk7IC8vIENsb3NlIGFueSBvcGVuIHRleHQgbm9k
ZXMuCisKKyAgICAvLyBGSVhNRTogSWYgdGhpcyBjb2RlIGlzIGFjdHVhbGx5IG5lZWRlZCwgaXQg
c2hvdWxkIHByb2JhYmx5IG1vdmUgdG8gZmluaXNoKCkKKyAgICAvLyBYTUxEb2N1bWVudFBhcnNl
clF0IGhhcyBhIHNpbWlsYXIgY2hlY2sgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJl
YWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9yKSBpbiBkb0VuZCgpLgorICAgIC8vIENo
ZWNrIGlmIGFsbCB0aGUgY2h1bmsgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICAgIGxvbmcgYnl0ZXNQ
cm9jZXNzZWQgPSB4bWxCeXRlQ29uc3VtZWQoY29udGV4dCgpKTsKKyAgICBpZiAoYnl0ZXNQcm9j
ZXNzZWQgPT0gLTEgfHwgKCh1bnNpZ25lZCBsb25nKWJ5dGVzUHJvY2Vzc2VkKSAhPSBjaHVua0Fz
VXRmOC5sZW5ndGgoKSkgeworICAgICAgICAvLyBGSVhNRTogSSBkb24ndCBiZWxpZXZlIHdlIGNh
biBoaXQgdGhpcyBjYXNlIHdpdGhvdXQgYWxzbyBoYXZpbmcgc2VlbiBhbiBlcnJvciBvciBhIG51
bGwgYnl0ZS4KKyAgICAgICAgLy8gSWYgd2UgaGl0IHRoaXMgQVNTRVJULCB3ZSd2ZSBmb3VuZCBh
IHRlc3QgY2FzZSB3aGljaCBkZW1vbnN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgY29kZS4KKyAg
ICAgICAgQVNTRVJUKG1fc2F3RXJyb3IgfHwgKGJ5dGVzUHJvY2Vzc2VkID49IDAgJiYgIWNodW5r
QXNVdGY4LmRhdGEoKVtieXRlc1Byb2Nlc3NlZF0pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIE5vIGVycm9yIGlmIHRoZSBjaHVuayBpcyB3ZWxsIGZvcm1lZCBvciBp
dCBpcyBub3QgYnV0IHdlIGhhdmUgbm8gZXJyb3IuCisgICAgcmV0dXJuIGNvbnRleHQoKS0+d2Vs
bEZvcm1lZCB8fCAheG1sQ3R4dEdldExhc3RFcnJvcihjb250ZXh0KCkpOworfQorCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0
ZSB7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICBib29sIGdv
dEF0dHJpYnV0ZXM7Cit9OworCitzdGF0aWMgdm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNI
YW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3Qg
eG1sQ2hhciogLyp4bWxQcmVmaXgqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgeG1sQ2hhciogLyp4bWxVUkkqLywgaW50IC8qbmJfbmFtZXNwYWNl
cyovLCBjb25zdCB4bWxDaGFyKiogLypuYW1lc3BhY2VzKi8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgLypuYl9kZWZh
dWx0ZWQqLywgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKHN0
cmNtcChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih4bWxMb2NhbE5hbWUpLCAiYXR0cnMi
KSAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBz
dGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKKyAgICBBdHRyaWJ1dGVQYXJz
ZVN0YXRlKiBzdGF0ZSA9IHN0YXRpY19jYXN0PEF0dHJpYnV0ZVBhcnNlU3RhdGUqPihjdHh0LT5f
cHJpdmF0ZSk7CisKKyAgICBzdGF0ZS0+Z290QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICB4bWxT
QVgyQXR0cmlidXRlcyogYXR0cmlidXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMkF0dHJp
YnV0ZXMqPihsaWJ4bWxBdHRyaWJ1dGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0
dHJpYnV0ZXM7IGkrKykgeworICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IHRvU3RyaW5n
KGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gKGlu
dCkgKGF0dHJpYnV0ZXNbaV0uZW5kIC0gYXR0cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgIFN0
cmluZyBhdHRyVmFsdWUgPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnZhbHVlLCB2YWx1ZUxlbmd0
aCk7CisgICAgICAgIFN0cmluZyBhdHRyUHJlZml4ID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5w
cmVmaXgpOworICAgICAgICBTdHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkg
PyBhdHRyTG9jYWxOYW1lIDogYXR0clByZWZpeCArICI6IiArIGF0dHJMb2NhbE5hbWU7CisKKyAg
ICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKKyAgICB9
Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJp
bmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykKK3sKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0
YXRlOworICAgIHN0YXRlLmdvdEF0dHJpYnV0ZXMgPSBmYWxzZTsKKworICAgIHhtbFNBWEhhbmRs
ZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisgICAgc2F4LnN0YXJ0
RWxlbWVudE5zID0gYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguaW5p
dGlhbGl6ZWQgPSBYTUxfU0FYMl9NQUdJQzsKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4g
cGFyc2VyID0gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0
ZSk7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0
dHJzICIgKyBzdHJpbmcgKyAiIC8+IjsKKyAgICB4bWxQYXJzZUNodW5rKHBhcnNlci0+Y29udGV4
dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJz
KCkpLCBwYXJzZVN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDEpOworICAgIGF0dHJz
T0sgPSBzdGF0ZS5nb3RBdHRyaWJ1dGVzOworICAgIHJldHVybiBzdGF0ZS5hdHRyaWJ1dGVzOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
clF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMw
NmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlclF0LmNwcApAQCAtMCwwICsxLDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCisKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNp
bmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiSFRNTEVudGl0eVBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgi
CisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUu
aCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxRRGVidWc+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVudGl0eVJlc29sdmVyIDogcHVibGljIFFYbWxT
dHJlYW1FbnRpdHlSZXNvbHZlciB7CisgICAgdmlydHVhbCBRU3RyaW5nIHJlc29sdmVVbmRlY2xh
cmVkRW50aXR5KGNvbnN0IFFTdHJpbmcgJm5hbWUpOworfTsKKworUVN0cmluZyBFbnRpdHlSZXNv
bHZlcjo6cmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSkKK3sKKyAg
ICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHkobmFtZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7
CisgICAgcmV0dXJuIFFTdHJpbmcoYyk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihj
b25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9
CisKK1hNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1l
bnQsIEZyYW1lVmlldyogZnJhbWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
KGRvY3VtZW50KQorICAgICwgbV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fd3JvdGVUZXh0KGZh
bHNlKQorICAgICwgbV9jdXJyZW50Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFs
c2UpCisgICAgLCBtX3Nhd0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNl
KQorICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVu
dChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQo
ZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAg
ICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2Up
CisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAg
ICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24o
KSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9u
KFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJh
Z21lbnQoZmFsc2UpCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRp
bmdBbGxvd2VkKQoreworICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlS
ZXNvbHZlcik7Cit9CisKK1hNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1
bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHBlcm1pc3Npb24pCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1fd3Jv
dGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJyZW50Tm9kZShmcmFnbWVudCkKKyAgICAsIG1fc2F3
RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNm
b3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhU
TUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1Q
RG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNl
bmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3Jp
cHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3Vu
dCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jhbmdl
UG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFy
dFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9w
YXJzaW5nRnJhZ21lbnQodHJ1ZSkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNz
aW9uKQoreworICAgIGZyYWdtZW50LT5yZWYoKTsKKworICAgIC8vIEFkZCBuYW1lc3BhY2VzIGJh
c2VkIG9uIHRoZSBwYXJlbnQgbm9kZQorICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNrOwor
ICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CisgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFy
ZW50RWxlbWVudCk7CisKKyAgICAgICAgTm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
KTsKKyAgICB9CisKKyAgICBpZiAoZWxlbVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyBuYW1lc3BhY2VzOworICAg
IGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNF
bXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVN
YXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0gInhtbG5zIikKKyAgICAgICAgICAgICAgICAg
ICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgICAg
ICBuYW1lc3BhY2VzLmFwcGVuZChRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24oYXR0ci0+
bG9jYWxOYW1lKCksIGF0dHItPnZhbHVlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9ucyhuYW1lc3Bh
Y2VzKTsKKyAgICBtX3N0cmVhbS5zZXRFbnRpdHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2ZXIp
OworCisgICAgLy8gSWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVl
LCB0aGVyZSBtYXkgYmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBh
cmVudCdzIG5hbWVzcGFjZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgp
ICYmICFwYXJlbnRFbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVz
cGFjZVVSSSA9IHBhcmVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxEb2N1bWVu
dFBhcnNlcjo6flhNTERvY3VtZW50UGFyc2VyKCkKK3sKKyAgICBjbGVhckN1cnJlbnROb2RlU3Rh
Y2soKTsKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBkZWxldGUgbV9zdHJlYW0uZW50aXR5UmVzb2x2ZXIo
KTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBh
cnNlU3RyaW5nKQoreworICAgIG1fd3JvdGVUZXh0ID0gdHJ1ZTsKKworICAgIGlmIChkb2N1bWVu
dCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFs
IChzdG9wcyBwYXJzaW5nKQorICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVy
cm9yIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBRU3RyaW5nIGRhdGEocGFyc2VTdHJpbmcpOworICAgIGlmICghZGF0YS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgY2F1c2UgdGhlIHBhcnNlciB0byBk
ZXRhY2gsCisgICAgICAgIC8vIGtlZXAgdGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlz
IGRvbmUuCisgICAgICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsK
KworICAgICAgICBtX3N0cmVhbS5hZGREYXRhKGRhdGEpOworICAgICAgICBwYXJzZSgpOworICAg
IH0KKworICAgIHJldHVybjsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5pdGlhbGl6
ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYpCit7CisgICAgRG9jdW1lbnRQYXJzZXI6OnN0
YXJ0UGFyc2luZygpOworICAgIG1fc2F3RXJyb3IgPSBmYWxzZTsKKyAgICBtX3Nhd0NTUyA9IGZh
bHNlOworICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1l
bnQgPSBmYWxzZTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworI2lm
IEVOQUJMRShYU0xUKQorICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBkb2N1
bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3VyY2UoYWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZSht
X29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtKSkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQ
YXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2ls
bCBhcHBseSB4c2wgc2hlZXRzLgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFy
c2luZyh0cnVlKTsKKyAgICAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CisgICAg
fQorI2VuZGlmCisKKyAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVy
OjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYm
ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiAhbV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fc2F3RXJyb3Ip
KQorICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0
cmluZygpKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Cit9CisKK2ludCBYTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmxp
bmVOdW1iZXIoKTsKK30KKworaW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKK30KKworVGV4dFBv
c2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZElu
dChsaW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChj
b2x1bW5OdW1iZXIoKSkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVy
cHJldHMgemVyby1iYXNlIGxpbmVOdW1iZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisv
LyBGSVhNRTogVGhpcyBlcnJvciBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQg
Zml4IGl0IGV2ZW50dWFsbHkuIAorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdU
Rjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9u
ZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwordm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQoreworICAgIFNjcmlwdGFibGVEb2N1
bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNTRVJUKG1fcGFyc2VyUGF1c2VkKTsKKworICAgIG1f
cGFyc2VyUGF1c2VkID0gZmFsc2U7CisKKyAgICAvLyBGaXJzdCwgZXhlY3V0ZSBhbnkgcGVuZGlu
ZyBjYWxsYmFja3MKKyAgICBwYXJzZSgpOworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gVGhlbiwgd3JpdGUgYW55IHBlbmRpbmcgZGF0YQorICAgIFNl
Z21lbnRlZFN0cmluZyByZXN0ID0gbV9wZW5kaW5nU3JjOworICAgIG1fcGVuZGluZ1NyYy5jbGVh
cigpOworICAgIGFwcGVuZChyZXN0KTsKKworICAgIC8vIEZpbmFsbHksIGlmIGZpbmlzaCgpIGhh
cyBiZWVuIGNhbGxlZCBhbmQgYXBwZW5kKCkgZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBm
dXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5p
c2hDYWxsZWQgJiYgIW1fcGFyc2VyUGF1c2VkICYmICFtX3BlbmRpbmdTY3JpcHQpCisgICAgICAg
IGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJj
ZShjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBBU1NFUlQoIW1fc2F3Rmlyc3RFbGVtZW50
KTsKKyAgICBhcHBlbmQoU3RyaW5nKCI8cXhtbHN0cmVhbWR1bW15ZWxlbWVudD4iKSk7CisgICAg
YXBwZW5kKHNvdXJjZSk7CisgICAgYXBwZW5kKFN0cmluZygiPC9xeG1sc3RyZWFtZHVtbXllbGVt
ZW50PiIpKTsKKyAgICByZXR1cm4gIWhhc0Vycm9yKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0cnVjdCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzOworICAgIGJvb2wgZ290QXR0cmlidXRl
czsKK307CisKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoQXR0
cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzJiBhdHRy
cykKK3sKKyAgICBpZiAoYXR0cnMuY291bnQoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzdGF0ZS0+Z290QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGF0dHJzLmNvdW50KCk7IGkrKykgeworICAgICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRl
JiBhdHRyID0gYXR0cnNbaV07CisgICAgICAgIFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5u
YW1lKCk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAg
ICAgICBTdHJpbmcgYXR0clVSSSAgICAgICA9IGF0dHIubmFtZXNwYWNlVXJpKCk7CisgICAgICAg
IFN0cmluZyBhdHRyUU5hbWUgICAgID0gYXR0ci5xdWFsaWZpZWROYW1lKCk7CisgICAgICAgIHN0
YXRlLT5hdHRyaWJ1dGVzLnNldChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7CisgICAgfQorfQorCitI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGJvb2wmIGF0dHJzT0spCit7CisgICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKKyAg
ICBzdGF0ZS5nb3RBdHRyaWJ1dGVzID0gZmFsc2U7CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyIHN0
cmVhbTsKKyAgICBRU3RyaW5nIGR1bW15ID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCI8P3htbCB2
ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAlMSAvPiIpKS5hcmcoc3RyaW5nKTsKKyAgICBzdHJlYW0u
YWRkRGF0YShkdW1teSk7CisgICAgd2hpbGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBz
dHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgaWYgKHN0cmVhbS5pc1N0YXJ0RWxlbWVudCgpKSB7
CisgICAgICAgICAgICBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKCZzdGF0ZSwgc3Ry
ZWFtLmF0dHJpYnV0ZXMoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXR0cnNPSyA9IHN0YXRl
LmdvdEF0dHJpYnV0ZXM7CisgICAgcmV0dXJuIHN0YXRlLmF0dHJpYnV0ZXM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgU3RyaW5nIHByZWZpeEZyb21RTmFtZShjb25zdCBRU3RyaW5nJiBxTmFtZSkKK3sK
KyAgICBjb25zdCBpbnQgb2Zmc2V0ID0gcU5hbWUuaW5kZXhPZihRTGF0aW4xQ2hhcignOicpKTsK
KyAgICBpZiAob2Zmc2V0IDw9IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiBxTmFtZS5sZWZ0KG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBR
WG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zICZucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFj
ZURlY2xhcmF0aW9uICZkZWNsID0gbnNbaV07CisgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkg
PSBkZWNsLm5hbWVzcGFjZVVyaSgpOworICAgICAgICBTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSBk
ZWNsLnByZWZpeCgpLmlzRW1wdHkoKSA/IFN0cmluZygieG1sbnMiKSA6IFN0cmluZygieG1sbnM6
Iik7CisgICAgICAgIG5hbWVzcGFjZVFOYW1lLmFwcGVuZChkZWNsLnByZWZpeCgpKTsKKyAgICAg
ICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1s
bnMvIiwgbmFtZXNwYWNlUU5hbWUsIG5hbWVzcGFjZVVSSSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Np
b24pOworICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVF
bGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtQXR0
cmlidXRlcyAmYXR0cnMsIEV4Y2VwdGlvbkNvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tp
XTsKKyAgICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAg
U3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBhdHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRy
VVJJICAgICAgID0gYXR0ci5uYW1lc3BhY2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0
cmluZyhhdHRyLm5hbWVzcGFjZVVyaSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAg
PSBhdHRyLnF1YWxpZmllZE5hbWUoKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRl
TlMoYXR0clVSSSwgYXR0clFOYW1lLCBhdHRyVmFsdWUsIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9u
KTsKKyAgICAgICAgaWYgKGVjKSAvLyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZSgpCit7CisgICAgd2hpbGUgKCFpc1N0b3BwZWQoKSAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1f
c3RyZWFtLmF0RW5kKCkpIHsKKyAgICAgICAgbV9zdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAg
c3dpdGNoIChtX3N0cmVhbS50b2tlblR5cGUoKSkgeworICAgICAgICBjYXNlIFFYbWxTdHJlYW1S
ZWFkZXI6OlN0YXJ0RG9jdW1lbnQ6IHsKKyAgICAgICAgICAgIHN0YXJ0RG9jdW1lbnQoKTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRl
cjo6RW5kRG9jdW1lbnQ6IHsKKyAgICAgICAgICAgIGVuZERvY3VtZW50KCk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0
RWxlbWVudDogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50
KCktPmlzWEhUTUxNUERvY3VtZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxv
c3QuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50
KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJl
YW1SZWFkZXI6OkVuZEVsZW1lbnQ6IHsKKyAgICAgICAgICAgIHBhcnNlRW5kRWxlbWVudCgpOwor
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVh
ZGVyOjpDaGFyYWN0ZXJzOiB7CisgICAgICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7
CisgICAgICAgICAgICAgICAgLy9jZGF0YQorICAgICAgICAgICAgICAgIHBhcnNlQ2RhdGEoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXJzCisgICAg
ICAgICAgICAgICAgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1l
bnQ6IHsKKyAgICAgICAgICAgIHBhcnNlQ29tbWVudCgpOworICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKKyAgICAgICAg
ICAgIC8vcURlYnVnKCk8PCItLS0tLS0tLS0tLS0tIERURCI7CisgICAgICAgICAgICBwYXJzZUR0
ZCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFy
YXRpb24gPSB0cnVlOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogeworICAgICAgICAg
ICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRv
U3RyaW5nKCkKKyAgICAgICAgICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0
KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNl
bmRpZgorICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkg
PSBtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0g
ZGVjb2RlTmFtZWRFbnRpdHkoZW50aXR5LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW1fbGVhZlRleHROb2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRlclRl
eHQoKTsKKyAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAg
ICAgICBTdHJpbmcgc3RyKCZjLCAxKTsKKyAgICAgICAgICAgICAgICAvLyBxRGVidWcoKTw8IiAt
LS0tLS0tIGFkZGluZyBlbnRpdHkgIjw8c3RyOworICAgICAgICAgICAgICAgIG1fbGVhZlRleHRO
b2RlLT5hcHBlbmREYXRhKHN0ciwgZWMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246IHsKKyAgICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7
CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAg
ICAgICAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1
cmVFbmRPZkRvY3VtZW50RXJyb3IpIHsKKyAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9
IChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJv
cikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOwor
ICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJy
b3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFy
dERvY3VtZW50KCkKK3sKKyAgICBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkgeworICAgICAg
ICBkb2N1bWVudCgpLT5zZXRYTUxTdGFuZGFsb25lKG1fc3RyZWFtLmlzU3RhbmRhbG9uZURvY3Vt
ZW50KCksIGVjKTsKKworICAgICAgICBRU3RyaW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1
bWVudFZlcnNpb24oKTsKKyAgICAgICAgaWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPnNldFhNTFZlcnNpb24odmVyc2lvbiwgZWMpOworICAgICAgICBRU3Ry
aW5nUmVmIGVuY29kaW5nID0gbV9zdHJlYW0uZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICBp
ZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVu
Y29kaW5nKGVuY29kaW5nKTsKKyAgICB9Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIG1fcGFy
c2luZ0ZyYWdtZW50KSB7CisgICAgICAgIC8vIHNraXAgZHVtbXkgZWxlbWVudCBmb3IgZnJhZ21l
bnRzCisgICAgICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJl
YW0ubmFtZSgpOworICAgIFN0cmluZyB1cmkgICAgICAgPSBtX3N0cmVhbS5uYW1lc3BhY2VVcmko
KTsKKyAgICBTdHJpbmcgcHJlZml4ICAgID0gcHJlZml4RnJvbVFOYW1lKG1fc3RyZWFtLnF1YWxp
ZmllZE5hbWUoKS50b1N0cmluZygpKTsKKworICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1
cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgUV9BU1NFUlQocHJlZml4LmlzTnVsbCgpKTsKKyAgICAg
ICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgIH0KKworICAgIFF1YWxpZmllZE5h
bWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5l
d0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKKyAgICBp
ZiAoIW5ld0VsZW1lbnQpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1l
bnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rp
b24gb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCisgICAgICAgIC8vIHdl
IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFu
ZAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSByb290IGVsbWVudCAnaHRtbCcKKyAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0
bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhU
TUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3Bh
Y2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOworICAgICAgICAgICAgdXJpID0g
bV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1l
c3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBI
VE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9z
YXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0ubmFtZXNw
YWNlRGVjbGFyYXRpb25zKCksIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGlmIChl
YykgeworICAgICAgICBzdG9wUGFyc2luZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0uYXR0
cmlidXRlcygpLCBlYywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNjcmlw
dEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQo
KSk7CisgICAgaWYgKHNjcmlwdEVsZW1lbnQpCisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlv
biA9IHRleHRQb3NpdGlvbk9uZUJhc2VkKCk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJB
ZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKKworICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVt
ZW50LmdldCgpKTsKKyAgICBpZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQor
ICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCisgICAgaWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
dG1sVGFnKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVu
dC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzRmlyc3RF
bGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworfQorCit2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0
KCk7CisKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CisgICAg
bi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNz
aW9uID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkg
JiYgdG9TY3JpcHRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAg
ICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAg
ICAgbi0+cmVtb3ZlKGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbi0+
aXNFbGVtZW50Tm9kZSgpIHx8ICFtX3ZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2Rl
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obi5nZXQoKSk7CisKKyAgICAvLyBUaGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBh
bHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIGRvY3VtZW50LgorICAgIC8vIFBhcnNpbmcgY29udGlu
dWVzIGluIHRoaXMgY2FzZSwgYnV0IHNjcmlwdHMgYXJlbid0IGV4ZWN1dGVkLgorICAgIGlmICgh
ZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0g
dG9TY3JpcHRFbGVtZW50KGVsZW1lbnQpOworICAgIGlmICghc2NyaXB0RWxlbWVudCkgeworICAg
ICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
ZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3JpcHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9y
IG5vdykKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CisgICAgbV9yZXF1ZXN0aW5nU2Ny
aXB0ID0gdHJ1ZTsKKworICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVt
ZW50LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6
QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVBy
ZXBhcmVkKSB7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVu
dC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUlu
VHlwZUF0dHJpYnV0ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNz
Tm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBz
Y3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVu
dC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0
aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1
dGVkKCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNh
Y2hlZFNjcmlwdCgpOworICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAg
ICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2Fk
ZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGlu
Z1NjcmlwdCkKKyAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOworICAgIH0KKyAgICBtX3JlcXVlc3Rp
bmdTY3JpcHQgPSBmYWxzZTsKKyAgICBwb3BDdXJyZW50Tm9kZSgpOworfQorCit2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZUNoYXJhY3RlcnMoKQoreworICAgIGlmICghbV9sZWFmVGV4dE5v
ZGUpCisgICAgICAgIGVudGVyVGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRhKG1fc3RyZWFtLnRleHQoKSwgZWMpOworfQorCit2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCit7Cisg
ICAgZXhpdFRleHQoKTsKKworICAgIC8vICMjIyBoYW5kbGUgZXhjZXB0aW9ucworICAgIGludCBl
eGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gZG9j
dW1lbnQoKS0+Y3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKAorICAgICAgICBtX3N0cmVhbS5w
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYXJnZXQoKSwKKyAgICAgICAgbV9zdHJlYW0ucHJvY2Vzc2lu
Z0luc3RydWN0aW9uRGF0YSgpLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHBpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBt
X2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAm
JiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAgIHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9z
YXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShYU0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0g
IW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5z
Zm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAg
c3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZUNkYXRhKCkKK3sKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVmUHRyPENEQVRBU2VjdGlvbj4g
bmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIG1fc3RyZWFtLnRleHQo
KSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdOb2RlLmdldCgpKTsK
KyAgICBpZiAobV92aWV3ICYmICFuZXdOb2RlLT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdOb2Rl
LT5hdHRhY2goKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KCkK
K3sKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21t
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKKworICAgIG1fY3VycmVu
dE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOworICAgIGlmIChtX3ZpZXcgJiYg
IW5ld05vZGUtPmF0dGFjaGVkKCkpCisgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworfQorCit2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmREb2N1bWVudCgpCit7CisjaWYgRU5BQkxFKFhIVE1M
TVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCiti
b29sIFhNTERvY3VtZW50UGFyc2VyOjpoYXNFcnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RyZWFtLmhhc0Vycm9yKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRk
KCkKK3sKKyAgICBRU3RyaW5nUmVmIG5hbWUgPSBtX3N0cmVhbS5kdGROYW1lKCk7CisgICAgUVN0
cmluZ1JlZiBwdWJsaWNJZCA9IG1fc3RyZWFtLmR0ZFB1YmxpY0lkKCk7CisgICAgUVN0cmluZ1Jl
ZiBzeXN0ZW1JZCA9IG1fc3RyZWFtLmR0ZFN5c3RlbUlkKCk7CisKKyAgICAvL3FEZWJ1ZygpIDw8
IGR0ZCA8PCBuYW1lIDw8IHB1YmxpY0lkIDw8IHN5c3RlbUlkOworICAgIGlmICgocHVibGljSWQg
PT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4i
KSkKKyAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhI
VE1MIDEuMS8vRU4iKSkKKyAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9
PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikpCisg
ICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBC
YXNpYyAxLjAvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpKQorICAgICAgICB8fCAo
cHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0
aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAg
ICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBN
b2JpbGUgMS4wLy9FTiIpKQorI2VuZGlmCisgICAgICAgKQorICAgICAgICBzZXRJc1hIVE1MRG9j
dW1lbnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90Lgor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3Ry
aW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAg
ICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMC8vRU4iKSkpIHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBI
VE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9y
KGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMg
cm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxN
UERvY3VtZW50KCkpIC8vIGNoZWNrIGlmIHRoZSBNSU1FIHR5cGUgaXMgY29ycmVjdCB3aXRoIHRo
aXMgbWV0aG9kCisgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOworICAgIH0KKyNl
bmRpZgorICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIGRvY3VtZW50KCktPnBh
cnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5hbWUsIHB1Ymxp
Y0lkLCBzeXN0ZW1JZCkpOworCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTQ3M2VkMjMwODJm
MzdkMzkzYThkMTFmMWFkYTE1ZWNjM2MzNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKKworWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpCisgICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1
cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAsIG1fb2xk
R2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3IpCisgICAgLCBtX29sZFN0cnVjdHVyZWRF
cnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQorICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1s
R2VuZXJpY0Vycm9yQ29udGV4dCkKKyNlbmRpZgoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitY
TUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5l
cmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMs
IHZvaWQqIGVycm9yQ29udGV4dCkKKyAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3Vy
cmVudENhY2hlZFJlc291cmNlTG9hZGVyKQorICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHht
bEdlbmVyaWNFcnJvcikKKyAgICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1
cmVkRXJyb3IpCisgICAgLCBtX29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0
KQoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9h
ZGVyOworICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQorICAgICAgICB4bWxTZXRHZW5lcmljRXJy
b3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9yRnVuYyk7CisgICAgaWYgKHN0cnVjdHVy
ZWRFcnJvckZ1bmMpCisgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250
ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKK30KKyNlbmRpZgorCitYTUxEb2N1bWVudFBhcnNl
clNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgpCit7CisgICAgY3VycmVudENhY2hlZFJl
c291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKyNpZiBFTkFCTEUoWFNM
VCkKKyAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdl
bmVyaWNFcnJvckZ1bmMpOworICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJv
ckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyk7CisjZW5kaWYKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMDQwNDNiNDhiMTFlYzViODgzNjBhZTNlMTc5YjVkMWVlMTJkZmZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
clNjb3BlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgWE1MRG9jdW1lbnRQYXJzZXJTY29wZV9oCisjZGVmaW5l
IFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKKyNpZiBFTkFCTEUoWFNMVCkKKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cjsKKworICAgIGNsYXNzIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgeworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShYTUxEb2N1bWVudFBhcnNlclNjb3BlKTsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyKTsKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2VyU2NvcGUoKTsKKworICAg
ICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxv
YWRlcjsKKworI2lmIEVOQUJMRShYU0xUKQorICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
KENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vy
cm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVy
ZWRFcnJvckZ1bmMgPSAwLCB2b2lkKiBlcnJvckNvbnRleHQgPSAwKTsKKyNlbmRpZgorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fb2xkQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI7CisKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVu
YyBtX29sZEdlbmVyaWNFcnJvckZ1bmM7CisgICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMg
bV9vbGRTdHJ1Y3R1cmVkRXJyb3JGdW5jOworICAgICAgICB2b2lkKiBtX29sZEVycm9yQ29udGV4
dDsKKyNlbmRpZgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAo=
</data>
<flag name="commit-queue"
          id="93794"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99365</attachid>
            <date>2011-06-30 14:19:47 -0700</date>
            <delta_ts>2011-06-30 15:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>movexml.patch</filename>
            <type>text/plain</type>
            <size>255077</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk5NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTli
MmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYwZTBiN2JiNC4uMTNlNzg2OGNlYTVlZmViMGI4Mjlk
Yjc0ZWQyNjY4ODE2YzRmYjk3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYyLDYgKzYyLDcg
QEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS93
ZWJzb2NrZXRzIgogICAgICIke1dFQkNPUkVfRElSfS93b3JrZXJzIgogICAgICIke1dFQkNPUkVf
RElSfS94bWwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3htbC9wYXJzZXIiCiAgICAgIiR7SkFWQVND
UklQVENPUkVfRElSfSIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFk
ZXJzIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJIgpAQCAtNjA2LDkgKzYwNyw2IEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAog
ICAgIGRvbS9XaGVlbEV2ZW50LmNwcAogICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwCi0g
ICAgZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICBkb20v
ZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKIApAQCAtMTM4OCw2ICsxMzg2
LDEwIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKICAg
ICB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCiAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5j
cHAKKworICAgIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisgICAgeG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmNwcAogKQogCiBTRVQoV2ViQ29yZV9DU1NfUFJPUEVSVFlfTkFNRVMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA0MTkzNTIyNWRmYmRjMTI1ZmVhZDhjYmUzMGFjODRhNmI3YjlhZDU4Li43ZDg1
ZjMwNjUwNDk0NDllZjYwZTQ0YzMzNjQxYTg1N2YxMjc1NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTc0IEBACisyMDExLTA2LTMwICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBYTUxE
b2N1bWVudFBhcnNlciB0byBuZXcgZm9sZGVyIHhtbC9wYXJzZXIvCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzY2NgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZUNvbW1v
bi52c3Byb3BzOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVy
cy5jbWQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cHVz
aEN1cnJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwb3BD
dXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y2xlYXJD
dXJyZW50Tm9kZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpp
bnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVudGVyVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZXhp
dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVY
SFRNTFBhcnNlckVycm9ySGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OnBhdXNlUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0Ojpj
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBhcnNlckNvbnRleHQ6OlhNTFBhcnNlckNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c2V0SXNYSFRNTERvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppc1hIVE1MRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElzWEhUTUxNUERvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppc1hIVE1MTVBEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6d2VsbEZvcm1lZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29udGV4dCk6CisgICAgICAgICog
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6flBlbmRpbmdDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdD
YWxsYmFja3M6OmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kRW5kRWxlbWVudE5TQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kQ2hhcmFjdGVyc0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZFByb2Nlc3NpbmdJbnN0
cnVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFw
cGVuZENEQVRBQmxvY2tDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJh
Y2tzOjphcHBlbmRDb21tZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6YXBwZW5kSW50ZXJuYWxTdWJzZXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdDYWxsYmFja3M6OmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ2FsbGJhY2s6On5QZW5kaW5nQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVudE5T
Q2FsbGJhY2s6On5QZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjazo6Y2Fs
bCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nRW5kRWxlbWVu
dE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6
UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjazo6flBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NoYXJhY3RlcnNDYWxs
YmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5n
UHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s6On5QZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0
aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGlu
Z1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s6On5QZW5kaW5nQ0RB
VEFCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBl
bmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ0NvbW1lbnRDYWxsYmFjazo6flBlbmRpbmdDb21tZW50Q2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NvbW1lbnRD
YWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5k
aW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjazo6flBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdJbnRlcm5hbFN1
YnNldENhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzZXRCdWZmZXI6Ok9mZnNldEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpPZmZzZXRCdWZmZXI6OnJlYWRPdXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpzd2l0
Y2hUb1VURjE2KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZW5GdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGdW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpjbG9z
ZUZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MUGFyc2VyQ29udGV4dDo6flhNTFBhcnNlckNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0
b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp0b0F0b21pY1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpoYW5k
bGVFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdJbnN0cnVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29tbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnREb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0RWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjplbmRFbGVtZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlcnNI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Y2RhdGFCbG9ja0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tbWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6d2FybmluZ0hhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmF0YWxFcnJvckhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
bm9ybWFsRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZFhIVE1MRW50aXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFhIVE1MRW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEVudGl0eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnREb2N1bWVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kRG9jdW1lbnRIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmludGVybmFsU3Vic2V0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpleHRlcm5h
bFN1YnNldEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6aWdub3JhYmxlV2hpdGVzcGFjZUhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmluaXRpYWxpemVQ
YXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb0Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjp4bWxEb2NQdHJGb3JTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0
ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RW50aXR5UmVzb2x2ZXI6OnJlc29sdmVVbmRlY2xhcmVkRW50aXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbk9uZUJhc2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6YXBwZW5kRnJhZ21lbnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6YXR0
cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlZml4RnJvbVFOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUVsZW1lbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFy
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5k
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VDZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VD
b21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmREb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aGFzRXJyb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKToKKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29w
ZSk6CisKIDIwMTEtMDYtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBjMjBiY2YxNjRmYjliYTE4MGFiYTViNTFhMDUwZDdiYjM0ZDg5MDI1Li41OTEwODBj
NWU5NDA0MWFkNTM4OGZhNzFkYTFlYmQ5YmMyOTI5NzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTEzMjQsMTEgKzEzMjQsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9XaW5k
b3dFdmVudENvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250
ZXh0LmggXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21t
YW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXApA
QCAtMzc5MSw2ICszNzg2LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcCBc
CisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUveG1sL0RPTVBh
cnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS94bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggYTBlYWI5NzNjOTJhNGQ3OWM2MjRhM2NhZjg4YWY2ZDlmMDRl
YzNlZC4uYjY3NGQyNmNmNTY0MDY1Y2VkYzZiYjRiMGEwNTA3ZGMyMmZkMTQxNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtNTU4LDcgKzU1OCw2IEBACiAgICAgICAgICAgICAnZG9tL1VzZXJHZXN0dXJl
SW5kaWNhdG9yLmgnLAogICAgICAgICAgICAgJ2RvbS9Vc2VyVHlwaW5nR2VzdHVyZUluZGljYXRv
ci5oJywKICAgICAgICAgICAgICdkb20vVmlld3BvcnRBcmd1bWVudHMuaCcsCi0gICAgICAgICAg
ICAnZG9tL1hNTERvY3VtZW50UGFyc2VyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgn
LApAQCAtMjYzNywxMSArMjYzNiw2IEBACiAgICAgICAgICAgICAnZG9tL1doZWVsRXZlbnQuaCcs
CiAgICAgICAgICAgICAnZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAnLAogICAgICAgICAgICAg
J2RvbS9XaW5kb3dFdmVudENvbnRleHQuaCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50
UGFyc2VyLmNwcCcsCi0gICAgICAgICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCcsCi0gICAgICAg
ICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwJywKLSAgICAgICAgICAgICdkb20v
WE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICdkb20vZGVmYXVsdC9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9kZWZhdWx0L1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuY3BwJywKQEAgLTYxMjcsNiArNjEyMSwxMiBAQAogICAgICAgICAgICAgJ3dv
cmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAnLAor
ICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaCcsCisgICAgICAgICAg
ICAneG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwJywKKyAgICAgICAgICAg
ICd4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwJywKKyAgICAgICAgICAgICd4bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwJywKKyAgICAgICAgICAgICd4bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCcsCiAgICAgICAgICAgICAneG1sL0RPTVBhcnNl
ci5jcHAnLAogICAgICAgICAgICAgJ3htbC9ET01QYXJzZXIuaCcsCiAgICAgICAgICAgICAneG1s
L05hdGl2ZVhQYXRoTlNSZXNvbHZlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBiYzEwNmY2NGU5
M2Q4YWYwZjBkOThhYjVmY2RiMWYwNTY2YjAxMTg3Li43ZTRmNDE4MTM3N2I0Y2I3Yjk0YTUzNDdh
MWVkODI2N2UxNzI4ZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTY0LDcgKzU2NCw2IEBAIFNPVVJD
RVMgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIFwKICAgICBkb20vV2hl
ZWxFdmVudC5jcHAgXAogICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwIFwKLSAgICBkb20v
WE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAgXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwIFwKICAg
ICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXApAQCAtMTE5Niw3ICsxMTk1
LDggQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAgICAgeG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAgICAgeG1sL1hNTEh0
dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCi0gICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCisgICAgeG1s
L1hNTFNlcmlhbGl6ZXIuY3BwIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNw
cCAKIAogSEVBREVSUyArPSBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsLmggXApAQCAtMTU0Nyw3ICsxNTQ3LDYgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL1dl
YktpdEFuaW1hdGlvbkV2ZW50LmggXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBc
CiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2VyLmggXAog
ICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oIFwKQEAg
LTI0OTEsNiArMjQ5MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHdvcmtlcnMvV29ya2VyUnVuTG9v
cC5oIFwKICAgICB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oIFwKICAgICB3b3JrZXJzL1dv
cmtlclRocmVhZC5oIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXAogICAg
IHhtbC9ET01QYXJzZXIuaCBcCiAgICAgeG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIFwKICAg
ICB4bWwvWE1MSHR0cFJlcXVlc3QuaCBcCkBAIC0yNTkxLDcgKzI1OTEsNyBAQCBTT1VSQ0VTICs9
IFwKICAgICBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAKIAogIWNvbnRhaW5zKERFRklORVMsIFdU
Rl9VU0VfTElCWE1MMj0xKSB7Ci0gICAgU09VUkNFUyArPSBkb20vWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHAKKyAgICBTT1VSQ0VTICs9IHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAK
IH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MSkgewpAQCAt
MzEwMiw4ICszMTAyLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkgewogICAg
ICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuY3BwIFwKICAgICAgICAgICAgIHhtbC9YU0xUVW5p
Y29kZVNvcnQuY3BwIFwKICAgICAgICAgICAgIHhtbC9YTUxUcmVlVmlld2VyLmNwcCBcCi0gICAg
ICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCi0gICAgICAgICAgICBk
b20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKyAgICAgICAgICAgIHhtbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisgICAgICAgICAgICB4bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICAgICAgICAgIEhFQURFUlMgKz0gXAogICAgICAg
ICAgICAgICAgIHhtbC9YU0xJbXBvcnRSdWxlLmggXApAQCAtMzExMSw3ICszMTExLDcgQEAgY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkgewogICAgICAgICAgICAgICAgIHhtbC9YU0xJ
bXBvcnRSdWxlLmggXAogICAgICAgICAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQuaCBcCiAg
ICAgICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuaCBcCi0gICAgICAgICAgICAgICAgZG9t
L1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorICAgICAgICAgICAgICAgIHhtbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5oCiAKICAgICB9IGVsc2UgewogICAgICAgICBTT1VSQ0VTICs9
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NmIzMjgyNzI1MzM4NDY3ZWI0MzFmMWIwM2FiNTI2ZjJjY2QyOWI4Ni4uODlmNmE2NTEyOTE1NzA2
NmZiNmUzOTQyZTViNzdjYjBhYjhlZjQ2MyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyMzEzLDYgKzQyMzEzLDEyNiBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ceG1sXFhTTFRVbmljb2RlU29ydC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKwkJ
CTxGaWx0ZXIKKwkJCQlOYW1lPSJwYXJzZXIiCisJCQkJPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCisJCQkJCT4KKwkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NG
TGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhN
TERvY3VtZW50UGFyc2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4
bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIgorCQkJCQk+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFz
ZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4KIAkJPC9G
aWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9ImRvbSIKQEAgLTQ5MTI5LDEyMiArNDkyNDksNiBA
QAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdpbmRvd0V2ZW50Q29udGV4dC5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1l
bnRQYXJzZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
RGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJ
CTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVh
c2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0J
CQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
Ci0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJ
CS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJ
CQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
Ci0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJ
CS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVy
CiAJCQlOYW1lPSJ3b3JrZXJzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzCmluZGV4IGRhNmUyMWZhZWQwODkwZGZlMjkzNDQ5MWQ0
NGNjMWM3YTM1MDVhYzkuLmU5NWI4N2MzOWVlOTJlNmVhZmE1ODlhYzA3M2NiYTZkYzliMzFjM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24u
dnNwcm9wcworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9u
LnZzcHJvcHMKQEAgLTcsNyArNyw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERp
cikuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGJyaWRnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGNzcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cZmlsZWFwaSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVy
aW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcbWF0aG1sJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHJlbmRlcmluZ1xzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdz
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xnZW5lcmljJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
YmluZGluZ3NcanNcc3BlY2lhbGl6YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRv
bSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGhpc3RvcnkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWwmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxodG1sXHBhcnNlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxzaGFk
b3cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cbG9hZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXBw
Y2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbG9hZGVyXGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJc
aWNvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbWF0aG1sJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxub3RpZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdl
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxhbmltYXRpb24mcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG1vY2smcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXHNxbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
d2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrXHdpbiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGlj
c1xjYSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVy
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xh
cm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBl
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFuc2Zvcm1z
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0JnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0XHRyYW5zY29kZXImcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ceG1sJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcV2ViQ29yZVxE
ZXJpdmVkU291cmNlcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2lucyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2luc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHN2Z1xhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGlj
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXHByb3BlcnRpZXMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHRlc3RpbmcmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHdtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3RvcmFn
ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd2Vic29ja2V0cyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cd29ya2VycyZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
aW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2
YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEphdmFTY3Jp
cHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZh
dGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndhcmRpbmdI
ZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxzcWxpdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGVcemxpYiZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJl
Y3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxhY2Nlc3NpYmlsaXR5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3NpYmlsaXR5
XHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxicmlkZ2VcYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGpz
YyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cY3NzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxlZGl0aW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxmaWxlYXBpJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHJlbmRlcmluZ1xtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRlcmluZ1xz
dHlsZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN2ZyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYmluZGluZ3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJp
bmRpbmdzXGdlbmVyaWMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqc1xzcGVjaWFsaXphdGlvbiZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxk
b21cZGVmYXVsdCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caGlzdG9yeSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5caHRtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxj
YW52YXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxccGFyc2VyJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxodG1sXHNoYWRvdyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
aW5zcGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXImcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cbG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNo
aXZlXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcY2FjaGUmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxpY29uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG5vdGlmaWNhdGlvbnMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBh
Z2VcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
bW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5l
dHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
YXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
YXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJh
bnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxX
ZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5z
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3Zn
XGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGllcyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVzdGluZyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNs
dWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVc
SmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cRm9y
d2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3Jl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7
OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVfM0RfUkVOREVSSU5HO1dFQkNPUkVfQ09OVEVY
VF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBpbGVkSGVhZGVy
VGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKaW5kZXggY2E0ZDhmMDRmMzYy
MTA1ZTU3MmYxNzYxYTY0NTFkZDViMDZlYmRiZC4uZGFkNWFkZjM5MmI2YTdkNzQ3ZTk4MTY3MWJm
MzI5M2EzOWU4OWZmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
Y29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCkBAIC02Niw2ICs2Niw3IEBAIHhjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlxyZW5kZXJpbmdcc3R5bGVcKi5oIiAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiVcaW5jbHVkCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccmVuZGVyaW5nXHN2
Z1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAv
eSAvZCAiJVByb2plY3REaXIlLi5cZWRpdGluZ1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZG9tXCouaCIg
IiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKK3hjb3B5IC95IC9kICIl
UHJvamVjdERpciUuLlx4bWxccGFyc2VyXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGlu
Y2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlx4bWxcKi5oIiAiJUNP
TkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9q
ZWN0RGlyJS4uXHN2Z1xhbmltYXRpb25cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5j
bHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXHN2Z1xwcm9wZXJ0aWVz
XCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNzk0
MWYwZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi45MTc1ZmRjMjk4NWE4NjFmZDAw
ZGIwNzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0NjI4QTEw
M0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8q
IE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERC
IC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50
cnkuaCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwM0Yx
RkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERCMzAwMzVB
OTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1
bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IH07
CisJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMx
ODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi87IH07
CisJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg1
MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsgfTsKKwkJ
MDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2MTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1MkJGQ0U5
MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQz
MzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VCMTI4QUJG
MjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBH
ZW9sb2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlE
RjEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJCTUyMUQ0
NkY4MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxS
aW5nLmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0
RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUzMjVFNEQ4
MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NG
bGV4VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmll
ZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1
NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURC
RDEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0xNDgyLDgg
KzE0ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjIzMTMx
REI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEzMURCOTZE
MDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5j
cHAgKi87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURC
OTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2QUMxMDA5
RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUz
RiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRN
TENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICovOyB9Owog
CQk1RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3
REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsg
fTsKIAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4N0JCODIx
MUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpAQCAtMzA0
Myw3ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIz
RjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyog
VGV4dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29k
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5
M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5n
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkz
RjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYz
NUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQw
MkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5n
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2
M0EwMkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENh
Y2hlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3LDYgQEAK
IAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2
MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFC
QyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJDMDgyNDVF
NTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1M
RG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlBQkMgLyog
UmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5j
cHAgKi87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUY4MDY5
NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5M0YxOUFF
NjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3
MSAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3LDExIEBA
CiAJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAv
KiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
cmlnaW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDNGMUZF
OTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2N0YwMDM1
QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
MEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNCQTg2N0Yw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1
bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4
MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgcGF0
aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVudE1v
Y2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFENDZGNzEx
QUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5h
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVk
TmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1QTU3NEYy
MzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUE1NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90
ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2
RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQx
NUUzQUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYgLyogV2Vi
Q29yZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAvKiBXZWJD
b3JlRXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAvKiBFeHBv
cnRGaWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9F
eHBvcnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKQEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8q
IFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRFNDQ3
NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYwMTg2MzVD
QSAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVD
QSAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkxMjUxRjEy
RDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAv
KiBCdXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
NzAwLDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNCQTg2N0Yw
MDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5j
cHAgKi8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2Vy
LmggKi8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNlcjsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQxMURCOUM4
QiAvKiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4
bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTAwQjkz
MTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThEMThFNzAw
MjI5NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAwMjI5NDdE
IC8qIERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAvKiBET01Q
YXJzZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFGNzA5QzI4
Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdCMzA0MTAw
MEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1NjcxMjdCMzA0
MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5MDJERTQ0
NzYwMTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0QzMEEwMkRF
NDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBGN0EwRTgw
MURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0JCQkJNUQx
NUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAot
CQkJCTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0yMzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdy
YXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNC
MjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkzMThDMTNC
QThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5OTE4RiAvKiBYTUxIdHRwUmVxdWVzdEV4
Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8q
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc5Niw5
ICsyNTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5
RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3Vt
ZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU0QzUwRjdCMEU4MDFERjMwMDk4MzJB
MCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUQx
NUUzQUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxOEIx
M0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4
RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCAxMWY3MDRlMTI1NDhjYTRmNTFm
NmQyMWE4Y2M5ZGQ4YjUyNDE4Y2ZkLi5lMmU0YmFhZDFiYjQyOTg2ZjA1ZjgwYTE2NzRiZDBjNDU2
YWIzMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKQEAgLTE0Miw1ICsxNDIsMyBA
QAogI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5jcHAiCiAjaW5jbHVkZSAiV2hlZWxF
dmVudC5jcHAiCiAjaW5jbHVkZSAiV2luZG93RXZlbnRDb250ZXh0LmNwcCIKLSNpbmNsdWRlICJY
TUxEb2N1bWVudFBhcnNlci5jcHAiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5j
cHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2Mzdi
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChz
YW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgotCi0jaW5j
bHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVk
ZSAiQ29tbWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbWFnZUxvYWRlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291
cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50
LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1jb25zdCBpbnQgbWF4RXJyb3JzID0g
MjU7Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZShDb250YWluZXJO
b2RlKiBuKQotewotICAgIEFTU0VSVChuKTsKLSAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7Ci0g
ICAgaWYgKG4gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbi0+cmVmKCk7Ci0gICAgbV9jdXJyZW50
Tm9kZVN0YWNrLmFwcGVuZChtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnROb2RlID0gbjsK
LSAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSA+IG1heERPTVRyZWVEZXB0aCkKLSAg
ICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFeGNlc3NpdmUgbm9kZSBuZXN0aW5nLiIsIGxpbmVO
dW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
b3BDdXJyZW50Tm9kZSgpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnROb2RlKQotICAgICAgICByZXR1
cm47Ci0gICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkpOwotCi0gICAgaWYgKG1f
Y3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYo
KTsKLQotICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlU3RhY2subGFzdCgpOwotICAg
IG1fY3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCi17Ci0gICAgaWYgKG1fY3VycmVudE5vZGUg
JiYgbV9jdXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQotICAgICAgICBtX2N1cnJlbnROb2RlLT5k
ZXJlZigpOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwotICAgIG1fbGVhZlRleHROb2RlID0gMDsK
LQotICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpKSB7IC8vIEFib3J0ZWQgcGFyc2lu
Zy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkgLSAx
OyBpICE9IDA7IC0taSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1tpXS0+ZGVyZWYo
KTsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFja1swXSAmJiBtX2N1cnJlbnROb2RlU3Rh
Y2tbMF0gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1swXS0+
ZGVyZWYoKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrLmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcykKLXsKLSAgICBTdHJpbmcgcGFyc2VT
dHJpbmcgPSBzLnRvU3RyaW5nKCk7Ci0KLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gfHwgIW1f
c2F3Rmlyc3RFbGVtZW50KQotICAgICAgICBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtICs9
IHBhcnNlU3RyaW5nOwotCi0gICAgaWYgKGlzU3RvcHBlZCgpIHx8IG1fc2F3WFNMVHJhbnNmb3Jt
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAg
bV9wZW5kaW5nU3JjLmFwcGVuZChzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRv
V3JpdGUocy50b1N0cmluZygpKTsKLQotICAgIC8vIEFmdGVyIHBhcnNpbmcsIGdvIGFoZWFkIGFu
ZCBkaXNwYXRjaCBpbWFnZSBiZWZvcmVsb2FkIGV2ZW50cy4KLSAgICBJbWFnZUxvYWRlcjo6ZGlz
cGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgaGFuZGxlRXJyb3IodHlwZSwgbSwgVGV4
dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJl
ciksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIpKSk7
Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKEVycm9yVHlwZSB0eXBl
LCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKQotewotICAgIGlmICh0eXBl
ID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJyb3JQb3Np
dGlvbi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9j
b2x1bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdl
cyArPSAid2FybmluZyBvbiBsaW5lICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5tX2xpbmUu
b25lQmFzZWRJbnQoKSkgKyAiIGF0IGNvbHVtbiAiICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24u
bV9jb2x1bW4ub25lQmFzZWRJbnQoKSkgKyAiOiAiICsgbTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgZmF0YWw6Ci0gICAgICAgICAgICBjYXNlIG5vbkZhdGFsOgot
ICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSAiZXJyb3Igb24gbGluZSAiICsgU3Ry
aW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4g
IiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjog
IiArIG07Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xhc3RFcnJvclBvc2l0aW9uID0gcG9zaXRp
b247Ci0gICAgICAgICsrbV9lcnJvckNvdW50OwotICAgIH0KLQotICAgIGlmICh0eXBlICE9IHdh
cm5pbmcpCi0gICAgICAgIG1fc2F3RXJyb3IgPSB0cnVlOwotCi0gICAgaWYgKHR5cGUgPT0gZmF0
YWwpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmVudGVyVGV4dCgpCi17Ci0jaWYgIVVTRShRWE1MU1RSRUFNKQotICAgIEFTU0VSVChtX2J1ZmZl
cmVkVGV4dC5zaXplKCkgPT0gMCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoIW1fbGVhZlRleHROb2Rl
KTsKLSAgICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCAiIik7Ci0g
ICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobV9sZWFmVGV4dE5vZGUuZ2V0KCkpOwot
fQotCi0jaWYgIVVTRShRWE1MU1RSRUFNKQotc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkgCi17IAotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUp
OyAKLX0KLSNlbmRpZgotCi0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0KCkKLXsK
LSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sZWFm
VGV4dE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2xlYWZUZXh0Tm9kZS0+YXBwZW5kRGF0YSh0b1N0
cmluZyhtX2J1ZmZlcmVkVGV4dC5kYXRhKCksIG1fYnVmZmVyZWRUZXh0LnNpemUoKSksIGVjKTsK
LSAgICBWZWN0b3I8eG1sQ2hhcj4gZW1wdHk7Ci0gICAgbV9idWZmZXJlZFRleHQuc3dhcChlbXB0
eSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3ZpZXcgJiYgIW1fbGVhZlRleHROb2RlLT5hdHRhY2hl
ZCgpKQotICAgICAgICBtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoKCk7Ci0KLSAgICBtX2xlYWZUZXh0
Tm9kZSA9IDA7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCgpCi17Ci0gICAg
Y2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpk
ZXRhY2goKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAgICAvLyBY
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIgd2lsbCBkbyBiYWQgdGhpbmdzIHRvIHRoZSBkb2N1bWVu
dCBpZiBkb0VuZCgpIGlzIGNhbGxlZC4KLSAgICAvLyBJIGRvbid0IGJlbGlldmUgWE1MRG9jdW1l
bnRQYXJzZXJRdCBuZWVkcyBkb0VuZCBjYWxsZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuCi0gICAg
QVNTRVJUKCFtX3BhcnNpbmdGcmFnbWVudCk7Ci0KLSAgICBkb0VuZCgpOwotCi0gICAgLy8gZG9F
bmQoKSBjb3VsZCBwcm9jZXNzIGEgc2NyaXB0IHRhZywgdGh1cyBwYXVzaW5nIHBhcnNpbmcuCi0g
ICAgaWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zYXdF
cnJvcikKLSAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgZXhpdFRleHQoKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5n
ZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAgfQotCi0gICAgaWYgKGlzUGFyc2luZygp
KQotICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygpOwotICAgIGRvY3VtZW50KCktPnNldFJl
YWR5U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsKLSAgICBjbGVhckN1cnJlbnROb2RlU3Rh
Y2soKTsKLSAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VS
VCghbV9wYXJzZXJTdG9wcGVkKSBoZXJlLCBzaW5jZSBpdCBkb2VzIG5vdAotICAgIC8vIG1ha2Vz
IHNlbnNlIHRvIGNhbGwgYW55IG1ldGhvZHMgb24gRG9jdW1lbnRQYXJzZXIgb25jZSBpdCdzIGJl
ZW4gc3RvcHBlZC4KLSAgICAvLyBIb3dldmVyLCBGcmFtZUxvYWRlcjo6c3RvcCBjYWxscyBEb2N1
bWVudFBhcnNlcjo6ZmluaXNoIHVuY29uZGl0aW9uYWxseS4KLQotICAgIGlmIChtX3BhcnNlclBh
dXNlZCkKLSAgICAgICAgbV9maW5pc2hDYWxsZWQgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgICAg
ZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCi17
Ci0gICAgcmV0dXJuIG1fZmluaXNoQ2FsbGVkOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxF
bGVtZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKERvY3VtZW50KiBkb2MsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlcykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxl
bWVudCA9IGRvYy0+Y3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAicGFyc2Vy
ZXJyb3IiLCB4aHRtbE5hbWVzcGFjZVVSSSksIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNlOiBwcmU7
IGJvcmRlcjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJnaW46IDFl
bTsgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6IGJsYWNrIik7Ci0KLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gaDMgPSBkb2MtPmNyZWF0ZUVsZW1l
bnQoaDNUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChoMy5nZXQo
KSwgZWMpOwotICAgIGgzLT5hcHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKCJUaGlzIHBh
Z2UgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6IiksIGVjKTsKLQotICAgIFJlZlB0cjxF
bGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKLSAgICBy
ZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChmaXhlZC5nZXQoKSwgZWMpOwotICAgIGZpeGVkLT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZTox
MnB4Iik7Ci0gICAgZml4ZWQtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoZXJyb3JN
ZXNzYWdlcyksIGVjKTsKLQotICAgIGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxz
ZSk7Ci0gICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKLSAgICBo
My0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiQmVsb3cgaXMgYSByZW5kZXJpbmcg
b2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9yLiIpLCBlYyk7Ci0KLSAgICByZXR1cm4g
cmVwb3J0RWxlbWVudDsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0RXJyb3JN
ZXNzYWdlQmxvY2soKQotewotI2lmIFVTRShRWE1MU1RSRUFNKQotICAgIGlmIChtX3BhcnNpbmdG
cmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgLy8gT25lIG9yIG1vcmUgZXJy
b3JzIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjb2RlLiBEaXNwbGF5IGFuIGVycm9y
IGJsb2NrIHRvIHRoZSB1c2VyIGFib3ZlCi0gICAgLy8gdGhlIG5vcm1hbCBjb250ZW50ICh0aGUg
RE9NIHRyZWUgaXMgY3JlYXRlZCBtYW51YWxseSBhbmQgaW5jbHVkZXMgbGluZS9jb2wgaW5mbyBy
ZWdhcmRpbmcKLSAgICAvLyB3aGVyZSB0aGUgZXJyb3JzIGFyZSBsb2NhdGVkKQotCi0gICAgLy8g
Q3JlYXRlIGVsZW1lbnRzIGZvciBkaXNwbGF5Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxl
bWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKLSAgICAgICAg
ZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7Ci0gICAgICAgIFJlZlB0cjxF
bGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwot
ICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBkb2N1
bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwotICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGVs
c2UgaWYgKGRvY3VtZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05h
bWVzcGFjZVVSSSkgewotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1
bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIFJlZlB0cjxFbGVt
ZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwotICAg
ICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBib2R5LT5h
cHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQsIGVjKTsKLSAgICAgICAgZG9jdW1lbnQtPmFwcGVu
ZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Ci0gICAgICAgIGRvY3VtZW50RWxlbWVudCA9
IGJvZHkuZ2V0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVs
ZW1lbnQgPSBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKGRvY3VtZW50LCBtX2Vycm9yTWVz
c2FnZXMpOwotICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVsZW1lbnQs
IGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7Ci0jaWYgRU5BQkxFKFhTTFQpCi0g
ICAgaWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChwVGFnLCBm
YWxzZSk7Ci0gICAgICAgIHBhcmFncmFwaC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIndoaXRl
LXNwYWNlOiBub3JtYWwiKTsKLSAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZChkb2N1bWVu
dC0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3Vs
dCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBn
aXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpLCBlYyk7Ci0gICAgICAgIHJl
cG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKHBhcmFncmFwaC5yZWxlYXNlKCksIGVjKTsKLSAgICB9
Ci0jZW5kaWYKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotfQotCi12b2lk
IFhNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogdW51c2Vk
UmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51c2VkUmVz
b3VyY2UgPT0gbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wZW5kaW5nU2NyaXB0LT5h
Y2Nlc3NDb3VudCgpID4gMCk7Ci0KLSAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUobV9w
ZW5kaW5nU2NyaXB0LmdldCgpKTsKLSAgICBib29sIGVycm9yT2NjdXJyZWQgPSBtX3BlbmRpbmdT
Y3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKLSAgICBib29sIHdhc0NhbmNlbGVkID0gbV9wZW5kaW5n
U2NyaXB0LT53YXNDYW5jZWxlZCgpOwotCi0gICAgbV9wZW5kaW5nU2NyaXB0LT5yZW1vdmVDbGll
bnQodGhpcyk7Ci0gICAgbV9wZW5kaW5nU2NyaXB0ID0gMDsKLQotICAgIFJlZlB0cjxFbGVtZW50
PiBlID0gbV9zY3JpcHRFbGVtZW50OwotICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0KLSAgICBT
Y3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGUuZ2V0KCkpOwot
ICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLQotICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFj
aCB0aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2VwdCBhbGl2ZSBldmVuIGlmIGRldGFjaGVk
LgotICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKLSAgICAKLSAg
ICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0Y2hFcnJv
ckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIXdhc0NhbmNlbGVkKSB7Ci0gICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgIHNjcmlwdEVsZW1lbnQt
PmRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFbGVtZW50ID0gMDsK
LQotICAgIGlmICghaXNEZXRhY2hlZCgpICYmICFtX3JlcXVlc3RpbmdTY3JpcHQpCi0gICAgICAg
IHJlc3VtZVBhcnNpbmcoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5n
Rm9yU2NyaXB0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1NjcmlwdDsKLX0KLQot
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJzaW5nKCkKLXsKLSAgICBpZiAobV9wYXJz
aW5nRnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyc2VyUGF1c2VkID0gdHJ1
ZTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KGNv
bnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBj
b250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCi17Ci0gICAgaWYgKCFjaHVuay5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIEhUTUw1IFhNTCBGcmFn
bWVudCBwYXJzaW5nIGFsZ29yaXRobToKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3Bl
Y3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUteGh0bWwtc3ludGF4Lmh0bWwj
eG1sLWZyYWdtZW50LXBhcnNpbmctYWxnb3JpdGhtCi0gICAgLy8gRm9yIG5vdyB3ZSBoYXZlIGEg
aGFjayBmb3Igc2NyaXB0L3N0eWxlIGlubmVySFRNTCBzdXBwb3J0OgotICAgIGlmIChjb250ZXh0
RWxlbWVudCAmJiAoY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNjcmlw
dFRhZykgfHwgY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFn
KSkpIHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlckFkZENoaWxkKGZyYWdtZW50LT5kb2N1bWVu
dCgpLT5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IFhNTERvY3VtZW50UGFy
c2VyOjpjcmVhdGUoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9u
KTsKLSAgICBib29sIHdlbGxGb3JtZWQgPSBwYXJzZXItPmFwcGVuZEZyYWdtZW50U291cmNlKGNo
dW5rKTsKLSAgICAvLyBEbyBub3QgY2FsbCBmaW5pc2goKS4gIEN1cnJlbnQgZmluaXNoKCkgYW5k
IGRvRW5kKCkgaW1wbGVtZW50YXRpb25zIHRvdWNoIHRoZSBtYWluIERvY3VtZW50L2xvYWRlcgot
ICAgIC8vIGFuZCBjYW4gY2F1c2UgY3Jhc2hlcyBpbiB0aGUgZnJhZ21lbnQgY2FzZS4KLSAgICBw
YXJzZXItPmRldGFjaCgpOyAvLyBBbGxvd3MgfkRvY3VtZW50UGFyc2VyIHRvIGFzc2VydCBpdCB3
YXMgZGV0YWNoZWQgYmVmb3JlIGRlc3RydWN0aW9uLgotICAgIHJldHVybiB3ZWxsRm9ybWVkOyAv
LyBhcHBlbmRGcmFnbWVudFNvdXJjZSgpJ3Mgd2VsbEZvcm1lZCBpcyBtb3JlIHBlcm1pc3NpdmUg
dGhhbiB3ZWxsRm9ybWVkKCkuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNhY2RkMjVjNTVkYzAzNWI4ZjMyYTc0MTc1YTQ2ZDk4OWVlYjI3NWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBYTUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKLQotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VI
YW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKLSNpbmNs
dWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi0jaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJp
bmcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRhaW5lck5v
ZGU7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNs
YXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1j
bGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOwotY2xhc3MgVGV4dDsKLQot
I2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGlj
IFJlZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNB
WEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNl
cih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7Ci0gICAgICAgIH5YTUxQYXJzZXJD
b250ZXh0KCk7Ci0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgWE1MUGFyc2VyQ29udGV4
dCh4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCi0gICAgICAgICAgICA6IG1fY29udGV4dChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2Nv
bnRleHQ7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBw
dWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQq
IGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKLSAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRl
KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVy
bWlzc2lvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7Ci0K
LSAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tzOgotICAgICAgICBlbnVtIEVycm9yVHlw
ZSB7IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9OwotICAgICAgICB2b2lkIGhhbmRsZUVycm9y
KEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1
bW5OdW1iZXIpOwotICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hh
ciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7Ci0KLSAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9j
dW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQotICAg
ICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3Vt
ZW50OyB9Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9j
dW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9Ci0g
ICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxN
UERvY3VtZW50OyB9Ci0jZW5kaWYKLQotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50
RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVu
dCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2Vk
IGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KLSAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3Jt
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQotCi0gICAgICAgIFRleHRQb3NpdGlv
bjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0
aW9uT25lQmFzZWQoKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZl
cnNpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBYTUxEb2N1bWVu
dFBhcnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKLSAgICAgICAgWE1MRG9jdW1lbnRQ
YXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24pOwotCi0gICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKLSAgICAgICAgdmlydHVh
bCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGZpbmlzaCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7
Ci0gICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAgICAgaW50IGNv
bHVtbk51bWJlcigpIGNvbnN0OwotCi0gICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGll
bnQKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7
Ci0KLSAgICAgICAgdm9pZCBlbmQoKTsKLQotICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOwot
ICAgICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKLQotICAgICAgICBib29sIGFwcGVuZEZyYWdt
ZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi1wcml2YXRl
OgotICAgICAgICB2b2lkIHBhcnNlKCk7Ci0gICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOwot
ICAgICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VFbmRF
bGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQg
cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7
Ci0gICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQo
KTsKLSAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOwotICAgICAgICBib29sIGhhc0Vycm9yKCkgY29u
c3Q7Ci0jZWxzZQotcHVibGljOgotICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FY
Ci0gICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9s
aXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOwotICAgICAgICB2b2lkIHN0YXJ0
RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1s
UHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJf
YXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJp
YnV0ZXMpOwotICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOwotICAgICAgICB2b2lkIGNoYXJh
Y3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc2lu
Z0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7
Ci0gICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKLSAg
ICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOwotICAgICAgICB2b2lkIHN0YXJ0
RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2Rpbmcs
IGludCBzdGFuZGFsb25lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxD
aGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0
ZW1JRCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKLSNlbmRpZgotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1
bmsgPSBDU3RyaW5nKCkpOwotCi0gICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5l
ck5vZGUqKTsKLSAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICB2b2lkIGNs
ZWFyQ3VycmVudE5vZGVTdGFjaygpOwotCi0gICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdl
QmxvY2soKTsKLQotICAgICAgICB2b2lkIGVudGVyVGV4dCgpOwotICAgICAgICB2b2lkIGV4aXRU
ZXh0KCk7Ci0KLSAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2
b2lkIGRvRW5kKCk7Ci0KLSAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7Ci0KLSAgICAgICAgU3Ry
aW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07Ci0KLSNpZiBVU0UoUVhNTFNUUkVBTSkK
LSAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKLSAgICAgICAgYm9vbCBtX3dyb3Rl
VGV4dDsKLSNlbHNlCi0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKLSAgICAgICAg
UmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgT3duUHRyPFBlbmRp
bmdDYWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKLSAgICAgICAgVmVjdG9yPHhtbENoYXI+
IG1fYnVmZmVyZWRUZXh0OwotI2VuZGlmCi0gICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVu
dE5vZGU7Ci0gICAgICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNr
OwotCi0gICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKLQotICAgICAgICBib29s
IG1fc2F3RXJyb3I7Ci0gICAgICAgIGJvb2wgbV9zYXdDU1M7Ci0gICAgICAgIGJvb2wgbV9zYXdY
U0xUcmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAgICAgIGJv
b2wgbV9pc1hIVE1MRG9jdW1lbnQ7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGJvb2wg
bV9pc1hIVE1MTVBEb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
bjsKLSNlbmRpZgotCi0gICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7Ci0gICAgICAgIGJvb2wg
bV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOwotCi0gICAg
ICAgIGludCBtX2Vycm9yQ291bnQ7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQ
b3NpdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKLQotICAgICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKLSAgICAgICAg
UmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgVGV4dFBvc2l0aW9uMSBt
X3NjcmlwdFN0YXJ0UG9zaXRpb247Ci0KLSAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsK
LSAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKLQotICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVz
cGFjZU1hcDsKLSAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3Bh
Y2VNYXA7Ci0gICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7Ci0gICAgICAgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Ci0gICAgfTsK
LQotI2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291
cmNlTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKLSNl
bmRpZgotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3Ry
aW5nJiwgYm9vbCYgYXR0cnNPSyk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZjM5
ZmI0ZWM3ZGVlMDcwYTgzNTE1YWUwYzRmNDEwZjZiNzI4NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgPHBta0Bwb3N0LmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUg
IkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNv
bW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCi0j
aW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJy
b3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCi0jaW5jbHVkZSAi
WE1MTlNOYW1lcy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKLSNpbmNs
dWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShYU0xUKQotI2lu
Y2x1ZGUgIlhNTFRyZWVWaWV3ZXIuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0jaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIK
LSNlbmRpZgotCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVu
ZGluZ0NhbGxiYWNrcyk7Ci1wdWJsaWM6Ci0gICAgflBlbmRpbmdDYWxsYmFja3MoKSB7IH0KLSAg
ICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nQ2FsbGJhY2tzPiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2FsbGJhY2tzKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBhcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHht
bExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxV
UkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNlcywgaW50IG5iX2F0dHJpYnV0ZXMsIGludCBu
Yl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBhdHRyaWJ1dGVzKQotICAgIHsKLSAgICAgICAg
T3duUHRyPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRy
KG5ldyBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2st
PnhtbExvY2FsTmFtZSA9IHhtbFN0cmR1cCh4bWxMb2NhbE5hbWUpOwotICAgICAgICBjYWxsYmFj
ay0+eG1sUHJlZml4ID0geG1sU3RyZHVwKHhtbFByZWZpeCk7Ci0gICAgICAgIGNhbGxiYWNrLT54
bWxVUkkgPSB4bWxTdHJkdXAoeG1sVVJJKTsKLSAgICAgICAgY2FsbGJhY2stPm5iX25hbWVzcGFj
ZXMgPSBuYl9uYW1lc3BhY2VzOwotICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlcyA9IHN0YXRp
Y19jYXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9uYW1lc3Bh
Y2VzICogMikpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX25hbWVzcGFjZXMgKiAy
IDsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2stPm5hbWVzcGFjZXNbaV0gPSB4bWxTdHJkdXAo
bmFtZXNwYWNlc1tpXSk7Ci0gICAgICAgIGNhbGxiYWNrLT5uYl9hdHRyaWJ1dGVzID0gbmJfYXR0
cmlidXRlczsKLSAgICAgICAgY2FsbGJhY2stPm5iX2RlZmF1bHRlZCA9IG5iX2RlZmF1bHRlZDsK
LSAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXMgPSBzdGF0aWNfY2FzdDx4bWxDaGFyKio+KHht
bE1hbGxvYyhzaXplb2YoeG1sQ2hhciopICogbmJfYXR0cmlidXRlcyAqIDUpKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAgICAgIC8v
IEVhY2ggYXR0cmlidXRlIGhhcyA1IGVsZW1lbnRzIGluIHRoZSBhcnJheToKLSAgICAgICAgICAg
IC8vIG5hbWUsIHByZWZpeCwgdXJpLCB2YWx1ZSBhbmQgYW4gZW5kIHBvaW50ZXIuCi0KLSAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQotICAgICAgICAgICAgICAgIGNhbGxi
YWNrLT5hdHRyaWJ1dGVzW2kgKiA1ICsgal0gPSB4bWxTdHJkdXAoYXR0cmlidXRlc1tpICogNSAr
IGpdKTsKLQotICAgICAgICAgICAgaW50IGxlbiA9IGF0dHJpYnV0ZXNbaSAqIDUgKyA0XSAtIGF0
dHJpYnV0ZXNbaSAqIDUgKyAzXTsKLQotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNb
aSAqIDUgKyAzXSA9IHhtbFN0cm5kdXAoYXR0cmlidXRlc1tpICogNSArIDNdLCBsZW4pOwotICAg
ICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyA0XSA9IGNhbGxiYWNrLT5hdHRy
aWJ1dGVzW2kgKiA1ICsgM10gKyBsZW47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2NhbGxiYWNr
cy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEVu
ZEVsZW1lbnROU0NhbGxiYWNrKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChh
ZG9wdFB0cihuZXcgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBhcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikK
LSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrPiBjYWxsYmFj
ayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKTsKLQotICAgICAgICBj
YWxsYmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsKLSAgICAgICAgY2FsbGJhY2stPmxlbiA9
IGxlbjsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKGNv
bnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKLSAgICB7Ci0gICAgICAg
IE93blB0cjxQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRQdHIobmV3IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk7Ci0KLSAg
ICAgICAgY2FsbGJhY2stPnRhcmdldCA9IHhtbFN0cmR1cCh0YXJnZXQpOwotICAgICAgICBjYWxs
YmFjay0+ZGF0YSA9IHhtbFN0cmR1cChkYXRhKTsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBl
bmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENEQVRBQmxv
Y2tDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotICAgIHsKLSAgICAgICAgT3du
UHRyPFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBl
bmRpbmdDREFUQUJsb2NrQ2FsbGJhY2spOwotCi0gICAgICAgIGNhbGxiYWNrLT5zID0geG1sU3Ry
bmR1cChzLCBsZW4pOwotICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVuOwotCi0gICAgICAgIG1f
Y2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQg
YXBwZW5kQ29tbWVudENhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMpCi0gICAgewotICAgICAgICBP
d25QdHI8UGVuZGluZ0NvbW1lbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVu
ZGluZ0NvbW1lbnRDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxTdHJkdXAo
cyk7Ci0KLSAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBhcHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKGNvbnN0IHhtbENo
YXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3Rl
bUlEKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNr
PiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjayk7
Ci0KLSAgICAgICAgY2FsbGJhY2stPm5hbWUgPSB4bWxTdHJkdXAobmFtZSk7Ci0gICAgICAgIGNh
bGxiYWNrLT5leHRlcm5hbElEID0geG1sU3RyZHVwKGV4dGVybmFsSUQpOwotICAgICAgICBjYWxs
YmFjay0+c3lzdGVtSUQgPSB4bWxTdHJkdXAoc3lzdGVtSUQpOwotCi0gICAgICAgIG1fY2FsbGJh
Y2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5k
RXJyb3JDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHht
bENoYXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQotICAgIHsK
LSAgICAgICAgT3duUHRyPFBlbmRpbmdFcnJvckNhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRy
KG5ldyBQZW5kaW5nRXJyb3JDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm1lc3NhZ2Ug
PSB4bWxTdHJkdXAobWVzc2FnZSk7Ci0gICAgICAgIGNhbGxiYWNrLT50eXBlID0gdHlwZTsKLSAg
ICAgICAgY2FsbGJhY2stPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBjYWxsYmFj
ay0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotCi0gICAgICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbEFuZFJlbW92
ZUZpcnN0Q2FsbGJhY2soWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICB7Ci0gICAgICAg
IE93blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0
KCk7Ci0gICAgICAgIGNhbGxiYWNrLT5jYWxsKHBhcnNlcik7Ci0gICAgfQotCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuaXNFbXB0eSgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgUGVuZGluZ0NhbGxiYWNrcygpIHsgfQotCi0gICAgc3RydWN0IFBlbmRpbmdDYWxs
YmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDYWxsYmFjaygpIHsgfQotICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKSA9IDA7Ci0gICAgfTsK
LQotICAgIHN0cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayA6IHB1YmxpYyBQZW5k
aW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxs
YmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sTG9jYWxOYW1lKTsKLSAg
ICAgICAgICAgIHhtbEZyZWUoeG1sUHJlZml4KTsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sVVJJ
KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAqIDI7IGkr
KykKLSAgICAgICAgICAgICAgICB4bWxGcmVlKG5hbWVzcGFjZXNbaV0pOwotICAgICAgICAgICAg
eG1sRnJlZShuYW1lc3BhY2VzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf
YXR0cmlidXRlczsgaSsrKQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsg
aisrKQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXNbaSAqIDUgKyBqXSk7
Ci0gICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcGFyc2VyLT5zdGFydEVsZW1lbnROcyh4bWxMb2NhbE5hbWUsIHhtbFByZWZp
eCwgeG1sVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9uYW1l
c3BhY2VzLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4obmFtZXNwYWNlcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5iX2RlZmF1bHRl
ZCwgY29uc3RfY2FzdDxjb25zdCB4bWxDaGFyKio+KGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHhtbENoYXIqIHhtbExvY2FsTmFtZTsKLSAgICAgICAgeG1sQ2hhciogeG1sUHJl
Zml4OwotICAgICAgICB4bWxDaGFyKiB4bWxVUkk7Ci0gICAgICAgIGludCBuYl9uYW1lc3BhY2Vz
OwotICAgICAgICB4bWxDaGFyKiogbmFtZXNwYWNlczsKLSAgICAgICAgaW50IG5iX2F0dHJpYnV0
ZXM7Ci0gICAgICAgIGludCBuYl9kZWZhdWx0ZWQ7Ci0gICAgICAgIHhtbENoYXIqKiBhdHRyaWJ1
dGVzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrIDog
cHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERv
Y3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+ZW5k
RWxlbWVudE5zKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IFBlbmRpbmdDaGFy
YWN0ZXJzQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmlydHVh
bCB+UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHht
bEZyZWUocyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1
bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXItPmNoYXJh
Y3RlcnMocywgbGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0gICAgICAg
IGludCBsZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0
aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmlydHVhbCB+
UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgeG1sRnJlZSh0YXJnZXQpOwotICAgICAgICAgICAgeG1sRnJlZShkYXRhKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJz
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+cHJvY2Vzc2luZ0luc3RydWN0aW9u
KHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiB0YXJnZXQ7Ci0g
ICAgICAgIHhtbENoYXIqIGRhdGE7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nQ0RBVEFC
bG9ja0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwg
flBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB4bWxG
cmVlKHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1l
bnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLT5jZGF0YUJs
b2NrKHMsIGxlbik7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiBzOwotICAgICAgICBp
bnQgbGVuOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0NvbW1lbnRDYWxsYmFjayA6IHB1
YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nQ29tbWVudENh
bGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgeG1sRnJlZShzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+Y29tbWVudChzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHhtbENoYXIqIHM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nSW50ZXJuYWxT
dWJzZXRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFs
IH5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHhtbEZyZWUobmFtZSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGV4dGVybmFsSUQpOwotICAgICAg
ICAgICAgeG1sRnJlZShzeXN0ZW1JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwYXJzZXItPmludGVybmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIG5hbWU7Ci0gICAgICAgIHhtbENoYXIqIGV4dGVy
bmFsSUQ7Ci0gICAgICAgIHhtbENoYXIqIHN5c3RlbUlEOwotICAgIH07Ci0KLSAgICBzdHJ1Y3Qg
UGVuZGluZ0Vycm9yQ2FsbGJhY2s6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nRXJyb3JDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHht
bEZyZWUobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChY
TUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXIt
PmhhbmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2UpLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MRG9jdW1lbnRQ
YXJzZXI6OkVycm9yVHlwZSB0eXBlOwotICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwotICAgICAg
ICBpbnQgbGluZU51bWJlcjsKLSAgICAgICAgaW50IGNvbHVtbk51bWJlcjsKLSAgICB9OwotCi0g
ICAgRGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKLX07Ci0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW50IGdsb2JhbERlc2Ny
aXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9hZGVyVGhyZWFkID0g
MDsKLQotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCi17Ci0gICAgLy8gT25seSBt
YXRjaCBsb2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdpdGhpbiBY
TUxEb2N1bWVudFBhcnNlciB0byBhdm9pZAotICAgIC8vIGludGVyZmVyaW5nIHdpdGggY2xpZW50
IGFwcGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJldHVybiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIgJiYgY3VycmVudFRocmVhZCgpID09IGxp
YnhtbExvYWRlclRocmVhZDsKLX0KLQotY2xhc3MgT2Zmc2V0QnVmZmVyIHsKLXB1YmxpYzoKLSAg
ICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBiKSA6IG1fYnVmZmVyKGIpLCBtX2N1
cnJlbnRPZmZzZXQoMCkgeyB9Ci0KLSAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIqIG91dHB1dEJ1
ZmZlciwgdW5zaWduZWQgYXNrZWRUb1JlYWQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBieXRl
c0xlZnQgPSBtX2J1ZmZlci5zaXplKCkgLSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAgIHVuc2ln
bmVkIGxlblRvQ29weSA9IG1pbihhc2tlZFRvUmVhZCwgYnl0ZXNMZWZ0KTsKLSAgICAgICAgaWYg
KGxlblRvQ29weSkgewotICAgICAgICAgICAgbWVtY3B5KG91dHB1dEJ1ZmZlciwgbV9idWZmZXIu
ZGF0YSgpICsgbV9jdXJyZW50T2Zmc2V0LCBsZW5Ub0NvcHkpOwotICAgICAgICAgICAgbV9jdXJy
ZW50T2Zmc2V0ICs9IGxlblRvQ29weTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGVuVG9D
b3B5OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7Ci0gICAg
dW5zaWduZWQgbV9jdXJyZW50T2Zmc2V0OwotfTsKLQotc3RhdGljIHZvaWQgc3dpdGNoVG9VVEYx
Nih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCi17Ci0gICAgLy8gSGFjayBhcm91bmQgbGlieG1sMidz
IGxhY2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1hbnVhbGx5Ci0gICAgLy8gcmVz
ZXR0aW5nIHRoZSBlbmNvZGluZyB0byBVVEYtMTYgYmVmb3JlIGV2ZXJ5IGNodW5rLiAgT3RoZXJ3
aXNlIGxpYnhtbAotICAgIC8vIHdpbGwgZGV0ZWN0IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IjxlbmNvZGluZyBuYW1lPiI/PiBibG9ja3MKLSAgICAvLyBhbmQgc3dpdGNoIGVuY29kaW5n
cywgY2F1c2luZyB0aGUgcGFyc2UgdG8gZmFpbC4KLSAgICBjb25zdCBVQ2hhciBCT00gPSAweEZF
RkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICB4bWxTd2l0Y2hFbmNvZGluZyhj
dHh0LCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRSA6IFhN
TF9DSEFSX0VOQ09ESU5HX1VURjE2QkUpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRBbGxvd0V4
dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHVy
bC5zdHJpbmcoKTsKLQotICAgIC8vIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBsaWJ4bWwgYXNr
cyBmb3IgdGhpcyBVUkwsIHRoZQotICAgIC8vICJYTUxfWE1MX0RFRkFVTFRfQ0FUQUxPRyIsIG9u
IGluaXRpYWxpemF0aW9uLgotICAgIGlmICh1cmxTdHJpbmcgPT0gImZpbGU6Ly8vZXRjL3htbC9j
YXRhbG9nIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT24gV2luZG93cywgbGli
eG1sIGNvbXB1dGVzIGEgVVJMIHJlbGF0aXZlIHRvIHdoZXJlIGl0cyBETEwgcmVzaWRlcy4KLSAg
ICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIiwgZmFsc2UpICYmIHVybFN0cmlu
Zy5lbmRzV2l0aCgiL2V0Yy9jYXRhbG9nIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBUaGUgbW9zdCBjb21tb24gRFRELiAgVGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBp
biBoYW1tZXJpbmcgd3d3LnczYy5vcmcKLSAgICAvLyBieSByZXF1ZXN0aW5nIHRoaXMgVVJMIGZv
ciBldmVyeSBYSFRNTCBkb2N1bWVudC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0
dHA6Ly93d3cudzMub3JnL1RSL3hodG1sIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBTaW1pbGFybHksIHRoZXJlIGlzbid0IG11Y2ggcG9pbnQgaW4gcmVxdWVzdGlu
ZyB0aGUgU1ZHIERURC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cu
dzMub3JnL0dyYXBoaWNzL1NWRyIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gVGhlIGxpYnhtbCBkb2Vzbid0IGdpdmUgdXMgYSBsb3Qgb2YgY29udGV4dCBmb3IgZGVj
aWRpbmcgd2hldGhlciB0bwotICAgIC8vIGFsbG93IHRoaXMgcmVxdWVzdC4gIEluIHRoZSB3b3Jz
dCBjYXNlLCB0aGlzIGxvYWQgY291bGQgYmUgZm9yIGFuCi0gICAgLy8gZXh0ZXJuYWwgZW50aXR5
IGFuZCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGNvdWxkIHNpbXBseSByZWFkIHRoZQotICAgIC8v
IHJldHJpZXZlZCBjb250ZW50LiAgSWYgd2UgaGFkIG1vcmUgY29udGV4dCwgd2UgY291bGQgcG90
ZW50aWFsbHkgYWxsb3cKLSAgICAvLyB0aGUgcGFyc2VyIHRvIGxvYWQgYSBEVEQuICBBcyB0aGlu
Z3Mgc3RhbmQsIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIHJvdXRlIGFuZCBhbGxv
dyBzYW1lLW9yaWdpbiByZXF1ZXN0cyBvbmx5LgotICAgIGlmICghWE1MRG9jdW1lbnRQYXJzZXJT
Y29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29w
ZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2Uo
dXJsKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQotewotICAgIEFTU0VS
VChYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOwot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsKLQotICAg
IEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKLQotICAgIGlmICghc2hvdWxkQWxsb3dFeHRlcm5hbExv
YWQodXJsKSkKLSAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOwotCi0gICAgUmVzb3Vy
Y2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOwotCi0KLSAgICB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZSgw
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIHRoZSBvcmlnaW5hbCBnbG9i
YWwgZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgotCi0gICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZUxv
YWRlci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgp
LT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2
ZSB0byBjaGVjayB0aGUgVVJMIGFnYWluIGFmdGVyIHRoZSBsb2FkIHRvIGNhdGNoIHJlZGlyZWN0
cy4KLSAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTk2Mz4uCi0gICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZChyZXNwb25zZS51cmwoKSkp
Ci0gICAgICAgIHJldHVybiAmZ2xvYmFsRGVzY3JpcHRvcjsKLQotICAgIHJldHVybiBuZXcgT2Zm
c2V0QnVmZmVyKGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJlYWRGdW5jKHZvaWQqIGNvbnRleHQs
IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICAvLyBEbyAwLWJ5dGUgcmVhZHMgaW4gY2Fz
ZSBvZiBhIG51bGwgZGVzY3JpcHRvcgotICAgIGlmIChjb250ZXh0ID09ICZnbG9iYWxEZXNjcmlw
dG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE9mZnNldEJ1ZmZlciogZGF0YSA9IHN0YXRp
Y19jYXN0PE9mZnNldEJ1ZmZlcio+KGNvbnRleHQpOwotICAgIHJldHVybiBkYXRhLT5yZWFkT3V0
Qnl0ZXMoYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHdyaXRlRnVuYyh2b2lkKiwgY29u
c3QgY2hhciosIGludCkKLXsKLSAgICAvLyBBbHdheXMganVzdCBkbyAwLWJ5dGUgd3JpdGVzCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xvc2VGdW5jKHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgaWYgKGNvbnRleHQgIT0gJmdsb2JhbERlc2NyaXB0b3IpIHsKLSAgICAgICAgT2Zmc2V0
QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7Ci0gICAg
ICAgIGRlbGV0ZSBkYXRhOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShY
U0xUKQotc3RhdGljIHZvaWQgZXJyb3JGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgLi4uKQotewot
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMg
c29tZXdoZXJlLgotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGRpZEluaXQgPSBmYWxzZTsKLQot
UGFzc1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVTdHJp
bmdQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlckRhdGEpCi17Ci0g
ICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAgICAgICAgeG1s
UmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVuYywgY2xv
c2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBv
cGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2FkZXJUaHJl
YWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwotICAgIH0KLQot
ICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoaGFu
ZGxlcnMsIDAsIDAsIDAsIDApOwotICAgIHBhcnNlci0+X3ByaXZhdGUgPSB1c2VyRGF0YTsKLSAg
ICBwYXJzZXItPnJlcGxhY2VFbnRpdGllcyA9IHRydWU7Ci0gICAgc3dpdGNoVG9VVEYxNihwYXJz
ZXIpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBhcnNlcikp
OwotfQotCi0KLS8vIENodW5rIHNob3VsZCBiZSBlbmNvZGVkIGluIFVURi04Ci1QYXNzUmVmUHRy
PFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcih4
bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgQ1N0cmluZyYg
Y2h1bmspCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsK
LSAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCBy
ZWFkRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3Mo
bWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4
bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVl
OwotICAgIH0KLQotICAgIC8vIGFwcGVuZEZyYWdtZW50U291cmNlKCkgY2hlY2tzIHRoYXQgdGhl
IGxlbmd0aCBkb2Vzbid0IG92ZXJmbG93IGFuIGludC4KLSAgICB4bWxQYXJzZXJDdHh0UHRyIHBh
cnNlciA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoY2h1bmsuZGF0YSgpLCBjaHVuay5sZW5n
dGgoKSk7Ci0KLSAgICBpZiAoIXBhcnNlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBD
b3B5IHRoZSBzYXggaGFuZGxlcgotICAgIG1lbWNweShwYXJzZXItPnNheCwgaGFuZGxlcnMsIHNp
emVvZih4bWxTQVhIYW5kbGVyKSk7Ci0KLSAgICAvLyBTZXQgcGFyc2VyIG9wdGlvbnMuCi0gICAg
Ly8gWE1MX1BBUlNFX05PRElDVDogZGVmYXVsdCBkaWN0aW9uYXJ5IG9wdGlvbi4KLSAgICAvLyBY
TUxfUEFSU0VfTk9FTlQ6IGZvcmNlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMuCi0gICAgeG1sQ3R4
dFVzZU9wdGlvbnMocGFyc2VyLCBYTUxfUEFSU0VfTk9ESUNUIHwgWE1MX1BBUlNFX05PRU5UKTsK
LQotICAgIC8vIEludGVybmFsIGluaXRpYWxpemF0aW9uCi0gICAgcGFyc2VyLT5zYXgyID0gMTsK
LSAgICBwYXJzZXItPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7IC8vIFdlIGFyZSBwYXJz
aW5nIGEgQ09OVEVOVAotICAgIHBhcnNlci0+ZGVwdGggPSAwOwotICAgIHBhcnNlci0+c3RyX3ht
bCA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sIiwgMyk7Ci0gICAg
cGFyc2VyLT5zdHJfeG1sbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgQkFEX0NBU1Qg
InhtbG5zIiwgNSk7Ci0gICAgcGFyc2VyLT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1cChwYXJz
ZXItPmRpY3QsIFhNTF9YTUxfTkFNRVNQQUNFLCAzNik7Ci0gICAgcGFyc2VyLT5fcHJpdmF0ZSA9
IHVzZXJEYXRhOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBh
cnNlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29s
IFhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKQotewotICAgIHJldHVybiB2ZXJzaW9uID09ICIxLjAiOwotfQotCi1YTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZy
YW1lVmlldykKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkKLSAgICAs
IG1fdmlldyhmcmFtZVZpZXcpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fcGVuZGluZ0Nh
bGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKLSAgICAsIG1fY3VycmVudE5vZGUo
ZG9jdW1lbnQpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQotICAgICwgbV9zYXdDU1MoZmFsc2Up
Ci0gICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKLSAgICAsIG1fc2F3Rmlyc3RFbGVtZW50
KGZhbHNlKQotICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCi0jaWYgRU5BQkxFKFhIVE1M
TVApCi0gICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQotICAgICwgbV9oYXNEb2NUeXBl
RGVjbGFyYXRpb24oZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQot
ICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQotICAgICwgbV9maW5pc2hDYWxsZWQoZmFs
c2UpCi0gICAgLCBtX2Vycm9yQ291bnQoMCkKLSAgICAsIG1fbGFzdEVycm9yUG9zaXRpb24oVGV4
dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BlbmRpbmdTY3JpcHQo
MCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1Jhbmdl
UG9zaXRpb24oKSkKLSAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3Jp
cHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLX0KLQotWE1MRG9j
dW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2Ny
aXB0aW5nUGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVu
dC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV9jb250ZXh0KDApCi0gICAg
LCBtX3BlbmRpbmdDYWxsYmFja3MoUGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKCkpCi0gICAgLCBt
X2N1cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1f
c2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nh
d0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lm
IEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAs
IG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBh
dXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmlu
aXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJv
clBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9w
ZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9u
MTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQot
ICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAg
ZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBh
cmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBh
cmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsK
LQotICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgp
OwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwot
ICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFzdCgpOyAhZWxlbVN0YWNr
LmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewotICAgICAgICBpZiAoTmFtZWRO
b2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9PSB4bWxuc0F0b20pCi0gICAgICAgICAg
ICAgICAgICAgIG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuc2V0KGF0dHItPmxvY2FsTmFtZSgpLCBh
dHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IElmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBub3QgaW4gZG9jdW1lbnQgdHJlZSwgdGhlcmUgbWF5
IGJlIG5vIHhtbG5zIGF0dHJpYnV0ZTsganVzdCBkZWZhdWx0IHRvIHRoZSBwYXJlbnQncyBuYW1l
c3BhY2UuCi0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFjZVVSSS5pc051bGwoKSAmJiAhcGFyZW50
RWxlbWVudC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBw
YXJlbnRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0KLQotWE1MUGFyc2VyQ29udGV4dDo6flhN
TFBhcnNlckNvbnRleHQoKQotewotICAgIGlmIChtX2NvbnRleHQtPm15RG9jKQotICAgICAgICB4
bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAgIHhtbEZyZWVQYXJzZXJDdHh0KG1fY29u
dGV4dCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewot
ICAgIC8vIFRoZSBYTUxEb2N1bWVudFBhcnNlciB3aWxsIGFsd2F5cyBiZSBkZXRhY2hlZCBiZWZv
cmUgYmVpbmcgZGVzdHJveWVkLgotICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0
eSgpKTsKLSAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotCi0gICAgLy8gRklYTUU6IG1fcGVu
ZGluZ1NjcmlwdCBoYW5kbGluZyBzaG91bGQgYmUgbW92ZWQgaW50byBYTUxEb2N1bWVudFBhcnNl
ci5jcHAhCi0gICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgbV9wZW5kaW5nU2NyaXB0
LT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvV3Jp
dGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKLXsKLSAgICBBU1NFUlQoIWlzRGV0YWNoZWQo
KSk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0
KCk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBsaWJ4bWwgY29udGV4dCBmcm9tIGRlbGV0aW9uIGR1
cmluZyBhIGNhbGxiYWNrCi0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNvbnRleHQgPSBt
X2NvbnRleHQ7Ci0KLSAgICAvLyBsaWJYTUwgdGhyb3dzIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8g
c3dpdGNoIHRoZSBlbmNvZGluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIGlmIChwYXJzZVN0
cmluZy5sZW5ndGgoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0aGUgcGFy
c2VyIHRvIGRldGFjaCBkdXJpbmcgeG1sUGFyc2VDaHVuawotICAgICAgICAvLyBrZWVwIHRoaXMg
YWxpdmUgdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBkb25lLgotICAgICAgICBSZWZQdHI8WE1MRG9j
dW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgc3dpdGNoVG9VVEYxNihjb250
ZXh0LT5jb250ZXh0KCkpOwotICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgICAgICB4bWxQYXJzZUNodW5r
KGNvbnRleHQtPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocGFyc2VT
dHJpbmcuY2hhcmFjdGVycygpKSwgc2l6ZW9mKFVDaGFyKSAqIHBhcnNlU3RyaW5nLmxlbmd0aCgp
LCAwKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0ICh3aGljaCBtYXkgYmUgcnVuIHVuZGVyIHRo
ZSB4bWxQYXJzZUNodW5rIGNhbGxzdGFjaykgbWF5Ci0gICAgICAgIC8vIGNhdXNlIHRoZSBwYXJz
ZXIgdG8gYmUgc3RvcHBlZCBvciBkZXRhY2hlZC4KLSAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBo
ZXJlPyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291cmNlPwot
ICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5z
YXdFcnJvcigpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVw
b3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQotICAgICAgICBoYW5kbGVFcnJvcihmYXRh
bCwgIkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGluZSwgY29u
dGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
c3RyaW5nKSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0
IHhtbENoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGluZSBBdG9t
aWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6
ZSkKLXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSBBdG9taWNT
dHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nKQotewotICAgIHJldHVy
biBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0
cmluZykpOwotfQotCi1zdHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgewotICAgIGNvbnN0IHhtbENo
YXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci19OwotdHlwZWRlZiBzdHJ1Y3Qg
X3htbFNBWDJOYW1lc3BhY2UgeG1sU0FYMk5hbWVzcGFjZTsKLQotc3RhdGljIGlubGluZSB2b2lk
IGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0IHhtbENo
YXIqKiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfbmFtZXNwYWNlcywgRXhjZXB0aW9uQ29kZSYg
ZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewot
ICAgIHhtbFNBWDJOYW1lc3BhY2UqIG5hbWVzcGFjZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNB
WDJOYW1lc3BhY2UqPihsaWJ4bWxOYW1lc3BhY2VzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IG5iX25hbWVzcGFjZXM7IGkrKykgewotICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUU5h
bWUgPSB4bWxuc0F0b207Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkgPSB0b0F0
b21pY1N0cmluZyhuYW1lc3BhY2VzW2ldLnVyaSk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2VzW2ld
LnByZWZpeCkKLSAgICAgICAgICAgIG5hbWVzcGFjZVFOYW1lID0gInhtbG5zOiIgKyB0b1N0cmlu
ZyhuYW1lc3BhY2VzW2ldLnByZWZpeCk7Ci0gICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0
ZU5TKFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNw
YWNlVVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhj
ZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB7Ci0gICAgY29uc3QgeG1sQ2hhciogbG9jYWxu
YW1lOwotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7
Ci0gICAgY29uc3QgeG1sQ2hhciogdmFsdWU7Ci0gICAgY29uc3QgeG1sQ2hhciogZW5kOwotfTsK
LXR5cGVkZWYgc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB4bWxTQVgyQXR0cmlidXRlczsKLQot
c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0Vs
ZW1lbnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzLCBpbnQgbmJfYXR0cmlidXRl
cywgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gcmVp
bnRlcnByZXRfY2FzdDx4bWxTQVgyQXR0cmlidXRlcyo+KGxpYnhtbEF0dHJpYnV0ZXMpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRlczsgaSsrKSB7Ci0gICAgICAgIGludCB2
YWx1ZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlidXRlc1tpXS5lbmQgLSBhdHRyaWJ1
dGVzW2ldLnZhbHVlKTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJWYWx1ZSA9IHRvQXRvbWlj
U3RyaW5nKGF0dHJpYnV0ZXNbaV0udmFsdWUsIHZhbHVlTGVuZ3RoKTsKLSAgICAgICAgU3RyaW5n
IGF0dHJQcmVmaXggPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnByZWZpeCk7Ci0gICAgICAgIEF0
b21pY1N0cmluZyBhdHRyVVJJID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBBdG9taWNTdHJpbmco
KSA6IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udXJpKTsKLSAgICAgICAgQXRvbWljU3Ry
aW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJpbmcoYXR0
cmlidXRlc1tpXS5sb2NhbG5hbWUpIDogYXR0clByZWZpeCArICI6IiArIHRvU3RyaW5nKGF0dHJp
YnV0ZXNbaV0ubG9jYWxuYW1lKTsKLQotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVO
UyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24p
OwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0
RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1s
UHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3Bh
Y2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioq
IGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJh
Y2tzLT5hcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKHhtbExvY2FsTmFtZSwgeG1sUHJlZml4
LCB4bWxVUkksIG5iX25hbWVzcGFjZXMsIGxpYnhtbE5hbWVzcGFjZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRyaWJ1dGVz
LCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLy8gY2hlY2sgaWYgdGhlIERPQ1RZUEUgRGVj
bGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudCBleGlzdHMKLSAgICBpZiAoIW1faGFzRG9jVHlw
ZURlY2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIHsKLSAgICAg
ICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51
bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0gdG9BdG9t
aWNTdHJpbmcoeG1sTG9jYWxOYW1lKTsKLSAgICBBdG9taWNTdHJpbmcgdXJpID0gdG9BdG9taWNT
dHJpbmcoeG1sVVJJKTsKLSAgICBBdG9taWNTdHJpbmcgcHJlZml4ID0gdG9BdG9taWNTdHJpbmco
eG1sUHJlZml4KTsKLQotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkp
IHsKLSAgICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkpCi0gICAgICAgICAgICB1cmkgPSBtX3By
ZWZpeFRvTmFtZXNwYWNlTWFwLmdldChwcmVmaXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1M
TVApCi0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7
Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYx
XzEtMjAwNjEwMjAtQS5wZGYsCi0gICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0
aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAotICAgICAgICAvLyBlbnN1cmUgdGhl
IG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcK
LSAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKLSAgICAg
ICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKLSAg
ICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdo
dG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJpLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBib29sIGlzRmlyc3RFbGVtZW50ID0gIW1f
c2F3Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKLQotICAgIFF1
YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7Ci0gICAgUmVmUHRyPEVs
ZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVl
KTsKLSAgICBpZiAoIW5ld0VsZW1lbnQpIHsKLSAgICAgICAgc3RvcFBhcnNpbmcoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGhhbmRs
ZUVsZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0KCksIGxpYnhtbE5hbWVzcGFjZXMsIG5i
X25hbWVzcGFjZXMsIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGlmIChlYykgewot
ICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFu
ZGxlRWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sQXR0cmlidXRlcywg
bmJfYXR0cmlidXRlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7
Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBu
ZXdFbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgU2NyaXB0RWxlbWVudCog
c2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBp
ZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBv
c2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5l
d0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkp
OwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5l
d0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQot
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+
aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50
ICYmIGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJs
ZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQotewotICAg
IGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyUGF1
c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRW5kRWxlbWVudE5TQ2Fs
bGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEphdmFTY3JpcHQgY2Fu
IGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2VkCi0gICAg
Ly8gYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPFhNTERvY3VtZW50
UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3Jp
cHRpbmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9k
ZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwg
IW1fdmlldykgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdl
dCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVl
biByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhp
cyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5p
bkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVs
ZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1
cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBsb2Fk
IGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KS4KLSAg
ICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1
ZTsKLQotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVw
YXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdh
Y3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKLSAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7
Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3Jp
cHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJp
YnV0ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFNj
cmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuCi0gICAgICAgIC8vIHRoZSBs
aWJ4bWwyIGFuZCBRdCBYTUxEb2N1bWVudFBhcnNlciBpbXBsZW1lbnRhdGlvbnMuCi0KLSAgICAg
ICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0gICAgICAg
ICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0
RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFy
dFBvc2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNl
ckV4ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1l
bnQtPmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVu
dDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAg
ICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFk
eSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgotICAgICAgICAgICAgaWYgKG1f
cGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotCi0gICAgICAgIC8vIEph
dmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgotICAgICAgICBpZiAoaXNEZXRh
Y2hlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlcXVlc3RpbmdTY3Jp
cHQgPSBmYWxzZTsKLSAgICBwb3BDdXJyZW50Tm9kZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0gICAgaWYg
KGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQp
IHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2so
cywgbGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9sZWFmVGV4dE5v
ZGUpCi0gICAgICAgIGVudGVyVGV4dCgpOwotICAgIG1fYnVmZmVyZWRUZXh0LmFwcGVuZChzLCBs
ZW4pOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplcnJvcihFcnJvclR5cGUgdHlwZSwg
Y29uc3QgY2hhciogbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQotewotICAgIGlmIChpc1N0b3BwZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQ09NUElMRVIoTVNWQykgfHwgQ09NUElMRVIoUlZD
VCkgfHwgQ09NUElMRVIoTUlOR1cpCi0gICAgY2hhciBtWzEwMjRdOwotICAgIHZzbnByaW50Ziht
LCBzaXplb2YobSkgLSAxLCBtZXNzYWdlLCBhcmdzKTsKLSNlbHNlCi0gICAgY2hhciogbTsKLSAg
ICBpZiAodmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdzKSA9PSAtMSkKLSAgICAgICAgcmV0dXJu
OwotI2VuZGlmCi0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpCi0gICAgICAgIG1fcGVuZGluZ0Nh
bGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0PGNvbnN0
IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKLQotI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIUNPTVBJTEVS
KE1JTkdXKQotICAgIGZyZWUobSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1s
Q2hhciogZGF0YSkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewotICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFw
cGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKHRhcmdldCwgZGF0YSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRsZSBl
eGNlcHRpb25zCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3Np
bmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oCi0gICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBlYyk7Ci0gICAg
aWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwaS0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRy
dWUpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQocGkuZ2V0KCkpOwotICAg
IGlmIChtX3ZpZXcgJiYgIXBpLT5hdHRhY2hlZCgpKQotICAgICAgICBwaS0+YXR0YWNoKCk7Ci0K
LSAgICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0KLSAgICBpZiAocGktPmlzQ1NTKCkp
Ci0gICAgICAgIG1fc2F3Q1NTID0gdHJ1ZTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBtX3Nhd1hT
TFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAgICBpZiAo
bV9zYXdYU0xUcmFuc2Zvcm0gJiYgIWRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50
KCkpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlm
IChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyUGF1c2Vk
KSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kQ0RBVEFCbG9ja0NhbGxiYWNr
KHMsIGxlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0g
ICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKGRv
Y3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFk
ZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFj
aGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAg
bV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDb21tZW50Q2FsbGJhY2socyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgUmVmUHRyPENvbW1lbnQ+IG5l
d05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwotICAgIG1f
Y3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3Zp
ZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwot
fQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KGNvbnN0IHhtbENoYXIq
IHZlcnNpb24sIGNvbnN0IHhtbENoYXIqIGVuY29kaW5nLCBpbnQgc3RhbmRhbG9uZSkKLXsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlmICh2ZXJzaW9uKQotICAgICAgICBkb2N1
bWVudCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZlcnNpb24pLCBlYyk7Ci0gICAgZG9jdW1l
bnQoKS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25lID09IDEsIGVjKTsgLy8gcG9zc2libGUg
dmFsdWVzIGFyZSAwLCAxLCBhbmQgLTEKLSAgICBpZiAoZW5jb2RpbmcpCi0gICAgICAgIGRvY3Vt
ZW50KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7Ci19Ci0KLXZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSAgICBleGl0VGV4dCgpOwotI2lmIEVO
QUJMRShYSFRNTE1QKQotICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1s
Q2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lz
dGVtSUQpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRJ
bnRlcm5hbFN1YnNldENhbGxiYWNrKG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkb2N1bWVudCgpKSB7Ci0jaWYgRU5BQkxFKFhI
VE1MTVApCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOwotICAg
ICAgICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5hbWUpOwotICAgICAgICBpZiAoZXh0SWQg
PT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iCi0gICAgICAgICAgICB8
fCBleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIpIHsKLSAg
ICAgICAgICAgIGlmIChkdGROYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkg
ewotICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRl
Y2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIo
KSwgY29sdW1uTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpCi0g
ICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwotCi0gICAgICAg
ICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwgdG9TdHJp
bmcoc3lzdGVtSUQpKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIFhNTERvY3VtZW50UGFy
c2VyKiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0
eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8WE1MRG9jdW1lbnRQYXJzZXIqPihjdHh0LT5fcHJpdmF0ZSk7Ci19Ci0KLS8v
IFRoaXMgaXMgYSBoYWNrIGFyb3VuZCBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTkyMTkKLS8vIE90aGVyd2lzZSBsaWJ4bWwgc2VlbXMgdG8gY2FsbCBhbGwgdGhl
IFNBWCBjYWxsYmFja3MgdHdpY2UgZm9yIGFueSByZXBsYWNlZCBlbnRpdHkuCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyh2b2lkKiBjbG9zdXJlKQotewotI2lm
IExJQlhNTF9WRVJTSU9OID49IDIwNjI3Ci0gICAgVU5VU0VEX1BBUkFNKGNsb3N1cmUpOwotCi0g
ICAgLy8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gbGlieG1sIDIuNi4yNy4KLSAgICByZXR1
cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRy
PihjbG9zdXJlKS0+bm9kZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzdGFydEVsZW1lbnRO
c0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1lLCBjb25zdCB4
bWxDaGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIqIHVyaSwgaW50IG5iX25hbWVzcGFjZXMsIGNv
bnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1
bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGhhY2tB
cm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdl
dFBhcnNlcihjbG9zdXJlKS0+c3RhcnRFbGVtZW50TnMobG9jYWxuYW1lLCBwcmVmaXgsIHVyaSwg
bmJfbmFtZXNwYWNlcywgbmFtZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLCBs
aWJ4bWxBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFuZGxlcih2
b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciosIGNvbnN0IHhtbENo
YXIqKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVuZEVsZW1lbnROcygpOwot
fQotCi1zdGF0aWMgdm9pZCBjaGFyYWN0ZXJzSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4
bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVn
KGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNo
YXJhY3RlcnMocywgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9u
SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0IHhtbENo
YXIqIGRhdGEpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+cHJvY2Vzc2luZ0lu
c3RydWN0aW9uKHRhcmdldCwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNkYXRhQmxvY2tIYW5k
bGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0gICAgaWYg
KGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2RhdGFCbG9jayhzLCBsZW4pOwotfQotCi1zdGF0aWMg
dm9pZCBjb21tZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBjb21tZW50
KQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNvbW1lbnQoY29tbWVudCk7Ci19
Ci0KLVdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpCi1zdGF0aWMgdm9pZCB3YXJuaW5nSGFuZGxl
cih2b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlz
dCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9z
dXJlKS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Ondhcm5pbmcsIG1lc3NhZ2UsIGFyZ3MpOwot
ICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKLXN0YXRp
YyB2b2lkIGZhdGFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgbWVzc2Fn
ZSk7Ci0gICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6ZmF0
YWwsIG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVU
RV9QUklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIG5vcm1hbEVycm9ySGFuZGxlcih2b2lkKiBjbG9z
dXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAg
IHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZXJyb3Io
WE1MRG9jdW1lbnRQYXJzZXI6Om5vbkZhdGFsLCBtZXNzYWdlLCBhcmdzKTsKLSAgICB2YV9lbmQo
YXJncyk7Ci19Ci0KLS8vIFVzaW5nIGEgc3RhdGljIGVudGl0eSBhbmQgbWFya2luZyBpdCBYTUxf
SU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkgaXMKLS8vIGEgaGFjayB0byBhdm9pZCBtYWxsb2Mv
ZnJlZS4gVXNpbmcgYSBnbG9iYWwgdmFyaWFibGUgbGlrZSB0aGlzIGNvdWxkIGNhdXNlIHRyb3Vi
bGUKLS8vIGlmIGxpYnhtbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdlcmUgdG8gY2hhbmdlCi1z
dGF0aWMgeG1sQ2hhciBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdFs1XSA9IHswLCAwLCAwLCAwLCAw
fTsKLQotc3RhdGljIHhtbEVudGl0eVB0ciBzaGFyZWRYSFRNTEVudGl0eSgpCi17Ci0gICAgc3Rh
dGljIHhtbEVudGl0eSBlbnRpdHk7Ci0gICAgaWYgKCFlbnRpdHkudHlwZSkgewotICAgICAgICBl
bnRpdHkudHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAgICAgICAgZW50aXR5Lm9yaWcgPSBzaGFy
ZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmNvbnRlbnQgPSBzaGFyZWRYSFRN
TEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmV0eXBlID0gWE1MX0lOVEVSTkFMX1BSRURF
RklORURfRU5USVRZOwotICAgIH0KLSAgICByZXR1cm4gJmVudGl0eTsKLX0KLQotc3RhdGljIHht
bEVudGl0eVB0ciBnZXRYSFRNTEVudGl0eShjb25zdCB4bWxDaGFyKiBuYW1lKQotewotICAgIFVD
aGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihu
YW1lKSk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgdmFs
dWUgPSBTdHJpbmcoJmMsIDEpLnV0ZjgoKTsKLSAgICBBU1NFUlQodmFsdWUubGVuZ3RoKCkgPCA1
KTsKLSAgICB4bWxFbnRpdHlQdHIgZW50aXR5ID0gc2hhcmVkWEhUTUxFbnRpdHkoKTsKLSAgICBl
bnRpdHktPmxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotICAgIGVudGl0eS0+bmFtZSA9IG5hbWU7
Ci0gICAgbWVtY3B5KHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0LCB2YWx1ZS5kYXRhKCksIGVudGl0
eS0+bGVuZ3RoICsgMSk7Ci0KLSAgICByZXR1cm4gZW50aXR5OwotfQotCi1zdGF0aWMgeG1sRW50
aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbmFt
ZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJD
dHh0UHRyPihjbG9zdXJlKTsKLSAgICB4bWxFbnRpdHlQdHIgZW50ID0geG1sR2V0UHJlZGVmaW5l
ZEVudGl0eShuYW1lKTsKLSAgICBpZiAoZW50KSB7Ci0gICAgICAgIGVudC0+ZXR5cGUgPSBYTUxf
SU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7Ci0gICAgICAgIHJldHVybiBlbnQ7Ci0gICAgfQot
Ci0gICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKLSAgICBpZiAo
IWVudCAmJiAoZ2V0UGFyc2VyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKQotI2lmIEVOQUJM
RShYSFRNTE1QKQotICAgICAgICAgICAgICAgICB8fCBnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhU
TUxNUERvY3VtZW50KCkKLSNlbmRpZgotICAgICAgICkpIHsKLSAgICAgICAgZW50ID0gZ2V0WEhU
TUxFbnRpdHkobmFtZSk7Ci0gICAgICAgIGlmIChlbnQpCi0gICAgICAgICAgICBlbnQtPmV0eXBl
ID0gWE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwotICAgIH0KLQotICAgIHJldHVybiBlbnQ7
Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0RG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCi17
Ci0gICAgeG1sUGFyc2VyQ3R4dCogY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHQqPihj
bG9zdXJlKTsKLSAgICBzd2l0Y2hUb1VURjE2KGN0eHQpOwotICAgIGdldFBhcnNlcihjbG9zdXJl
KS0+c3RhcnREb2N1bWVudChjdHh0LT52ZXJzaW9uLCBjdHh0LT5lbmNvZGluZywgY3R4dC0+c3Rh
bmRhbG9uZSk7Ci0gICAgeG1sU0FYMlN0YXJ0RG9jdW1lbnQoY2xvc3VyZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGVuZERvY3VtZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlKQotewotICAgIGdldFBhcnNl
cihjbG9zdXJlKS0+ZW5kRG9jdW1lbnQoKTsKLSAgICB4bWxTQVgyRW5kRG9jdW1lbnQoY2xvc3Vy
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJl
LCBjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4
bWxDaGFyKiBzeXN0ZW1JRCkKLXsKLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmludGVybmFsU3Vi
c2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICB4bWxTQVgySW50ZXJuYWxTdWJz
ZXQoY2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwotfQotCi1zdGF0aWMgdm9p
ZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciosIGNv
bnN0IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHhtbENoYXIqKQotewotICAgIFN0cmluZyBl
eHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwotICAgIGlmICgoZXh0SWQgPT0gIi0vL1czQy8v
RFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0Mv
L0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKQotICAgICAgICB8fCAoZXh0
SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4x
Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2Jp
bGUgMS4wLy9FTiIpCi0gICAgICAgKQotICAgICAgICBnZXRQYXJzZXIoY2xvc3VyZSktPnNldElz
WEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBv
ciBub3QuCi19Ci0KLXN0YXRpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyKHZvaWQq
LCBjb25zdCB4bWxDaGFyKiwgaW50KQotewotICAgIC8vIG5vdGhpbmcgdG8gZG8sIGJ1dCB3ZSBu
ZWVkIHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVyCi0gICAgLy8gaHR0cDovL2J1Z3ppbGxh
Lmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1Ci0gICAgLy8gaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MgotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
Ojppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJiBjaHVuaykKLXsKLSAgICB4
bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwotCi0g
ICAgc2F4LmVycm9yID0gbm9ybWFsRXJyb3JIYW5kbGVyOwotICAgIHNheC5mYXRhbEVycm9yID0g
ZmF0YWxFcnJvckhhbmRsZXI7Ci0gICAgc2F4LmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzSGFuZGxl
cjsKLSAgICBzYXgucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcHJvY2Vzc2luZ0luc3RydWN0aW9u
SGFuZGxlcjsKLSAgICBzYXguY2RhdGFCbG9jayA9IGNkYXRhQmxvY2tIYW5kbGVyOwotICAgIHNh
eC5jb21tZW50ID0gY29tbWVudEhhbmRsZXI7Ci0gICAgc2F4Lndhcm5pbmcgPSB3YXJuaW5nSGFu
ZGxlcjsKLSAgICBzYXguc3RhcnRFbGVtZW50TnMgPSBzdGFydEVsZW1lbnROc0hhbmRsZXI7Ci0g
ICAgc2F4LmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmdldEVu
dGl0eSA9IGdldEVudGl0eUhhbmRsZXI7Ci0gICAgc2F4LnN0YXJ0RG9jdW1lbnQgPSBzdGFydERv
Y3VtZW50SGFuZGxlcjsKLSAgICBzYXguZW5kRG9jdW1lbnQgPSBlbmREb2N1bWVudEhhbmRsZXI7
Ci0gICAgc2F4LmludGVybmFsU3Vic2V0ID0gaW50ZXJuYWxTdWJzZXRIYW5kbGVyOwotICAgIHNh
eC5leHRlcm5hbFN1YnNldCA9IGV4dGVybmFsU3Vic2V0SGFuZGxlcjsKLSAgICBzYXguaWdub3Jh
YmxlV2hpdGVzcGFjZSA9IGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyOwotICAgIHNheC5lbnRp
dHlEZWNsID0geG1sU0FYMkVudGl0eURlY2w7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NB
WDJfTUFHSUM7Ci0gICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOwotICAgIG1fc2F3
RXJyb3IgPSBmYWxzZTsKLSAgICBtX3Nhd0NTUyA9IGZhbHNlOwotICAgIG1fc2F3WFNMVHJhbnNm
b3JtID0gZmFsc2U7Ci0gICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKLQotICAgIFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KSk7Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2NvbnRleHQgPSBYTUxQ
YXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIoJnNheCwgdGhpcywgY2h1bmspOwotICAg
IGVsc2UgewotICAgICAgICBBU1NFUlQoIWNodW5rLmRhdGEoKSk7Ci0gICAgICAgIG1fY29udGV4
dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCB0aGlzKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKCkKLXsKLSAgICBpZiAoIWlz
U3RvcHBlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIFRl
bGwgbGlieG1sIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWE1M
RG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpKTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGNvbnRleHQoKSwgMCwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fY29udGV4dCA9IDA7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBYTUxUcmVlVmlld2VyIHhtbFRyZWVWaWV3
ZXIoZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCB4bWxWaWV3ZXJNb2RlID0gIW1fc2F3RXJyb3IgJiYg
IW1fc2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiB4bWxUcmVlVmlld2VyLmhhc05vU3R5
bGVJbmZvcm1hdGlvbigpOwotICAgIGlmICh4bWxWaWV3ZXJNb2RlKQotICAgICAgICB4bWxUcmVl
Vmlld2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmlldygpOwotCi0gICAgaWYgKG1fc2F3WFNM
VHJhbnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9IHhtbERvY1B0ckZvclN0cmluZyhkb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNl
dFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNmb3JtU291cmNlKGRvYykpKTsKLQot
ICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jdW1l
bnQgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IFhTTCBzdHlsZXNoZWV0cy4KLSAg
ICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlh
dGVseSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcodHJ1ZSk7Ci0KLSAgICAgICAg
RG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiBF
TkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0cgotICAg
IC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJlIHRvIHBh
cnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9yIG1lc3Nh
Z2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNpZ25lZCBj
aGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KCZCT00pOwotCi0gICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShjYWNoZWRSZXNvdXJj
ZUxvYWRlciwgZXJyb3JGdW5jLCAwKTsKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVh
ZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTTFRfUEFSU0VfT1BUSU9O
Uyk7Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLSNlbmRpZgotCi1pbnQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50
YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91bGQgcmV0
dXJuIDAtYmFzZWQuCi0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxp
bmUgOiAxOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEt
YmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KLSAgICByZXR1cm4g
Y29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29sIDogMTsKLX0KLQotVGV4dFBvc2l0aW9u
MCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICB4bWxQYXJz
ZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7Ci0gICAgLy8g
RklYTUU6IFRoZSBjb250ZXh0IHByb2JhYmx5IGNvbnRhaW5zIDEtYmFzZWQgbnVtYmVycywgYnV0
IHdlIHRyZWF0IHRoZW0gYXMgMC1iYXNlZCwKLSAgICAvLyAgICAgICAgdG8gYmUgY29uc2lzdGVu
dCB3aXRoIGZpeG1lJ3MgaW4gbGluZU51bWJlcigpIGFuZCBjb2x1bW5OdW1iZXIKLSAgICAvLyAg
ICAgICAgbWV0aG9kcy4KLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51
bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0gICAgICAgIFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wp
KTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaGFzIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiwgaW4g
Y29udHJhc3QgdG8gdGV4dFBvc2l0aW9uKCkgbWV0aG9kLgotLy8gSXQgc2hvdWxkIHJlcGxhY2Ug
dGV4dFBvc2l0aW9uKCkuCi1UZXh0UG9zaXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0ID0g
dGhpcy0+Y29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIFRleHRQ
b3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOwotICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdU
Rjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSks
Ci0gICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5p
bnB1dC0+Y29sKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkK
LXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBpZiAoY29udGV4dCgp
KQotICAgICAgICB4bWxTdG9wUGFyc2VyKGNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQotewotICAgIEFTU0VSVCghaXNEZXRhY2hlZCgpKTsK
LSAgICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxz
ZTsKLQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHdo
aWxlICghbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5n
Q2FsbGJhY2tzLT5jYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayh0aGlzKTsKLQotICAgICAgICAv
LyBBIGNhbGxiYWNrIHBhdXNlZCB0aGUgcGFyc2VyCi0gICAgICAgIGlmIChtX3BhcnNlclBhdXNl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBhbnkg
cGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0g
ICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8gRmlu
YWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB3cml0ZSgpIGRpZG4ndCByZXN1
bHQKLSAgICAvLyBpbiBhbnkgZnVydGhlciBjYWxsYmFja3MgYmVpbmcgcXVldWVkLCBjYWxsIGVu
ZCgpCi0gICAgaWYgKG1fZmluaXNoQ2FsbGVkICYmIG1fcGVuZGluZ0NhbGxiYWNrcy0+aXNFbXB0
eSgpKQotICAgICAgICBlbmQoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5k
RnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBjaHVuaykKLXsKLSAgICBBU1NFUlQoIW1fY29u
dGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFyc2luZ0ZyYWdtZW50KTsKLQotICAgIENTdHJpbmcgY2h1
bmtBc1V0ZjggPSBjaHVuay51dGY4KCk7Ci0gICAgCi0gICAgLy8gbGlieG1sMiB0YWtlcyBhbiBp
bnQgZm9yIGEgbGVuZ3RoLCBhbmQgdGhlcmVmb3JlIGNhbid0IGhhbmRsZSBYTUwgY2h1bmtzIGxh
cmdlciB0aGFuIDIgR2lCLgotICAgIGlmIChjaHVua0FzVXRmOC5sZW5ndGgoKSA+IElOVF9NQVgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNo
dW5rQXNVdGY4KTsKLSAgICB4bWxQYXJzZUNvbnRlbnQoY29udGV4dCgpKTsKLSAgICBlbmREb2N1
bWVudCgpOyAvLyBDbG9zZSBhbnkgb3BlbiB0ZXh0IG5vZGVzLgotCi0gICAgLy8gRklYTUU6IElm
IHRoaXMgY29kZSBpcyBhY3R1YWxseSBuZWVkZWQsIGl0IHNob3VsZCBwcm9iYWJseSBtb3ZlIHRv
IGZpbmlzaCgpCi0gICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJRdCBoYXMgYSBzaW1pbGFyIGNoZWNr
IChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9j
dW1lbnRFcnJvcikgaW4gZG9FbmQoKS4KLSAgICAvLyBDaGVjayBpZiBhbGwgdGhlIGNodW5rIGhh
cyBiZWVuIHByb2Nlc3NlZC4KLSAgICBsb25nIGJ5dGVzUHJvY2Vzc2VkID0geG1sQnl0ZUNvbnN1
bWVkKGNvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVzUHJvY2Vzc2VkID09IC0xIHx8ICgodW5zaWdu
ZWQgbG9uZylieXRlc1Byb2Nlc3NlZCkgIT0gY2h1bmtBc1V0ZjgubGVuZ3RoKCkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IEkgZG9uJ3QgYmVsaWV2ZSB3ZSBjYW4gaGl0IHRoaXMgY2FzZSB3aXRob3V0
IGFsc28gaGF2aW5nIHNlZW4gYW4gZXJyb3Igb3IgYSBudWxsIGJ5dGUuCi0gICAgICAgIC8vIElm
IHdlIGhpdCB0aGlzIEFTU0VSVCwgd2UndmUgZm91bmQgYSB0ZXN0IGNhc2Ugd2hpY2ggZGVtb25z
dHJhdGVzIHRoZSBuZWVkIGZvciB0aGlzIGNvZGUuCi0gICAgICAgIEFTU0VSVChtX3Nhd0Vycm9y
IHx8IChieXRlc1Byb2Nlc3NlZCA+PSAwICYmICFjaHVua0FzVXRmOC5kYXRhKClbYnl0ZXNQcm9j
ZXNzZWRdKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBObyBlcnJv
ciBpZiB0aGUgY2h1bmsgaXMgd2VsbCBmb3JtZWQgb3IgaXQgaXMgbm90IGJ1dCB3ZSBoYXZlIG5v
IGVycm9yLgotICAgIHJldHVybiBjb250ZXh0KCktPndlbGxGb3JtZWQgfHwgIXhtbEN0eHRHZXRM
YXN0RXJyb3IoY29udGV4dCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3Rh
dGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBj
b25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIC8qeG1sUHJlZml4Ki8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENo
YXIqIC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFjZXMqLywgY29uc3QgeG1sQ2hhcioqIC8q
bmFtZXNwYWNlcyovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVmYXVsdGVkKi8sIGNvbnN0IHhtbENoYXIq
KiBsaWJ4bWxBdHRyaWJ1dGVzKQotewotICAgIGlmIChzdHJjbXAocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJzIikgIT0gMCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4
dFB0cj4oY2xvc3VyZSk7Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUgPSBzdGF0aWNf
Y2FzdDxBdHRyaWJ1dGVQYXJzZVN0YXRlKj4oY3R4dC0+X3ByaXZhdGUpOwotCi0gICAgc3RhdGUt
PmdvdEF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0
ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRl
cyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAg
ICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFt
ZSk7Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IChpbnQpIChhdHRyaWJ1dGVzW2ldLmVuZCAt
IGF0dHJpYnV0ZXNbaV0udmFsdWUpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0gdG9TdHJp
bmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgICAgICBTdHJpbmcgYXR0
clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKLSAgICAgICAgU3RyaW5n
IGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gYXR0ckxvY2FsTmFtZSA6IGF0dHJQ
cmVmaXggKyAiOiIgKyBhdHRyTG9jYWxOYW1lOwotCi0gICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVz
LnNldChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7Ci0gICAgfQotfQotCi1IYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJz
T0spCi17Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKLSAgICBzdGF0ZS5nb3RBdHRy
aWJ1dGVzID0gZmFsc2U7Ci0KLSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNh
eCwgMCwgc2l6ZW9mKHNheCkpOwotICAgIHNheC5zdGFydEVsZW1lbnROcyA9IGF0dHJpYnV0ZXNT
dGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NBWDJfTUFH
SUM7Ci0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IHBhcnNlciA9IFhNTFBhcnNlckNvbnRl
eHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCAmc3RhdGUpOwotICAgIFN0cmluZyBwYXJzZVN0
cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAiICsgc3RyaW5nICsgIiAvPiI7
Ci0gICAgeG1sUGFyc2VDaHVuayhwYXJzZXItPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgcGFyc2VTdHJpbmcubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpLCAxKTsKLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRl
czsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkNE
QVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1l
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCi0jaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgotI2lu
Y2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgotI2VuZGlmCi0KLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW50aXR5UmVzb2x2
ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIHsKLSAgICB2aXJ0dWFsIFFTdHJp
bmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSk7Ci19OwotCi1R
U3RyaW5nIEVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eShjb25zdCBRU3Ry
aW5nICZuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShuYW1lLnRvVXRm
OCgpLmNvbnN0RGF0YSgpKTsKLSAgICByZXR1cm4gUVN0cmluZyhjKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6c3Vw
cG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICByZXR1cm4gdmVy
c2lvbiA9PSAiMS4wIjsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi0gICAgOiBTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0gICAgLCBtX3ZpZXcoZnJhbWVWaWV3KQotICAg
ICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGRvY3VtZW50KQotICAg
ICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdY
U0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAs
IG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9p
c1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZh
bHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVz
dGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9l
cnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJl
bG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3Nj
cmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0g
ICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKLSAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lv
bihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0gICAgbV9zdHJlYW0uc2V0RW50aXR5UmVz
b2x2ZXIobmV3IEVudGl0eVJlc29sdmVyKTsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERv
Y3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnRF
bGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICA6IFNj
cmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmll
dygwKQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGZyYWdt
ZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAg
ICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxz
ZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQot
ICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xh
cmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAs
IG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQot
ICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0g
ICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQ
ZXJtaXNzaW9uKHBlcm1pc3Npb24pCi17Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8g
QWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1l
bnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxl
bVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQotICAgICAgICBOb2RlKiBuID0gcGFyZW50
RWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5v
ZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25z
IG5hbWVzcGFjZXM7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3Qo
KTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAg
ICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVt
KGkpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAieG1sbnMiKQot
ICAgICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09ICJ4bWxucyIpCi0g
ICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYXBwZW5kKFFYbWxTdHJlYW1OYW1lc3BhY2VE
ZWNsYXJhdGlvbihhdHRyLT5sb2NhbE5hbWUoKSwgYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3RyZWFtLmFkZEV4dHJhTmFtZXNwYWNlRGVj
bGFyYXRpb25zKG5hbWVzcGFjZXMpOwotICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5l
dyBFbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAvLyBJZiB0aGUgcGFyZW50IGVsZW1lbnQgaXMgbm90
IGluIGRvY3VtZW50IHRyZWUsIHRoZXJlIG1heSBiZSBubyB4bWxucyBhdHRyaWJ1dGU7IGp1c3Qg
ZGVmYXVsdCB0byB0aGUgcGFyZW50J3MgbmFtZXNwYWNlLgotICAgIGlmIChtX2RlZmF1bHROYW1l
c3BhY2VVUkkuaXNOdWxsKCkgJiYgIXBhcmVudEVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAgICAg
ICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gcGFyZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7
Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewotICAgIGNs
ZWFyQ3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAg
IG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIGRlbGV0ZSBtX3N0cmVh
bS5lbnRpdHlSZXNvbHZlcigpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRl
KGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCi17Ci0gICAgbV93cm90ZVRleHQgPSB0cnVlOwot
Ci0gICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVyKCkt
PnNhd0Vycm9yKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9yLCBy
ZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAgICAgIGhhbmRsZUVycm9yKGZh
dGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFFTdHJpbmcgZGF0YShwYXJzZVN0cmluZyk7Ci0g
ICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVz
ZSB0aGUgcGFyc2VyIHRvIGRldGFjaCwKLSAgICAgICAgLy8ga2VlcCB0aGlzIGFsaXZlIHVudGls
IHRoaXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50UGFyc2Vy
PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgIG1fc3RyZWFtLmFkZERhdGEoZGF0YSk7Ci0gICAg
ICAgIHBhcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJikKLXsKLSAgICBE
b2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7Ci0gICAgbV9zYXdFcnJvciA9IGZhbHNlOwot
ICAgIG1fc2F3Q1NTID0gZmFsc2U7Ci0gICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSBmYWxzZTsKLSAg
ICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
Ojpkb0VuZCgpCi17Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3Jt
KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcg
VHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pKSk7Ci0gICAgICAg
IGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2MgdGhpbmsgaXQn
cyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCi0gICAgICAgIGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwotICAgICAgICBk
b2N1bWVudCgpLT5zZXRQYXJzaW5nKHRydWUpOwotICAgICAgICBEb2N1bWVudFBhcnNlcjo6c3Rv
cFBhcnNpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX3N0cmVhbS5lcnJvcigpID09
IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcgotICAgICAgICB8
fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50ICYmICFtX3Nhd1hTTFRyYW5zZm9y
bSAmJiAhbV9zYXdFcnJvcikpCi0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJpbnRhYmxl
KG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsK
LX0KLQotaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zdHJlYW0ubGluZU51bWJlcigpOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVtbk51bWJl
cigpOwotfQotCi1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24o
KSBjb25zdAotewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlu
Y29ycmVjdGx5IHJlaW50ZXJwcmV0cyB6ZXJvLWJhc2UgbGluZU51bWJlciBtZXRob2QgYXMgb25l
LWJhc2VkIG51bWJlci4KLS8vIEZJWE1FOiBUaGlzIGVycm9yIGlzIGtlcHQgZm9yIGNvbXBhdGli
aWxpdHkuIFdlIHNob3VsZCBmaXggaXQgZXZlbnR1YWxseS4gCi1UZXh0UG9zaXRpb24xIFhNTERv
Y3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVO
dW1iZXIoKSksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1i
ZXIoKSkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCi17Ci0g
ICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwotfQotCi12b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQobV9wYXJzZXJQ
YXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBl
eGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHBhcnNlKCk7Ci0gICAgaWYgKG1fcGFy
c2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBhbnkgcGVu
ZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAg
bV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8gRmluYWxs
eSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBhcHBlbmQoKSBkaWRuJ3QgcmVzdWx0
Ci0gICAgLy8gaW4gYW55IGZ1cnRoZXIgY2FsbGJhY2tzIGJlaW5nIHF1ZXVlZCwgY2FsbCBlbmQo
KQotICAgIGlmIChtX2ZpbmlzaENhbGxlZCAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fcGVuZGlu
Z1NjcmlwdCkKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmFw
cGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAgIEFTU0VSVCgh
bV9zYXdGaXJzdEVsZW1lbnQpOwotICAgIGFwcGVuZChTdHJpbmcoIjxxeG1sc3RyZWFtZHVtbXll
bGVtZW50PiIpKTsKLSAgICBhcHBlbmQoc291cmNlKTsKLSAgICBhcHBlbmQoU3RyaW5nKCI8L3F4
bWxzdHJlYW1kdW1teWVsZW1lbnQ+IikpOwotICAgIHJldHVybiAhaGFzRXJyb3IoKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBh
cnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAg
Ym9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxl
bWVudE5zSGFuZGxlcihBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSwgY29uc3QgUVhtbFN0cmVh
bUF0dHJpYnV0ZXMmIGF0dHJzKQotewotICAgIGlmIChhdHRycy5jb3VudCgpIDw9IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0YXRlLT5nb3RBdHRyaWJ1dGVzID0gdHJ1ZTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFFY
bWxTdHJlYW1BdHRyaWJ1dGUmIGF0dHIgPSBhdHRyc1tpXTsKLSAgICAgICAgU3RyaW5nIGF0dHJM
b2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBh
dHRyLnZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5uYW1lc3Bh
Y2VVcmkoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5h
bWUoKTsKLSAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0clZhbHVl
KTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmlidXRlcyhj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykKLXsKLSAgICBBdHRyaWJ1dGVQYXJz
ZVN0YXRlIHN0YXRlOwotICAgIHN0YXRlLmdvdEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIFFY
bWxTdHJlYW1SZWFkZXIgc3RyZWFtOwotICAgIFFTdHJpbmcgZHVtbXkgPSBRU3RyaW5nKFFMYXRp
bjFTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICUxIC8+IikpLmFyZyhzdHJp
bmcpOwotICAgIHN0cmVhbS5hZGREYXRhKGR1bW15KTsKLSAgICB3aGlsZSAoIXN0cmVhbS5hdEVu
ZCgpKSB7Ci0gICAgICAgIHN0cmVhbS5yZWFkTmV4dCgpOwotICAgICAgICBpZiAoc3RyZWFtLmlz
U3RhcnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hh
bmRsZXIoJnN0YXRlLCBzdHJlYW0uYXR0cmlidXRlcygpKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmli
dXRlczsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcHJlZml4RnJvbVFOYW1lKGNvbnN0IFFT
dHJpbmcmIHFOYW1lKQotewotICAgIGNvbnN0IGludCBvZmZzZXQgPSBxTmFtZS5pbmRleE9mKFFM
YXRpbjFDaGFyKCc6JykpOwotICAgIGlmIChvZmZzZXQgPD0gMCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHFOYW1lLmxlZnQob2Zmc2V0KTsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5l
d0VsZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMgJm5zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVj
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG5zLmNvdW50KCk7ICsraSkgewotICAgICAgICBjb25zdCBR
WG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gJmRlY2wgPSBuc1tpXTsKLSAgICAgICAgU3Ry
aW5nIG5hbWVzcGFjZVVSSSA9IGRlY2wubmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIFN0cmluZyBu
YW1lc3BhY2VRTmFtZSA9IGRlY2wucHJlZml4KCkuaXNFbXB0eSgpID8gU3RyaW5nKCJ4bWxucyIp
IDogU3RyaW5nKCJ4bWxuczoiKTsKLSAgICAgICAgbmFtZXNwYWNlUU5hbWUuYXBwZW5kKGRlY2wu
cHJlZml4KCkpOwotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3
dy53My5vcmcvMjAwMC94bWxucy8iLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNlVVJJLCBlYywg
c2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRp
bmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzICZhdHRycywgRXhjZXB0aW9uQ29kZSYgZWMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhdHRycy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0
ZSAmYXR0ciA9IGF0dHJzW2ldOwotICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IGF0dHIu
bmFtZSgpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlICAgICA9IGF0dHIudmFsdWUoKTsKLSAg
ICAgICAgU3RyaW5nIGF0dHJVUkkgICAgICAgPSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlzRW1wdHko
KSA/IFN0cmluZygpIDogU3RyaW5nKGF0dHIubmFtZXNwYWNlVXJpKCkpOwotICAgICAgICBTdHJp
bmcgYXR0clFOYW1lICAgICA9IGF0dHIucXVhbGlmaWVkTmFtZSgpOwotICAgICAgICBuZXdFbGVt
ZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNj
cmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5n
IGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnBhcnNlKCkKLXsKLSAgICB3aGlsZSAoIWlzU3RvcHBlZCgpICYmICFtX3Bh
cnNlclBhdXNlZCAmJiAhbV9zdHJlYW0uYXRFbmQoKSkgewotICAgICAgICBtX3N0cmVhbS5yZWFk
TmV4dCgpOwotICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDogewotICAgICAgICAgICAgc3Rh
cnREb2N1bWVudCgpOwotICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDogewotICAgICAgICAgICAgZW5kRG9jdW1l
bnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0
cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAg
ICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSAmJiAhbV9oYXNEb2NUeXBl
RGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZ
UEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAg
cGFyc2VTdGFydEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRWxlbWVudDogewotICAgICAgICAgICAgcGFy
c2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKLSAgICAgICAgICAgIGlmIChtX3N0
cmVhbS5pc0NEQVRBKCkpIHsKLSAgICAgICAgICAgICAgICAvL2NkYXRhCi0gICAgICAgICAgICAg
ICAgcGFyc2VDZGF0YSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
L2NoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICBwYXJzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0
cmVhbVJlYWRlcjo6Q29tbWVudDogewotICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6
OkRURDogewotICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFREIjsKLSAg
ICAgICAgICAgIHBhcnNlRHRkKCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICBt
X2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJl
bmNlOiB7Ci0gICAgICAgICAgICAvL3FEZWJ1ZygpPDwiLS0tLS0tLS0tLSBFTlRJVFkgPSAiPDxt
X3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKQotICAgICAgICAgICAgLy8gICAgICAgIDw8IiwgdCA9
ICI8PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKGlzWEhUTUxE
b2N1bWVudCgpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICAgICAgfHwgaXNYSFRN
TE1QRG9jdW1lbnQoKQotI2VuZGlmCi0gICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAg
ICBRU3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUoKS50b1N0cmluZygpOwotICAgICAgICAg
ICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHkudG9VdGY4KCkuY29uc3RE
YXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAgICAgICAg
ICAgICAgICAgIGVudGVyVGV4dCgpOwotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIoJmMsIDEpOwotICAgICAgICAgICAgICAg
IC8vIHFEZWJ1ZygpPDwiIC0tLS0tLS0gYWRkaW5nIGVudGl0eSAiPDxzdHI7Ci0gICAgICAgICAg
ICAgICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEoc3RyLCBlYyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1S
ZWFkZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjogewotICAgICAgICAgICAgcGFyc2VQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbS5lcnJvcigpICE9IFFYbWxTdHJl
YW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgewotICAgICAgICAgICAgICAg
IEVycm9yVHlwZSB0eXBlID0gKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6
Tm90V2VsbEZvcm1lZEVycm9yKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YXRhbCA6IHdhcm5pbmc7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgcVByaW50
YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoKQotewotICAgIGluaXRpYWxpemVQYXJzZXJDb250
ZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KLSAgICBpZiAoIW1fcGFyc2luZ0Zy
YWdtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFhNTFN0YW5kYWxvbmUobV9zdHJlYW0u
aXNTdGFuZGFsb25lRG9jdW1lbnQoKSwgZWMpOwotCi0gICAgICAgIFFTdHJpbmdSZWYgdmVyc2lv
biA9IG1fc3RyZWFtLmRvY3VtZW50VmVyc2lvbigpOwotICAgICAgICBpZiAoIXZlcnNpb24uaXNF
bXB0eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MVmVyc2lvbih2ZXJzaW9uLCBl
Yyk7Ci0gICAgICAgIFFTdHJpbmdSZWYgZW5jb2RpbmcgPSBtX3N0cmVhbS5kb2N1bWVudEVuY29k
aW5nKCk7Ci0gICAgICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgZG9j
dW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIH0KLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQotewotICAgIGlmICghbV9zYXdGaXJz
dEVsZW1lbnQgJiYgbV9wYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgLy8gc2tpcCBkdW1teSBl
bGVtZW50IGZvciBmcmFnbWVudHMKLSAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFN0cmluZyBs
b2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCk7Ci0gICAgU3RyaW5nIHVyaSAgICAgICA9IG1fc3Ry
ZWFtLm5hbWVzcGFjZVVyaSgpOwotICAgIFN0cmluZyBwcmVmaXggICAgPSBwcmVmaXhGcm9tUU5h
bWUobV9zdHJlYW0ucXVhbGlmaWVkTmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgaWYgKG1fcGFy
c2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewotICAgICAgICBRX0FTU0VSVChwcmVmaXgu
aXNOdWxsKCkpOwotICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQot
Ci0gICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKLSAgICBS
ZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5h
bWUsIHRydWUpOwotICAgIGlmICghbmV3RWxlbWVudCkgewotICAgICAgICBzdG9wUGFyc2luZygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgaWYg
KCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8v
IEFzIHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBk
ZiwKLSAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1lbnQg
TVVTVCBiZSAnaHRtbCcgYW5kCi0gICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVm
YXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJwotICAgICAgICAvLyBNVVNU
IGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwotICAgICAgICBpZiAobG9jYWxOYW1l
ICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAgaGFuZGxl
RXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxl
bWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7Ci0g
ICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgICAgICAgICBtX3N0
cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNs
YXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpKTsKLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0
RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7Ci0KLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhuZXdFbGVtZW50LmdldCgp
LCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMsIG1fc2NyaXB0aW5nUGVybWlz
c2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50Lmdl
dCgpLCBtX3N0cmVhbS5hdHRyaWJ1dGVzKCksIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwot
ICAgIGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVu
dChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9z
Y3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3Vy
cmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1
cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1l
bnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0K
LSAgICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgp
Ci17Ci0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBuID0gbV9j
dXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmICht
X3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkICYmIG4t
PmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgewotICAgICAgICBp
ZiAoIW1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3BDdXJyZW50
Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3Mg
cGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAg
Ly8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhl
Y3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3Vy
cmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQq
IHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3Jp
cHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBkb24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxv
bmUgZG9jdW1lbnRzIChmb3Igbm93KQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKLSAg
ICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotCi0gICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVw
YXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9u
LCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwotICAgIGlm
ICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICAgICAg
aWYgKCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6
QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkt
PnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQo
KSkKLSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNl
Q29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBt
X3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+
d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0g
c2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Ci0gICAgICAgICAgICBtX3NjcmlwdEVsZW1l
bnQgPSBlbGVtZW50OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhp
cyk7Ci0KLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0
IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCi0gICAgICAg
ICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAg
fQotICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwotICAgIHBvcEN1cnJlbnROb2RlKCk7
Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycygpCi17Ci0gICAg
aWYgKCFtX2xlYWZUZXh0Tm9kZSkKLSAgICAgICAgZW50ZXJUZXh0KCk7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEobV9zdHJlYW0udGV4
dCgpLCBlYyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKCkKLXsKLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRsZSBleGNl
cHRpb25zCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0g
ICAgICAgIG1fc3RyZWFtLnByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldCgpLAotICAgICAgICBt
X3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKCksIGV4Y2VwdGlvbik7Ci0gICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGktPnNldENyZWF0ZWRCeVBhcnNl
cih0cnVlKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKHBpLmdldCgpKTsK
LSAgICBpZiAobV92aWV3ICYmICFwaS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcGktPmF0dGFjaCgp
OwotCi0gICAgcGktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKHBpLT5pc0NT
UygpKQotICAgICAgICBtX3Nhd0NTUyA9IHRydWU7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgbV9z
YXdYU0xUcmFuc2Zvcm0gPSAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7Ci0gICAg
aWYgKG1fc2F3WFNMVHJhbnNmb3JtICYmICFkb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2VEb2N1
bWVudCgpKQotICAgICAgICBzdG9wUGFyc2luZygpOwotI2VuZGlmCi19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQ
dHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQo
KSwgbV9zdHJlYW0udGV4dCgpKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxk
KG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkp
Ci0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpwYXJzZUNvbW1lbnQoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8Q29tbWVu
dD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX3N0cmVhbS50ZXh0KCkp
OwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7Ci0g
ICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKLSAgICAgICAgbmV3Tm9kZS0+
YXR0YWNoKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsK
LSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IGZhbHNl
OwotI2VuZGlmCi19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdHJlYW0uaGFzRXJyb3IoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VEdGQoKQotewotICAgIFFTdHJpbmdSZWYgbmFtZSA9IG1fc3RyZWFtLmR0
ZE5hbWUoKTsKLSAgICBRU3RyaW5nUmVmIHB1YmxpY0lkID0gbV9zdHJlYW0uZHRkUHVibGljSWQo
KTsKLSAgICBRU3RyaW5nUmVmIHN5c3RlbUlkID0gbV9zdHJlYW0uZHRkU3lzdGVtSWQoKTsKLQot
ICAgIC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwgcHVibGljSWQgPDwgc3lzdGVtSWQ7Ci0g
ICAgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjAg
VHJhbnNpdGlvbmFsLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmlu
ZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0g
UUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKSkKLSAgICAg
ICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBG
cmFtZXNldC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0v
L1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09
IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VO
IikpCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBY
SFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSNpZiAhRU5BQkxF
KFhIVE1MTVApCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBG
T1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCi0jZW5kaWYKLSAgICAgICApCi0gICAg
ICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBl
bnRpdGllcyBvciBub3QuCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgZWxzZSBpZiAoKHB1Ymxp
Y0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8v
RU4iKSkKLSAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQ
Rk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewotICAgICAgICBpZiAoQXRvbWlj
U3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAg
ICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4
cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1i
ZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9j
dW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUgdHlwZSBp
cyBjb3JyZWN0IHdpdGggdGhpcyBtZXRob2QKLSAgICAgICAgICAgIHNldElzWEhUTUxNUERvY3Vt
ZW50KHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQo
dHJ1ZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMGE0NzNlZDIzMDgyZjM3ZDM5M2E4ZDExZjFhZGExNWVjYzNjMzcyNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKLQotWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1
cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAsIG1fb2xk
R2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3IpCi0gICAgLCBtX29sZFN0cnVjdHVyZWRF
cnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQotICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1s
R2VuZXJpY0Vycm9yQ29udGV4dCkKLSNlbmRpZgotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi1Y
TUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5l
cmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMs
IHZvaWQqIGVycm9yQ29udGV4dCkKLSAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3Vy
cmVudENhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHht
bEdlbmVyaWNFcnJvcikKLSAgICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1
cmVkRXJyb3IpCi0gICAgLCBtX29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0
KQotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9h
ZGVyOwotICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQotICAgICAgICB4bWxTZXRHZW5lcmljRXJy
b3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgaWYgKHN0cnVjdHVy
ZWRFcnJvckZ1bmMpCi0gICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250
ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKLX0KLSNlbmRpZgotCi1YTUxEb2N1bWVudFBhcnNl
clNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgpCi17Ci0gICAgY3VycmVudENhY2hlZFJl
c291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSNpZiBFTkFCTEUoWFNM
VCkKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdl
bmVyaWNFcnJvckZ1bmMpOwotICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJv
ckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyk7Ci0jZW5kaWYKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGMwNDA0M2I0OGIxMWVjNWI4ODM2MGFlM2UxNzliNWQxZWUxMmRmZmIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAotI2RlZmluZSBYTUxEb2N1bWVudFBhcnNl
clNjb3BlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgRU5BQkxFKFhT
TFQpCi0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSAgICBjbGFzcyBY
TUxEb2N1bWVudFBhcnNlclNjb3BlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWE1M
RG9jdW1lbnRQYXJzZXJTY29wZSk7Ci0gICAgcHVibGljOgotICAgICAgICBYTUxEb2N1bWVudFBh
cnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0g
ICAgICAgIH5YTUxEb2N1bWVudFBhcnNlclNjb3BlKCk7Ci0KLSAgICAgICAgc3RhdGljIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHhtbEdlbmVyaWNFcnJvckZ1bmMgZ2VuZXJpY0Vy
cm9yRnVuYywgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzdHJ1Y3R1cmVkRXJyb3JGdW5jID0gMCwg
dm9pZCogZXJyb3JDb250ZXh0ID0gMCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyOwotCi0jaWYg
RU5BQkxFKFhTTFQpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvckZ1bmMgbV9vbGRHZW5lcmljRXJy
b3JGdW5jOwotICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIG1fb2xkU3RydWN0dXJlZEVy
cm9yRnVuYzsKLSAgICAgICAgdm9pZCogbV9vbGRFcnJvckNvbnRleHQ7Ci0jZW5kaWYKLSAgICB9
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBYTUxEb2N1bWVudFBhcnNl
clNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYzNjk2Mzdi
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWE1MRG9j
dW1lbnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgorI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5o
IgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmVlRGVwdGhM
aW1pdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2lu
Y2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwor
Y29uc3QgaW50IG1heEVycm9ycyA9IDI1OworCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwdXNo
Q3VycmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKK3sKKyAgICBBU1NFUlQobik7CisgICAgQVNT
RVJUKG1fY3VycmVudE5vZGUpOworICAgIGlmIChuICE9IGRvY3VtZW50KCkpCisgICAgICAgIG4t
PnJlZigpOworICAgIG1fY3VycmVudE5vZGVTdGFjay5hcHBlbmQobV9jdXJyZW50Tm9kZSk7Cisg
ICAgbV9jdXJyZW50Tm9kZSA9IG47CisgICAgaWYgKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkg
PiBtYXhET01UcmVlRGVwdGgpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRXhjZXNzaXZl
IG5vZGUgbmVzdGluZy4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30KKwordm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUoKQoreworICAgIGlmICghbV9jdXJy
ZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2su
c2l6ZSgpKTsKKworICAgIGlmIChtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCisgICAgICAg
IG1fY3VycmVudE5vZGUtPmRlcmVmKCk7CisKKyAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50
Tm9kZVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnROb2RlU3RhY2sucmVtb3ZlTGFzdCgpOwor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjbGVhckN1cnJlbnROb2RlU3RhY2soKQorewor
ICAgIGlmIChtX2N1cnJlbnROb2RlICYmIG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKKyAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKKyAgICBtX2N1cnJlbnROb2RlID0gMDsKKyAg
ICBtX2xlYWZUZXh0Tm9kZSA9IDA7CisKKyAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUo
KSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2N1cnJl
bnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAtLWkpCisgICAgICAgICAgICBtX2N1cnJl
bnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2tb
MF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IGRvY3VtZW50KCkpCisgICAgICAgICAgICBt
X2N1cnJlbnROb2RlU3RhY2tbMF0tPmRlcmVmKCk7CisgICAgICAgIG1fY3VycmVudE5vZGVTdGFj
ay5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNv
bnN0IFNlZ21lbnRlZFN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMp
Cit7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gcy50b1N0cmluZygpOworCisgICAgaWYgKG1f
c2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9vcmlnaW5h
bFNvdXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmluZzsKKworICAgIGlmIChpc1N0b3BwZWQo
KSB8fCBtX3Nhd1hTTFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcGFy
c2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQocyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBkb1dyaXRlKHMudG9TdHJpbmcoKSk7CisKKyAgICAvLyBBZnRl
ciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBldmVudHMu
CisgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMoKTsKK30K
Kwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIG0sIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQoreworICAgIGhh
bmRsZUVycm9yKHR5cGUsIG0sIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoY29sdW1uTnVtYmVyKSkpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpoYW5k
bGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0aW9uMSBwb3Np
dGlvbikKK3sKKyAgICBpZiAodHlwZSA9PSBmYXRhbCB8fCAobV9lcnJvckNvdW50IDwgbWF4RXJy
b3JzICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9saW5lICE9IHBvc2l0aW9uLm1fbGluZSAmJiBt
X2xhc3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9IHBvc2l0aW9uLm1fY29sdW1uKSkgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ugd2FybmluZzoKKyAgICAgICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gIndhcm5pbmcgb24gbGluZSAiICsgU3RyaW5nOjpu
dW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4gIiArIFN0
cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjogIiArIG07
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZhdGFsOgorICAgICAg
ICAgICAgY2FzZSBub25GYXRhbDoKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0g
ImVycm9yIG9uIGxpbmUgIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fbGluZS5vbmVCYXNl
ZEludCgpKSArICIgYXQgY29sdW1uICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5tX2NvbHVt
bi5vbmVCYXNlZEludCgpKSArICI6ICIgKyBtOworICAgICAgICB9CisKKyAgICAgICAgbV9sYXN0
RXJyb3JQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICArK21fZXJyb3JDb3VudDsKKyAgICB9
CisKKyAgICBpZiAodHlwZSAhPSB3YXJuaW5nKQorICAgICAgICBtX3Nhd0Vycm9yID0gdHJ1ZTsK
KworICAgIGlmICh0eXBlID09IGZhdGFsKQorICAgICAgICBzdG9wUGFyc2luZygpOworfQorCit2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQoKQoreworI2lmICFVU0UoUVhNTFNUUkVB
TSkKKyAgICBBU1NFUlQobV9idWZmZXJlZFRleHQuc2l6ZSgpID09IDApOworI2VuZGlmCisgICAg
QVNTRVJUKCFtX2xlYWZUZXh0Tm9kZSk7CisgICAgbV9sZWFmVGV4dE5vZGUgPSBUZXh0OjpjcmVh
dGUoZG9jdW1lbnQoKSwgIiIpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG1f
bGVhZlRleHROb2RlLmdldCgpKTsKK30KKworI2lmICFVU0UoUVhNTFNUUkVBTSkKK3N0YXRpYyBp
bmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUp
IAoreyAKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihzdHJpbmcpLCBzaXplKTsgCit9CisjZW5kaWYKKworCit2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpleGl0VGV4dCgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fbGVhZlRleHROb2RlKQorICAgICAgICByZXR1cm47CisKKyNpZiAh
VVNFKFFYTUxTVFJFQU0pCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbV9sZWFmVGV4
dE5vZGUtPmFwcGVuZERhdGEodG9TdHJpbmcobV9idWZmZXJlZFRleHQuZGF0YSgpLCBtX2J1ZmZl
cmVkVGV4dC5zaXplKCkpLCBlYyk7CisgICAgVmVjdG9yPHhtbENoYXI+IGVtcHR5OworICAgIG1f
YnVmZmVyZWRUZXh0LnN3YXAoZW1wdHkpOworI2VuZGlmCisKKyAgICBpZiAobV92aWV3ICYmICFt
X2xlYWZUZXh0Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbV9sZWFmVGV4dE5vZGUtPmF0dGFj
aCgpOworCisgICAgbV9sZWFmVGV4dE5vZGUgPSAwOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpkZXRhY2goKQoreworICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOworICAgIFNjcmlw
dGFibGVEb2N1bWVudFBhcnNlcjo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJz
ZXI6OmVuZCgpCit7CisgICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyIHdpbGwgZG8gYmFk
IHRoaW5ncyB0byB0aGUgZG9jdW1lbnQgaWYgZG9FbmQoKSBpcyBjYWxsZWQuCisgICAgLy8gSSBk
b24ndCBiZWxpZXZlIFhNTERvY3VtZW50UGFyc2VyUXQgbmVlZHMgZG9FbmQgY2FsbGVkIGluIHRo
ZSBmcmFnbWVudCBjYXNlLgorICAgIEFTU0VSVCghbV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAg
ZG9FbmQoKTsKKworICAgIC8vIGRvRW5kKCkgY291bGQgcHJvY2VzcyBhIHNjcmlwdCB0YWcsIHRo
dXMgcGF1c2luZyBwYXJzaW5nLgorICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc2F3RXJyb3IpCisgICAgICAgIGluc2VydEVycm9yTWVzc2FnZUJs
b2NrKCk7CisgICAgZWxzZSB7CisgICAgICAgIGV4aXRUZXh0KCk7CisgICAgICAgIGRvY3VtZW50
KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOworICAgIH0K
KworICAgIGlmIChpc1BhcnNpbmcoKSkKKyAgICAgICAgcHJlcGFyZVRvU3RvcFBhcnNpbmcoKTsK
KyAgICBkb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERvY3VtZW50OjpJbnRlcmFjdGl2ZSk7Cisg
ICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJz
aW5nKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCit7CisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fcGFyc2VyU3RvcHBlZCkgaGVyZSwgc2luY2UgaXQg
ZG9lcyBub3QKKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIGFueSBtZXRob2RzIG9uIERvY3Vt
ZW50UGFyc2VyIG9uY2UgaXQncyBiZWVuIHN0b3BwZWQuCisgICAgLy8gSG93ZXZlciwgRnJhbWVM
b2FkZXI6OnN0b3AgY2FsbHMgRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCB1bmNvbmRpdGlvbmFsbHku
CisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpCisgICAgICAgIG1fZmluaXNoQ2FsbGVkID0gdHJ1
ZTsKKyAgICBlbHNlCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2Vy
OjpmaW5pc2hXYXNDYWxsZWQoKQoreworICAgIHJldHVybiBtX2ZpbmlzaENhbGxlZDsKK30KKwor
c3RhdGljIGlubGluZSBSZWZQdHI8RWxlbWVudD4gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRl
cihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZXMpCit7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgInBhcnNlcmVycm9yIiwgeGh0bWxOYW1lc3BhY2VVUkkpLCBmYWxzZSk7
CisgICAgcmVwb3J0RWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImRpc3BsYXk6IGJs
b2NrOyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJweCBzb2xpZCAjYzc3OyBwYWRkaW5nOiAw
IDFlbSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91bmQtY29sb3I6ICNmZGQ7IGNvbG9yOiBi
bGFjayIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVsZW1lbnQ+
IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVu
dC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKKyAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5j
cmVhdGVUZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiIp
LCBlYyk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZml4ZWQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQo
ZGl2VGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZml4ZWQuZ2V0
KCksIGVjKTsKKyAgICBmaXhlZC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImZvbnQtZmFtaWx5
Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIpOworICAgIGZpeGVkLT5hcHBlbmRDaGlsZChkb2Mt
PmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpLCBlYyk7CisKKyAgICBoMyA9IGRvYy0+Y3Jl
YXRlRWxlbWVudChoM1RhZywgZmFsc2UpOworICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxk
KGgzLmdldCgpLCBlYyk7CisgICAgaDMtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUo
IkJlbG93IGlzIGEgcmVuZGVyaW5nIG9mIHRoZSBwYWdlIHVwIHRvIHRoZSBmaXJzdCBlcnJvci4i
KSwgZWMpOworCisgICAgcmV0dXJuIHJlcG9ydEVsZW1lbnQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKCkKK3sKKyNpZiBVU0UoUVhNTFNUUkVB
TSkKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgor
ICAgIC8vIE9uZSBvciBtb3JlIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiB0aGUg
Y29kZS4gRGlzcGxheSBhbiBlcnJvciBibG9jayB0byB0aGUgdXNlciBhYm92ZQorICAgIC8vIHRo
ZSBub3JtYWwgY29udGVudCAodGhlIERPTSB0cmVlIGlzIGNyZWF0ZWQgbWFudWFsbHkgYW5kIGlu
Y2x1ZGVzIGxpbmUvY29sIGluZm8gcmVnYXJkaW5nCisgICAgLy8gd2hlcmUgdGhlIGVycm9ycyBh
cmUgbG9jYXRlZCkKKworICAgIC8vIENyZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQorICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3Vt
ZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgeworICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1s
VGFnLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwg
ZWMpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVFbGVt
ZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJv
ZHksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKKyAgICB9Cisj
aWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQtPm5hbWVzcGFjZVVS
SSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpIHsKKyAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2Up
OworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50
KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHks
IGVjKTsKKyAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBlYyk7Cisg
ICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudC5nZXQoKSwgZWMpOworICAg
ICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgIH0KKyNlbmRpZgorICAgIFJl
ZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRl
cihkb2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKKyAgICBkb2N1bWVudEVsZW1lbnQtPmluc2Vy
dEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSwgZWMp
OworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChkb2N1bWVudC0+dHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnQocFRhZywgZmFsc2UpOworICAgICAgICBwYXJhZ3JhcGgtPnNldEF0dHJp
YnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIik7CisgICAgICAgIHBhcmFncmFw
aC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3VtZW50IHdh
cyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRyYW5zZm9ybWF0aW9uLiBUaGUgbGlu
ZSBhbmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20gdGhlIHRyYW5zZm9ybWVkIHJlc3Vs
dC4iKSwgZWMpOworICAgICAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChwYXJhZ3JhcGgu
cmVsZWFzZSgpLCBlYyk7CisgICAgfQorI2VuZGlmCisgICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQoreworICAgIEFTU0VSVF9VTlVTRUQodW51
c2VkUmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1fcGVuZGluZ1NjcmlwdCk7CisgICAgQVNT
RVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDApOworCisgICAgU2NyaXB0U291
cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgYm9vbCBlcnJv
ck9jY3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CisgICAgYm9vbCB3
YXNDYW5jZWxlZCA9IG1fcGVuZGluZ1NjcmlwdC0+d2FzQ2FuY2VsZWQoKTsKKworICAgIG1fcGVu
ZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fcGVuZGluZ1NjcmlwdCA9IDA7
CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZSA9IG1fc2NyaXB0RWxlbWVudDsKKyAgICBtX3Njcmlw
dEVsZW1lbnQgPSAwOworCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2Ny
aXB0RWxlbWVudChlLmdldCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisKKyAgICAv
LyBKYXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhpcyBwYXJzZXIsIG1ha2Ugc3VyZSBpdCdzIGtlcHQg
YWxpdmUgZXZlbiBpZiBkZXRhY2hlZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHBy
b3RlY3QodGhpcyk7CisgICAgCisgICAgaWYgKGVycm9yT2NjdXJyZWQpCisgICAgICAgIHNjcmlw
dEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIGVsc2UgaWYgKCF3YXNDYW5jZWxl
ZCkgeworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwor
ICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaExvYWRFdmVudCgpOworICAgIH0KKworICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICBpZiAoIWlzRGV0YWNoZWQoKSAmJiAhbV9yZXF1
ZXN0aW5nU2NyaXB0KQorICAgICAgICByZXN1bWVQYXJzaW5nKCk7Cit9CisKK2Jvb2wgWE1MRG9j
dW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAoreworICAgIHJldHVybiBt
X3BlbmRpbmdTY3JpcHQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNlUGFyc2lu
ZygpCit7CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3BhcnNlclBhdXNlZCA9IHRydWU7Cit9CisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50
KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGlmICghY2h1bmsubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVt
ZW50IHRoZSBIVE1MNSBYTUwgRnJhZ21lbnQgcGFyc2luZyBhbGdvcml0aG06CisgICAgLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
dGhlLXhodG1sLXN5bnRheC5odG1sI3htbC1mcmFnbWVudC1wYXJzaW5nLWFsZ29yaXRobQorICAg
IC8vIEZvciBub3cgd2UgaGF2ZSBhIGhhY2sgZm9yIHNjcmlwdC9zdHlsZSBpbm5lckhUTUwgc3Vw
cG9ydDoKKyAgICBpZiAoY29udGV4dEVsZW1lbnQgJiYgKGNvbnRleHRFbGVtZW50LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGNvbnRleHRFbGVtZW50LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpKSB7CisgICAgICAgIGZyYWdtZW50LT5wYXJzZXJBZGRD
aGlsZChmcmFnbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUoY2h1bmspKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBw
YXJzZXIgPSBYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKGZyYWdtZW50LCBjb250ZXh0RWxlbWVu
dCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgYm9vbCB3ZWxsRm9ybWVkID0gcGFyc2VyLT5h
cHBlbmRGcmFnbWVudFNvdXJjZShjaHVuayk7CisgICAgLy8gRG8gbm90IGNhbGwgZmluaXNoKCku
ICBDdXJyZW50IGZpbmlzaCgpIGFuZCBkb0VuZCgpIGltcGxlbWVudGF0aW9ucyB0b3VjaCB0aGUg
bWFpbiBEb2N1bWVudC9sb2FkZXIKKyAgICAvLyBhbmQgY2FuIGNhdXNlIGNyYXNoZXMgaW4gdGhl
IGZyYWdtZW50IGNhc2UuCisgICAgcGFyc2VyLT5kZXRhY2goKTsgLy8gQWxsb3dzIH5Eb2N1bWVu
dFBhcnNlciB0byBhc3NlcnQgaXQgd2FzIGRldGFjaGVkIGJlZm9yZSBkZXN0cnVjdGlvbi4KKyAg
ICByZXR1cm4gd2VsbEZvcm1lZDsgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSdzIHdlbGxGb3Jt
ZWQgaXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2VsbEZvcm1lZCgpLgorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2FjZGQyNWM1NWRjMDM1YjhmMzJhNzQxNzVhNDZkOTg5ZWViMjc1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBYTUxEb2N1bWVudFBhcnNl
cl9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRl
ICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgVVNF
KFFYTUxTVFJFQU0pCisjaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxs
aWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBDYWNoZWRT
Y3JpcHQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIERvY3VtZW50RnJhZ21l
bnQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZVZpZXc7Citj
bGFzcyBQZW5kaW5nQ2FsbGJhY2tzOworY2xhc3MgVGV4dDsKKworI2lmICFVU0UoUVhNTFNUUkVB
TSkKKyAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8WE1MUGFy
c2VyQ29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WE1M
UGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQq
IHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRy
LCB2b2lkKiB1c2VyRGF0YSk7CisgICAgICAgIH5YTUxQYXJzZXJDb250ZXh0KCk7CisgICAgICAg
IHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4bWxQYXJzZXJDdHh0UHRy
IGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7CisgICAgfTsKKyNl
bmRpZgorCisgICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZp
ZXcqIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWE1M
RG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJhZ21lbnQq
IGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
cGVybWlzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBY
TUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlzc2lvbikpOworICAgICAg
ICB9CisKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7CisKKyAgICAgICAgLy8gRXhwb3Nl
ZCBmb3IgY2FsbGJhY2tzOgorICAgICAgICBlbnVtIEVycm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZh
dGFsLCBmYXRhbCB9OworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOworICAgICAg
ICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBv
c2l0aW9uMSk7CisKKyAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1M
KSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlzWEhUTUxE
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1M
KSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9CisgICAgICAgIGJvb2wgaXNYSFRN
TE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9CisjZW5k
aWYKKworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3Ry
aW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJl
bW92ZSBpdD8KKyAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVy
biAhbV9zYXdFcnJvcjsgfQorCisgICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkg
Y29uc3Q7CisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25z
dDsKKworICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5n
Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCos
IEZyYW1lVmlldyogPSAwKTsKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFn
bWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworCisgICAgICAg
IC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydChjb25z
dCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFy
c2luZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgICAgIHZpcnR1YWwg
aW50IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0
OworCisgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAgICAgdm9pZCBl
bmQoKTsKKworICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOworICAgICAgICB2b2lkIHJlc3Vt
ZVBhcnNpbmcoKTsKKworICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0
cmluZyYpOworCisjaWYgVVNFKFFYTUxTVFJFQU0pCitwcml2YXRlOgorICAgICAgICB2b2lkIHBh
cnNlKCk7CisgICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOworICAgICAgICB2b2lkIHBhcnNl
U3RhcnRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7CisgICAgICAg
IHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAgIHZvaWQgcGFy
c2VDb21tZW50KCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyAgICAgICAgdm9pZCBw
YXJzZUR0ZCgpOworICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CisjZWxzZQorcHVibGlj
OgorICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCisgICAgICAgIHZvaWQgZXJy
b3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdURl9BVFRS
SUJVVEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5zKGNvbnN0IHht
bENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxD
aGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5i
X2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOworICAgICAgICB2
b2lkIGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lkIGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hh
ciogcywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0
IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7CisgICAgICAgIHZvaWQgY2Rh
dGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKKyAgICAgICAgdm9pZCBjb21tZW50
KGNvbnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lkIHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1s
Q2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKTsK
KyAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4
bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCk7CisgICAgICAgIHZv
aWQgZW5kRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5p
dGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5nKCkpOwor
CisgICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKKyAgICAgICAg
dm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFj
aygpOworCisgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKKworICAgICAg
ICB2b2lkIGVudGVyVGV4dCgpOworICAgICAgICB2b2lkIGV4aXRUZXh0KCk7CisKKyAgICAgICAg
dm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRvRW5kKCk7CisKKyAg
ICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7CisKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luYWxTb3Vy
Y2VGb3JUcmFuc2Zvcm07CisKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVhtbFN0cmVh
bVJlYWRlciBtX3N0cmVhbTsKKyAgICAgICAgYm9vbCBtX3dyb3RlVGV4dDsKKyNlbHNlCisgICAg
ICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dCA/
IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKKyAgICAgICAgUmVmUHRyPFhNTFBhcnNlckNv
bnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IG1fcGVu
ZGluZ0NhbGxiYWNrczsKKyAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1fYnVmZmVyZWRUZXh0Owor
I2VuZGlmCisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5vZGU7CisgICAgICAgIFZl
Y3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOworCisgICAgICAgIFJlZlB0
cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKworICAgICAgICBib29sIG1fc2F3RXJyb3I7CisgICAg
ICAgIGJvb2wgbV9zYXdDU1M7CisgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CisgICAg
ICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1l
bnQ7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVu
dDsKKyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgorCisgICAg
ICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CisgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0
OworICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOworCisgICAgICAgIGludCBtX2Vycm9yQ291
bnQ7CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3NpdGlvbjsKKyAgICAgICAg
U3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKKworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
c2NyaXB0RWxlbWVudDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRp
b247CisKKyAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKKyAgICAgICAgQXRvbWljU3Ry
aW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKKyAgICAgICAg
UHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VNYXA7CisgICAgICAgIFNl
Z21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CisgICAgICAgIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CisgICAgfTsKKworI2lmIEVOQUJMRShYU0xU
KQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKKyNlbmRpZgorCitIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNP
Syk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFy
c2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYzOWZiNGVjN2RlZTA3MGE4MzUxNWFlMGM0
ZjQxMGY2YjcyODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC0wLDAgKzEsMTUxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSA8cG1rQHBvc3QuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgorCisjaW5jbHVkZSAi
Q0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29t
bWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRUeXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIuaCIKKyNp
bmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisj
aW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJv
ci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlwdEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlICJY
TUxOU05hbWVzLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIgorI2luY2x1
ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFhTTFQpCisjaW5j
bHVkZSAiWE1MVHJlZVZpZXdlci5oIgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgor
I2VuZGlmCisKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZW5k
aW5nQ2FsbGJhY2tzKTsKK3B1YmxpYzoKKyAgICB+UGVuZGluZ0NhbGxiYWNrcygpIHsgfQorICAg
IHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdDYWxsYmFja3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogeG1s
TG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVS
SSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5i
X2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBP
d25QdHI8UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIo
bmV3IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+
eG1sTG9jYWxOYW1lID0geG1sU3RyZHVwKHhtbExvY2FsTmFtZSk7CisgICAgICAgIGNhbGxiYWNr
LT54bWxQcmVmaXggPSB4bWxTdHJkdXAoeG1sUHJlZml4KTsKKyAgICAgICAgY2FsbGJhY2stPnht
bFVSSSA9IHhtbFN0cmR1cCh4bWxVUkkpOworICAgICAgICBjYWxsYmFjay0+bmJfbmFtZXNwYWNl
cyA9IG5iX25hbWVzcGFjZXM7CisgICAgICAgIGNhbGxiYWNrLT5uYW1lc3BhY2VzID0gc3RhdGlj
X2Nhc3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6ZW9mKHhtbENoYXIqKSAqIG5iX25hbWVzcGFj
ZXMgKiAyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAqIDIg
OyBpKyspCisgICAgICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlc1tpXSA9IHhtbFN0cmR1cChu
YW1lc3BhY2VzW2ldKTsKKyAgICAgICAgY2FsbGJhY2stPm5iX2F0dHJpYnV0ZXMgPSBuYl9hdHRy
aWJ1dGVzOworICAgICAgICBjYWxsYmFjay0+bmJfZGVmYXVsdGVkID0gbmJfZGVmYXVsdGVkOwor
ICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHhtbENoYXIqKj4oeG1s
TWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9hdHRyaWJ1dGVzICogNSkpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAgICAgICAgLy8g
RWFjaCBhdHRyaWJ1dGUgaGFzIDUgZWxlbWVudHMgaW4gdGhlIGFycmF5OgorICAgICAgICAgICAg
Ly8gbmFtZSwgcHJlZml4LCB1cmksIHZhbHVlIGFuZCBhbiBlbmQgcG9pbnRlci4KKworICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspCisgICAgICAgICAgICAgICAgY2FsbGJh
Y2stPmF0dHJpYnV0ZXNbaSAqIDUgKyBqXSA9IHhtbFN0cmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsg
al0pOworCisgICAgICAgICAgICBpbnQgbGVuID0gYXR0cmlidXRlc1tpICogNSArIDRdIC0gYXR0
cmlidXRlc1tpICogNSArIDNdOworCisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tp
ICogNSArIDNdID0geG1sU3RybmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgM10sIGxlbik7CisgICAg
ICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICogNSArIDRdID0gY2FsbGJhY2stPmF0dHJp
YnV0ZXNbaSAqIDUgKyAzXSArIGxlbjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2FsbGJhY2tz
LmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kRW5k
RWxlbWVudE5TQ2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGFk
b3B0UHRyKG5ldyBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2
b2lkIGFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQor
ICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gYWRvcHRQdHIobmV3IFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2spOworCisgICAgICAgIGNh
bGxiYWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOworICAgICAgICBjYWxsYmFjay0+bGVuID0g
bGVuOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwor
ICAgIH0KKworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soY29u
c3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQorICAgIHsKKyAgICAgICAg
T3duUHRyPFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFB0cihuZXcgUGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKTsKKworICAg
ICAgICBjYWxsYmFjay0+dGFyZ2V0ID0geG1sU3RyZHVwKHRhcmdldCk7CisgICAgICAgIGNhbGxi
YWNrLT5kYXRhID0geG1sU3RyZHVwKGRhdGEpOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ0RBVEFCbG9j
a0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCisgICAgeworICAgICAgICBPd25Q
dHI8UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVu
ZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk7CisKKyAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxTdHJu
ZHVwKHMsIGxlbik7CisgICAgICAgIGNhbGxiYWNrLT5sZW4gPSBsZW47CisKKyAgICAgICAgbV9j
YWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRDb21tZW50Q2FsbGJhY2soY29uc3QgeG1sQ2hhciogcykKKyAgICB7CisgICAgICAgIE93
blB0cjxQZW5kaW5nQ29tbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5k
aW5nQ29tbWVudENhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cmR1cChz
KTsKKworICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2soY29uc3QgeG1sQ2hh
ciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVt
SUQpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0ludGVybmFsU3Vic2V0Q2FsbGJhY2s+
IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKTsK
KworICAgICAgICBjYWxsYmFjay0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKKyAgICAgICAgY2Fs
bGJhY2stPmV4dGVybmFsSUQgPSB4bWxTdHJkdXAoZXh0ZXJuYWxJRCk7CisgICAgICAgIGNhbGxi
YWNrLT5zeXN0ZW1JRCA9IHhtbFN0cmR1cChzeXN0ZW1JRCk7CisKKyAgICAgICAgbV9jYWxsYmFj
a3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRF
cnJvckNhbGxiYWNrKFhNTERvY3VtZW50UGFyc2VyOjpFcnJvclR5cGUgdHlwZSwgY29uc3QgeG1s
Q2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCisgICAgewor
ICAgICAgICBPd25QdHI8UGVuZGluZ0Vycm9yQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIo
bmV3IFBlbmRpbmdFcnJvckNhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bWVzc2FnZSA9
IHhtbFN0cmR1cChtZXNzYWdlKTsKKyAgICAgICAgY2FsbGJhY2stPnR5cGUgPSB0eXBlOworICAg
ICAgICBjYWxsYmFjay0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGNhbGxiYWNr
LT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisKKyAgICAgICAgbV9jYWxsYmFja3MuYXBw
ZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsQW5kUmVtb3Zl
Rmlyc3RDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgIHsKKyAgICAgICAg
T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgY2FsbGJhY2stPmNhbGwocGFyc2VyKTsKKyAgICB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5pc0VtcHR5KCk7IH0KKworcHJpdmF0
ZToKKyAgICBQZW5kaW5nQ2FsbGJhY2tzKCkgeyB9CisKKyAgICBzdHJ1Y3QgUGVuZGluZ0NhbGxi
YWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NhbGxiYWNrKCkgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpID0gMDsKKyAgICB9Owor
CisgICAgc3RydWN0IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrIDogcHVibGljIFBlbmRp
bmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxi
YWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJlZSh4bWxMb2NhbE5hbWUpOworICAg
ICAgICAgICAgeG1sRnJlZSh4bWxQcmVmaXgpOworICAgICAgICAgICAgeG1sRnJlZSh4bWxVUkkp
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9uYW1lc3BhY2VzICogMjsgaSsr
KQorICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZXNwYWNlc1tpXSk7CisgICAgICAgICAgICB4
bWxGcmVlKG5hbWVzcGFjZXMpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9h
dHRyaWJ1dGVzOyBpKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBq
KyspCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlc1tpICogNSArIGpdKTsK
KyAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBwYXJzZXItPnN0YXJ0RWxlbWVudE5zKHhtbExvY2FsTmFtZSwgeG1sUHJlZml4
LCB4bWxVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX25hbWVz
cGFjZXMsIGNvbnN0X2Nhc3Q8Y29uc3QgeG1sQ2hhcioqPihuYW1lc3BhY2VzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVk
LCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4oYXR0cmlidXRlcykpOworICAgICAgICB9CisK
KyAgICAgICAgeG1sQ2hhciogeG1sTG9jYWxOYW1lOworICAgICAgICB4bWxDaGFyKiB4bWxQcmVm
aXg7CisgICAgICAgIHhtbENoYXIqIHhtbFVSSTsKKyAgICAgICAgaW50IG5iX25hbWVzcGFjZXM7
CisgICAgICAgIHhtbENoYXIqKiBuYW1lc3BhY2VzOworICAgICAgICBpbnQgbmJfYXR0cmlidXRl
czsKKyAgICAgICAgaW50IG5iX2RlZmF1bHRlZDsKKyAgICAgICAgeG1sQ2hhcioqIGF0dHJpYnV0
ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2sgOiBw
dWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9j
dW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5lbmRF
bGVtZW50TnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgUGVuZGluZ0NoYXJh
Y3RlcnNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0dWFs
IH5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1s
RnJlZShzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3Vt
ZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+Y2hhcmFj
dGVycyhzLCBsZW4pOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAgICAgICAg
aW50IGxlbjsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25DYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0dWFsIH5Q
ZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAg
ICAgICB4bWxGcmVlKHRhcmdldCk7CisgICAgICAgICAgICB4bWxGcmVlKGRhdGEpOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
dGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHRhcmdldDsKKyAg
ICAgICAgeG1sQ2hhciogZGF0YTsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdDREFUQUJs
b2NrQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB+
UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbEZy
ZWUocyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVu
dFBhcnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZXItPmNkYXRhQmxv
Y2socywgbGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHM7CisgICAgICAgIGlu
dCBsZW47CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nQ29tbWVudENhbGxiYWNrIDogcHVi
bGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdDb21tZW50Q2Fs
bGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxGcmVlKHMpOworICAgICAgICB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5jb21tZW50KHMpOworICAgICAgICB9CisKKyAg
ICAgICAgeG1sQ2hhciogczsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdJbnRlcm5hbFN1
YnNldENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwg
flBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
eG1sRnJlZShuYW1lKTsKKyAgICAgICAgICAgIHhtbEZyZWUoZXh0ZXJuYWxJRCk7CisgICAgICAg
ICAgICB4bWxGcmVlKHN5c3RlbUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHBhcnNlci0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAg
ICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogbmFtZTsKKyAgICAgICAgeG1sQ2hhciogZXh0ZXJu
YWxJRDsKKyAgICAgICAgeG1sQ2hhciogc3lzdGVtSUQ7CisgICAgfTsKKworICAgIHN0cnVjdCBQ
ZW5kaW5nRXJyb3JDYWxsYmFjazogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZp
cnR1YWwgflBlbmRpbmdFcnJvckNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1s
RnJlZShtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+
aGFuZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSksIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBYTUxEb2N1bWVudFBh
cnNlcjo6RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIHhtbENoYXIqIG1lc3NhZ2U7CisgICAgICAg
IGludCBsaW5lTnVtYmVyOworICAgICAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIH07CisKKyAg
ICBEZXF1ZTxPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiA+IG1fY2FsbGJhY2tzOworfTsKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbnQgZ2xvYmFsRGVzY3Jp
cHRvciA9IDA7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBsaWJ4bWxMb2FkZXJUaHJlYWQgPSAw
OworCitzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKK3sKKyAgICAvLyBPbmx5IG1h
dGNoIGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0aGluIFhN
TERvY3VtZW50UGFyc2VyIHRvIGF2b2lkCisgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBjbGllbnQg
YXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCisgICAgcmV0dXJuIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gbGli
eG1sTG9hZGVyVGhyZWFkOworfQorCitjbGFzcyBPZmZzZXRCdWZmZXIgeworcHVibGljOgorICAg
IE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiksIG1fY3Vy
cmVudE9mZnNldCgwKSB7IH0KKworICAgIGludCByZWFkT3V0Qnl0ZXMoY2hhciogb3V0cHV0QnVm
ZmVyLCB1bnNpZ25lZCBhc2tlZFRvUmVhZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVz
TGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVudE9mZnNldDsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuVG9Db3B5ID0gbWluKGFza2VkVG9SZWFkLCBieXRlc0xlZnQpOworICAgICAgICBpZiAo
bGVuVG9Db3B5KSB7CisgICAgICAgICAgICBtZW1jcHkob3V0cHV0QnVmZmVyLCBtX2J1ZmZlci5k
YXRhKCkgKyBtX2N1cnJlbnRPZmZzZXQsIGxlblRvQ29weSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRPZmZzZXQgKz0gbGVuVG9Db3B5OworICAgICAgICB9CisgICAgICAgIHJldHVybiBsZW5Ub0Nv
cHk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICB1
bnNpZ25lZCBtX2N1cnJlbnRPZmZzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBzd2l0Y2hUb1VURjE2
KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKK3sKKyAgICAvLyBIYWNrIGFyb3VuZCBsaWJ4bWwyJ3Mg
bGFjayBvZiBlbmNvZGluZyBvdmVyaWRlIHN1cHBvcnQgYnkgbWFudWFsbHkKKyAgICAvLyByZXNl
dHRpbmcgdGhlIGVuY29kaW5nIHRvIFVURi0xNiBiZWZvcmUgZXZlcnkgY2h1bmsuICBPdGhlcndp
c2UgbGlieG1sCisgICAgLy8gd2lsbCBkZXRlY3QgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0iPGVuY29kaW5nIG5hbWU+Ij8+IGJsb2NrcworICAgIC8vIGFuZCBzd2l0Y2ggZW5jb2Rpbmdz
LCBjYXVzaW5nIHRoZSBwYXJzZSB0byBmYWlsLgorICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVG
RjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOworICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0
eHQsIEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFIDogWE1M
X0NIQVJfRU5DT0RJTkdfVVRGMTZCRSk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFsbG93RXh0
ZXJuYWxMb2FkKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJs
LnN0cmluZygpOworCisgICAgLy8gT24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGxpYnhtbCBhc2tz
IGZvciB0aGlzIFVSTCwgdGhlCisgICAgLy8gIlhNTF9YTUxfREVGQVVMVF9DQVRBTE9HIiwgb24g
aW5pdGlhbGl6YXRpb24uCisgICAgaWYgKHVybFN0cmluZyA9PSAiZmlsZTovLy9ldGMveG1sL2Nh
dGFsb2ciKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBsaWJ4
bWwgY29tcHV0ZXMgYSBVUkwgcmVsYXRpdmUgdG8gd2hlcmUgaXRzIERMTCByZXNpZGVzLgorICAg
IGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTovLy8iLCBmYWxzZSkgJiYgdXJsU3RyaW5n
LmVuZHNXaXRoKCIvZXRjL2NhdGFsb2ciLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBEVEQuICBUaGVyZSBpc24ndCBtdWNoIHBvaW50IGlu
IGhhbW1lcmluZyB3d3cudzNjLm9yZworICAgIC8vIGJ5IHJlcXVlc3RpbmcgdGhpcyBVUkwgZm9y
IGV2ZXJ5IFhIVE1MIGRvY3VtZW50LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0
cDovL3d3dy53My5vcmcvVFIveGh0bWwiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFNpbWlsYXJseSwgdGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiByZXF1ZXN0aW5n
IHRoZSBTVkcgRFRELgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy53
My5vcmcvR3JhcGhpY3MvU1ZHIiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgbGlieG1sIGRvZXNuJ3QgZ2l2ZSB1cyBhIGxvdCBvZiBjb250ZXh0IGZvciBkZWNp
ZGluZyB3aGV0aGVyIHRvCisgICAgLy8gYWxsb3cgdGhpcyByZXF1ZXN0LiAgSW4gdGhlIHdvcnN0
IGNhc2UsIHRoaXMgbG9hZCBjb3VsZCBiZSBmb3IgYW4KKyAgICAvLyBleHRlcm5hbCBlbnRpdHkg
YW5kIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgY291bGQgc2ltcGx5IHJlYWQgdGhlCisgICAgLy8g
cmV0cmlldmVkIGNvbnRlbnQuICBJZiB3ZSBoYWQgbW9yZSBjb250ZXh0LCB3ZSBjb3VsZCBwb3Rl
bnRpYWxseSBhbGxvdworICAgIC8vIHRoZSBwYXJzZXIgdG8gbG9hZCBhIERURC4gIEFzIHRoaW5n
cyBzdGFuZCwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlCisgICAgLy8gcm91dGUgYW5kIGFsbG93
IHNhbWUtb3JpZ2luIHJlcXVlc3RzIG9ubHkuCisgICAgaWYgKCFYTUxEb2N1bWVudFBhcnNlclNj
b3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
OjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1
cmwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCit7CisgICAgQVNTRVJU
KFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcik7Cisg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQpOworCisgICAg
S1VSTCB1cmwoS1VSTCgpLCB1cmkpOworCisgICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9h
ZCh1cmwpKQorICAgICAgICByZXR1cm4gJmdsb2JhbERlc2NyaXB0b3I7CisKKyAgICBSZXNvdXJj
ZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgVmVjdG9y
PGNoYXI+IGRhdGE7CisKKworICAgIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hl
ZFJlc291cmNlTG9hZGVyOworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKDAp
OworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGdsb2Jh
bCBlcnJvciBoYW5kbGVyIGFzIHdlbGwuCisKKyAgICAgICAgaWYgKGNhY2hlZFJlc291cmNlTG9h
ZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCkt
PmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZl
IHRvIGNoZWNrIHRoZSBVUkwgYWdhaW4gYWZ0ZXIgdGhlIGxvYWQgdG8gY2F0Y2ggcmVkaXJlY3Rz
LgorICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTYzPi4KKyAgICBpZiAoIXNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKHJlc3BvbnNlLnVybCgpKSkK
KyAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOworCisgICAgcmV0dXJuIG5ldyBPZmZz
ZXRCdWZmZXIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZEZ1bmModm9pZCogY29udGV4dCwg
Y2hhciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIC8vIERvIDAtYnl0ZSByZWFkcyBpbiBjYXNl
IG9mIGEgbnVsbCBkZXNjcmlwdG9yCisgICAgaWYgKGNvbnRleHQgPT0gJmdsb2JhbERlc2NyaXB0
b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgT2Zmc2V0QnVmZmVyKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7CisgICAgcmV0dXJuIGRhdGEtPnJlYWRPdXRC
eXRlcyhidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQqLCBjb25z
dCBjaGFyKiwgaW50KQoreworICAgIC8vIEFsd2F5cyBqdXN0IGRvIDAtYnl0ZSB3cml0ZXMKKyAg
ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZUZ1bmModm9pZCogY29udGV4dCkKK3sK
KyAgICBpZiAoY29udGV4dCAhPSAmZ2xvYmFsRGVzY3JpcHRvcikgeworICAgICAgICBPZmZzZXRC
dWZmZXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxPZmZzZXRCdWZmZXIqPihjb250ZXh0KTsKKyAgICAg
ICAgZGVsZXRlIGRhdGE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKFhT
TFQpCitzdGF0aWMgdm9pZCBlcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCit7Cisg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlcyBz
b21ld2hlcmUuCit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgZGlkSW5pdCA9IGZhbHNlOworCitQ
YXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmlu
Z1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAgICB4bWxS
ZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5jLCBjbG9z
ZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9w
ZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExvYWRlclRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7CisgICAgfQorCisg
ICAgeG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dChoYW5k
bGVycywgMCwgMCwgMCwgMCk7CisgICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRhOworICAg
IHBhcnNlci0+cmVwbGFjZUVudGl0aWVzID0gdHJ1ZTsKKyAgICBzd2l0Y2hUb1VURjE2KHBhcnNl
cik7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFyc2VyKSk7
Cit9CisKKworLy8gQ2h1bmsgc2hvdWxkIGJlIGVuY29kZWQgaW4gVVRGLTgKK1Bhc3NSZWZQdHI8
WE1MUGFyc2VyQ29udGV4dD4gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKHht
bFNBWEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBj
aHVuaykKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOwor
ICAgICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJl
YWRGdW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyht
YXRjaEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnht
bExvYWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7
CisgICAgfQorCisgICAgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSBjaGVja3MgdGhhdCB0aGUg
bGVuZ3RoIGRvZXNuJ3Qgb3ZlcmZsb3cgYW4gaW50LgorICAgIHhtbFBhcnNlckN0eHRQdHIgcGFy
c2VyID0geG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dChjaHVuay5kYXRhKCksIGNodW5rLmxlbmd0
aCgpKTsKKworICAgIGlmICghcGFyc2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIENv
cHkgdGhlIHNheCBoYW5kbGVyCisgICAgbWVtY3B5KHBhcnNlci0+c2F4LCBoYW5kbGVycywgc2l6
ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKworICAgIC8vIFNldCBwYXJzZXIgb3B0aW9ucy4KKyAgICAv
LyBYTUxfUEFSU0VfTk9ESUNUOiBkZWZhdWx0IGRpY3Rpb25hcnkgb3B0aW9uLgorICAgIC8vIFhN
TF9QQVJTRV9OT0VOVDogZm9yY2UgZW50aXRpZXMgc3Vic3RpdHV0aW9ucy4KKyAgICB4bWxDdHh0
VXNlT3B0aW9ucyhwYXJzZXIsIFhNTF9QQVJTRV9OT0RJQ1QgfCBYTUxfUEFSU0VfTk9FTlQpOwor
CisgICAgLy8gSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24KKyAgICBwYXJzZXItPnNheDIgPSAxOwor
ICAgIHBhcnNlci0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsgLy8gV2UgYXJlIHBhcnNp
bmcgYSBDT05URU5UCisgICAgcGFyc2VyLT5kZXB0aCA9IDA7CisgICAgcGFyc2VyLT5zdHJfeG1s
ID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIEJBRF9DQVNUICJ4bWwiLCAzKTsKKyAgICBw
YXJzZXItPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAi
eG1sbnMiLCA1KTsKKyAgICBwYXJzZXItPnN0cl94bWxfbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNl
ci0+ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsKKyAgICBwYXJzZXItPl9wcml2YXRlID0g
dXNlckRhdGE7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFy
c2VyKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wg
WE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNp
b24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFy
c2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJh
bWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwg
bV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV9wZW5kaW5nQ2Fs
bGJhY2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgpKQorICAgICwgbV9jdXJyZW50Tm9kZShk
b2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhmYWxzZSkK
KyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVsZW1lbnQo
ZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVE
ZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCisg
ICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxz
ZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0
UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1NjcmlwdCgw
KQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQ
b3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3Njcmlw
dGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworfQorCitYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQs
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50
LT5kb2N1bWVudCgpKQorICAgICwgbV92aWV3KDApCisgICAgLCBtX2NvbnRleHQoMCkKKyAgICAs
IG1fcGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKKyAgICAsIG1f
Y3VycmVudE5vZGUoZnJhZ21lbnQpCisgICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQorICAgICwgbV9z
YXdDU1MoZmFsc2UpCisgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKKyAgICAsIG1fc2F3
Rmlyc3RFbGVtZW50KGZhbHNlKQorICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwg
bV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcGFyc2VyUGF1
c2VkKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQorICAgICwgbV9maW5p
c2hDYWxsZWQoZmFsc2UpCisgICAgLCBtX2Vycm9yQ291bnQoMCkKKyAgICAsIG1fbGFzdEVycm9y
UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX3Bl
bmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24x
OjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCisg
ICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICBm
cmFnbWVudC0+cmVmKCk7CisKKyAgICAvLyBBZGQgbmFtZXNwYWNlcyBiYXNlZCBvbiB0aGUgcGFy
ZW50IG5vZGUKKyAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1TdGFjazsKKyAgICB3aGlsZSAocGFy
ZW50RWxlbWVudCkgeworICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1lbnQpOwor
CisgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnROb2RlKCk7
CisgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Cisg
ICAgfQorCisgICAgaWYgKGVsZW1TdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2su
aXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0geG1sbnNBdG9tKQorICAgICAgICAgICAg
ICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcmVmaXhUb05hbWVzcGFjZU1hcC5zZXQoYXR0ci0+bG9jYWxOYW1lKCksIGF0
dHItPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
SWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkg
YmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVz
cGFjZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRF
bGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBh
cmVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxQYXJzZXJDb250ZXh0Ojp+WE1M
UGFyc2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29udGV4dC0+bXlEb2MpCisgICAgICAgIHht
bEZyZWVEb2MobV9jb250ZXh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQobV9jb250
ZXh0KTsKK30KKworWE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1bWVudFBhcnNlcigpCit7Cisg
ICAgLy8gVGhlIFhNTERvY3VtZW50UGFyc2VyIHdpbGwgYWx3YXlzIGJlIGRldGFjaGVkIGJlZm9y
ZSBiZWluZyBkZXN0cm95ZWQuCisgICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5
KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CisKKyAgICAvLyBGSVhNRTogbV9wZW5k
aW5nU2NyaXB0IGhhbmRsaW5nIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFhNTERvY3VtZW50UGFyc2Vy
LmNwcCEKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0
ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNEZXRhY2hlZCgp
KTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQo
KTsKKworICAgIC8vIFByb3RlY3QgdGhlIGxpYnhtbCBjb250ZXh0IGZyb20gZGVsZXRpb24gZHVy
aW5nIGEgY2FsbGJhY2sKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY29udGV4dCA9IG1f
Y29udGV4dDsKKworICAgIC8vIGxpYlhNTCB0aHJvd3MgYW4gZXJyb3IgaWYgeW91IHRyeSB0byBz
d2l0Y2ggdGhlIGVuY29kaW5nIGZvciBhbiBlbXB0eSBzdHJpbmcuCisgICAgaWYgKHBhcnNlU3Ry
aW5nLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGNhdXNlIHRoZSBwYXJz
ZXIgdG8gZGV0YWNoIGR1cmluZyB4bWxQYXJzZUNodW5rCisgICAgICAgIC8vIGtlZXAgdGhpcyBh
bGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxYTUxEb2N1
bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBzd2l0Y2hUb1VURjE2KGNvbnRl
eHQtPmNvbnRleHQoKSk7CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgICAgIHhtbFBhcnNlQ2h1bmso
Y29udGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0
cmluZy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIpICogcGFyc2VTdHJpbmcubGVuZ3RoKCks
IDApOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgKHdoaWNoIG1heSBiZSBydW4gdW5kZXIgdGhl
IHhtbFBhcnNlQ2h1bmsgY2FsbHN0YWNrKSBtYXkKKyAgICAgICAgLy8gY2F1c2UgdGhlIHBhcnNl
ciB0byBiZSBzdG9wcGVkIG9yIGRldGFjaGVkLgorICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGhl
cmU/ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nlc3MgdGhlIHBhc3NlZCBzb3VyY2U/Cisg
ICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVyKCktPnNh
d0Vycm9yKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9yLCByZXBv
cnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFs
LCAiRW5jb2RpbmcgZXJyb3IiLCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5saW5lLCBjb250
ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBT
dHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihz
dHJpbmcpLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3Qg
eG1sQ2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIEF0b21p
Y1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcsIHNpemVfdCBzaXpl
KQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIEF0b21pY1N0
cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJu
IEF0b21pY1N0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3Ry
aW5nKSk7Cit9CisKK3N0cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB7CisgICAgY29uc3QgeG1sQ2hh
ciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKK307Cit0eXBlZGVmIHN0cnVjdCBf
eG1sU0FYMk5hbWVzcGFjZSB4bWxTQVgyTmFtZXNwYWNlOworCitzdGF0aWMgaW5saW5lIHZvaWQg
aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMoRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3QgeG1sQ2hh
cioqIGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1lc3BhY2VzLCBFeGNlcHRpb25Db2RlJiBl
YywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7Cisg
ICAgeG1sU0FYMk5hbWVzcGFjZSogbmFtZXNwYWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FY
Mk5hbWVzcGFjZSo+KGxpYnhtbE5hbWVzcGFjZXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bmJfbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VRTmFt
ZSA9IHhtbG5zQXRvbTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHRvQXRv
bWljU3RyaW5nKG5hbWVzcGFjZXNbaV0udXJpKTsKKyAgICAgICAgaWYgKG5hbWVzcGFjZXNbaV0u
cHJlZml4KQorICAgICAgICAgICAgbmFtZXNwYWNlUU5hbWUgPSAieG1sbnM6IiArIHRvU3RyaW5n
KG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRl
TlMoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5hbWVzcGFjZVFOYW1lLCBuYW1lc3Bh
Y2VVUkksIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAvLyBleGNl
cHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQor
CitzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHsKKyAgICBjb25zdCB4bWxDaGFyKiBsb2NhbG5h
bWU7CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsK
KyAgICBjb25zdCB4bWxDaGFyKiB2YWx1ZTsKKyAgICBjb25zdCB4bWxDaGFyKiBlbmQ7Cit9Owor
dHlwZWRlZiBzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHhtbFNBWDJBdHRyaWJ1dGVzOworCitz
dGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogbmV3RWxl
bWVudCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMsIGludCBuYl9hdHRyaWJ1dGVz
LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCit7CisgICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSByZWlu
dGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKKyAgICAgICAgaW50IHZh
bHVlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0dHJpYnV0
ZXNbaV0udmFsdWUpOworICAgICAgICBBdG9taWNTdHJpbmcgYXR0clZhbHVlID0gdG9BdG9taWNT
dHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOworICAgICAgICBTdHJpbmcg
YXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKKyAgICAgICAgQXRv
bWljU3RyaW5nIGF0dHJVUkkgPSBhdHRyUHJlZml4LmlzRW1wdHkoKSA/IEF0b21pY1N0cmluZygp
IDogdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS51cmkpOworICAgICAgICBBdG9taWNTdHJp
bmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyB0b0F0b21pY1N0cmluZyhhdHRy
aWJ1dGVzW2ldLmxvY2FsbmFtZSkgOiBhdHRyUHJlZml4ICsgIjoiICsgdG9TdHJpbmcoYXR0cmli
dXRlc1tpXS5sb2NhbG5hbWUpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5T
KGF0dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7
CisgICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcworICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRF
bGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQ
cmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFj
ZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4bWxDaGFyKiog
bGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFj
a3MtPmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soeG1sTG9jYWxOYW1lLCB4bWxQcmVmaXgs
IHhtbFVSSSwgbmJfbmFtZXNwYWNlcywgbGlieG1sTmFtZXNwYWNlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMs
IG5iX2RlZmF1bHRlZCwgbGlieG1sQXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQRSBEZWNs
YXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cworICAgIGlmICghbV9oYXNEb2NUeXBl
RGVjbGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAg
ICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVt
YmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgZXhpdFRleHQoKTsKKworICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSB0b0F0b21p
Y1N0cmluZyh4bWxMb2NhbE5hbWUpOworICAgIEF0b21pY1N0cmluZyB1cmkgPSB0b0F0b21pY1N0
cmluZyh4bWxVUkkpOworICAgIEF0b21pY1N0cmluZyBwcmVmaXggPSB0b0F0b21pY1N0cmluZyh4
bWxQcmVmaXgpOworCisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkg
eworICAgICAgICBpZiAoIXByZWZpeC5pc051bGwoKSkKKyAgICAgICAgICAgIHVyaSA9IG1fcHJl
Zml4VG9OYW1lc3BhY2VNYXAuZ2V0KHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICB9CisKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsK
KyAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcuMSBvZiBPTUEtV0FQLVhIVE1MTVAtVjFf
MS0yMDA2MTAyMC1BLnBkZiwKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRo
ZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCisgICAgICAgIC8vIGVuc3VyZSB0aGUg
bmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJwor
ICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJworICAgICAg
ICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAg
ICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0
bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1cmkuaXNOdWxsKCkp
IHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkk7CisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9z
YXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisgICAgUXVh
bGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBSZWZQdHI8RWxl
bWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUp
OworICAgIGlmICghbmV3RWxlbWVudCkgeworICAgICAgICBzdG9wUGFyc2luZygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxl
RWxlbWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sTmFtZXNwYWNlcywgbmJf
bmFtZXNwYWNlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBoYW5k
bGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgpLCBsaWJ4bWxBdHRyaWJ1dGVzLCBu
Yl9hdHRyaWJ1dGVzLCBlYywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5l
d0VsZW1lbnQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTY3JpcHRFbGVtZW50KiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgIGlm
IChzY3JpcHRFbGVtZW50KQorICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSB0ZXh0UG9z
aXRpb25PbmVCYXNlZCgpOworCisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3
RWxlbWVudC5nZXQoKSk7CisKKyAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5nZXQoKSk7
CisgICAgaWYgKG1fdmlldyAmJiAhbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3
RWxlbWVudC0+YXR0YWNoKCk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpCisg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KG5ld0VsZW1lbnQuZ2V0KCkpLT5p
bnNlcnRlZEJ5UGFyc2VyKCk7CisjZW5kaWYKKworICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQg
JiYgaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxl
KCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCit7CisgICAg
aWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQYXVz
ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFbmRFbGVtZW50TlNDYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSmF2YVNjcmlwdCBjYW4g
ZGV0YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhpcyBpcyBub3QgcmVsZWFzZWQKKyAgICAv
LyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQ
YXJzZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IG4gPSBtX2N1cnJlbnROb2RlOworICAgIG4tPmZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpOworCisgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlw
dGluZ05vdEFsbG93ZWQgJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudChz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSkpKSB7CisgICAgICAgIHBvcEN1cnJlbnROb2Rl
KCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG4tPnJlbW92ZShlYyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUoKSB8fCAh
bV92aWV3KSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0
KCkpOworCisgICAgLy8gVGhlIGVsZW1lbnQncyBwYXJlbnQgbWF5IGhhdmUgYWxyZWFkeSBiZWVu
IHJlbW92ZWQgZnJvbSBkb2N1bWVudC4KKyAgICAvLyBQYXJzaW5nIGNvbnRpbnVlcyBpbiB0aGlz
IGNhc2UsIGJ1dCBzY3JpcHRzIGFyZW4ndCBleGVjdXRlZC4KKyAgICBpZiAoIWVsZW1lbnQtPmlu
RG9jdW1lbnQoKSkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxl
bWVudChlbGVtZW50KTsKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQpIHsKKyAgICAgICAgcG9wQ3Vy
cmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGxvYWQg
ZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cpLgorICAg
IEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVl
OworCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBh
cmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2Fj
eVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5pc1Njcmlw
dFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmli
dXRlKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVs
ZW1lbnQodHJ1ZSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU2Ny
aXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgLy8gdGhlIGxp
YnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KKworICAgICAg
ICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKKyAgICAgICAg
ICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0
UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2Vy
RXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVu
dC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50
OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAg
ICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5
IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBpZiAobV9w
ZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICAgICAgLy8gSmF2
YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCisgICAgICAgIGlmIChpc0RldGFj
aGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVxdWVzdGluZ1Njcmlw
dCA9IGZhbHNlOworICAgIHBvcEN1cnJlbnROb2RlKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAgICBpZiAo
aXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkg
eworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhz
LCBsZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xlYWZUZXh0Tm9k
ZSkKKyAgICAgICAgZW50ZXJUZXh0KCk7CisgICAgbV9idWZmZXJlZFRleHQuYXBwZW5kKHMsIGxl
bik7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKEVycm9yVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgaWYgKGlzU3RvcHBlZCgp
KQorICAgICAgICByZXR1cm47CisKKyNpZiBDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxFUihSVkNU
KSB8fCBDT01QSUxFUihNSU5HVykKKyAgICBjaGFyIG1bMTAyNF07CisgICAgdnNucHJpbnRmKG0s
IHNpemVvZihtKSAtIDEsIG1lc3NhZ2UsIGFyZ3MpOworI2Vsc2UKKyAgICBjaGFyKiBtOworICAg
IGlmICh2YXNwcmludGYoJm0sIG1lc3NhZ2UsIGFyZ3MpID09IC0xKQorICAgICAgICByZXR1cm47
CisjZW5kaWYKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgbV9wZW5kaW5nQ2Fs
bGJhY2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
eG1sQ2hhcio+KG0pLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICBlbHNlCisg
ICAgICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkp
OworCisjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhQ09NUElMRVIo
TUlOR1cpCisgICAgZnJlZShtKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
Ojpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxD
aGFyKiBkYXRhKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBw
ZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2sodGFyZ2V0LCBkYXRhKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICAvLyAjIyMgaGFuZGxlIGV4
Y2VwdGlvbnMKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UHJvY2Vzc2lu
Z0luc3RydWN0aW9uPiBwaSA9IGRvY3VtZW50KCktPmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlv
bigKKyAgICAgICAgdG9TdHJpbmcodGFyZ2V0KSwgdG9TdHJpbmcoZGF0YSksIGVjKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1
ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChwaS5nZXQoKSk7CisgICAg
aWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAgIHBpLT5hdHRhY2goKTsKKwor
ICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlmIChwaS0+aXNDU1MoKSkK
KyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShYU0xUKQorICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOworICAgIGlmICht
X3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQo
KSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYg
KGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQp
IHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDREFUQUJsb2NrQ2FsbGJhY2so
cywgbGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAg
ICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9j
dW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRk
Q2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNo
ZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNvbW1lbnQoY29uc3QgeG1sQ2hhciogcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBt
X3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENvbW1lbnRDYWxsYmFjayhzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29tbWVudD4gbmV3
Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7CisgICAgbV9j
dXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmll
dyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9
CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciog
dmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKQoreworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKHZlcnNpb24pCisgICAgICAgIGRvY3Vt
ZW50KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVyc2lvbiksIGVjKTsKKyAgICBkb2N1bWVu
dCgpLT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUgPT0gMSwgZWMpOyAvLyBwb3NzaWJsZSB2
YWx1ZXMgYXJlIDAsIDEsIGFuZCAtMQorICAgIGlmIChlbmNvZGluZykKKyAgICAgICAgZG9jdW1l
bnQoKS0+c2V0WE1MRW5jb2RpbmcodG9TdHJpbmcoZW5jb2RpbmcpKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRp
ZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25zdCB4bWxD
aGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0
ZW1JRCkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZElu
dGVybmFsU3Vic2V0Q2FsbGJhY2sobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50KCkpIHsKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7CisgICAg
ICAgIFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CisgICAgICAgIGlmIChleHRJZCA9
PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIKKyAgICAgICAgICAgIHx8
IGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikgeworICAg
ICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVj
bGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAgICAgICAg
ICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisK
KyAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0b1N0cmlu
ZyhzeXN0ZW1JRCkpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgWE1MRG9jdW1lbnRQYXJz
ZXIqIGdldFBhcnNlcih2b2lkKiBjbG9zdXJlKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4
dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxYTUxEb2N1bWVudFBhcnNlcio+KGN0eHQtPl9wcml2YXRlKTsKK30KKworLy8g
VGhpcyBpcyBhIGhhY2sgYXJvdW5kIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTIxOQorLy8gT3RoZXJ3aXNlIGxpYnhtbCBzZWVtcyB0byBjYWxsIGFsbCB0aGUg
U0FYIGNhbGxiYWNrcyB0d2ljZSBmb3IgYW55IHJlcGxhY2VkIGVudGl0eS4KK3N0YXRpYyBpbmxp
bmUgYm9vbCBoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKHZvaWQqIGNsb3N1cmUpCit7CisjaWYg
TElCWE1MX1ZFUlNJT04gPj0gMjA2MjcKKyAgICBVTlVTRURfUEFSQU0oY2xvc3VyZSk7CisKKyAg
ICAvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBsaWJ4bWwgMi42LjI3LgorICAgIHJldHVy
biBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+
KGNsb3N1cmUpLT5ub2RlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0RWxlbWVudE5z
SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWUsIGNvbnN0IHht
bENoYXIqIHByZWZpeCwgY29uc3QgeG1sQ2hhciogdXJpLCBpbnQgbmJfbmFtZXNwYWNlcywgY29u
c3QgeG1sQ2hhcioqIG5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVs
dGVkLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaGFja0Fy
b3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0
UGFyc2VyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhsb2NhbG5hbWUsIHByZWZpeCwgdXJpLCBu
Yl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxp
YnhtbEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZCBlbmRFbGVtZW50TnNIYW5kbGVyKHZv
aWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hh
ciopCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZW5kRWxlbWVudE5zKCk7Cit9
CisKK3N0YXRpYyB2b2lkIGNoYXJhY3RlcnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHht
bENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWco
Y2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2hh
cmFjdGVycyhzLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25I
YW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hh
ciogZGF0YSkKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5wcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgY2RhdGFCbG9ja0hhbmRs
ZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAgICBpZiAo
aGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5jZGF0YUJsb2NrKHMsIGxlbik7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIGNvbW1lbnQp
Cit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y29tbWVudChjb21tZW50KTsKK30K
KworV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKK3N0YXRpYyB2b2lkIHdhcm5pbmdIYW5kbGVy
KHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1
cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6d2FybmluZywgbWVzc2FnZSwgYXJncyk7Cisg
ICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKQorc3RhdGlj
IHZvaWQgZmF0YWxFcnJvckhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBtZXNzYWdl
KTsKKyAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVycm9yKFhNTERvY3VtZW50UGFyc2VyOjpmYXRh
bCwgbWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRF
X1BSSU5URigyLCAzKQorc3RhdGljIHZvaWQgbm9ybWFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1
cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAg
dmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihY
TUxEb2N1bWVudFBhcnNlcjo6bm9uRmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOworICAgIHZhX2VuZChh
cmdzKTsKK30KKworLy8gVXNpbmcgYSBzdGF0aWMgZW50aXR5IGFuZCBtYXJraW5nIGl0IFhNTF9J
TlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSBpcworLy8gYSBoYWNrIHRvIGF2b2lkIG1hbGxvYy9m
cmVlLiBVc2luZyBhIGdsb2JhbCB2YXJpYWJsZSBsaWtlIHRoaXMgY291bGQgY2F1c2UgdHJvdWJs
ZQorLy8gaWYgbGlieG1sIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2VyZSB0byBjaGFuZ2UKK3N0
YXRpYyB4bWxDaGFyIHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0WzVdID0gezAsIDAsIDAsIDAsIDB9
OworCitzdGF0aWMgeG1sRW50aXR5UHRyIHNoYXJlZFhIVE1MRW50aXR5KCkKK3sKKyAgICBzdGF0
aWMgeG1sRW50aXR5IGVudGl0eTsKKyAgICBpZiAoIWVudGl0eS50eXBlKSB7CisgICAgICAgIGVu
dGl0eS50eXBlID0gWE1MX0VOVElUWV9ERUNMOworICAgICAgICBlbnRpdHkub3JpZyA9IHNoYXJl
ZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuY29udGVudCA9IHNoYXJlZFhIVE1M
RW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuZXR5cGUgPSBYTUxfSU5URVJOQUxfUFJFREVG
SU5FRF9FTlRJVFk7CisgICAgfQorICAgIHJldHVybiAmZW50aXR5OworfQorCitzdGF0aWMgeG1s
RW50aXR5UHRyIGdldFhIVE1MRW50aXR5KGNvbnN0IHhtbENoYXIqIG5hbWUpCit7CisgICAgVUNo
YXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5h
bWUpKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyB2YWx1
ZSA9IFN0cmluZygmYywgMSkudXRmOCgpOworICAgIEFTU0VSVCh2YWx1ZS5sZW5ndGgoKSA8IDUp
OworICAgIHhtbEVudGl0eVB0ciBlbnRpdHkgPSBzaGFyZWRYSFRNTEVudGl0eSgpOworICAgIGVu
dGl0eS0+bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgZW50aXR5LT5uYW1lID0gbmFtZTsK
KyAgICBtZW1jcHkoc2hhcmVkWEhUTUxFbnRpdHlSZXN1bHQsIHZhbHVlLmRhdGEoKSwgZW50aXR5
LT5sZW5ndGggKyAxKTsKKworICAgIHJldHVybiBlbnRpdHk7Cit9CisKK3N0YXRpYyB4bWxFbnRp
dHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBuYW1l
KQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0
eHRQdHI+KGNsb3N1cmUpOworICAgIHhtbEVudGl0eVB0ciBlbnQgPSB4bWxHZXRQcmVkZWZpbmVk
RW50aXR5KG5hbWUpOworICAgIGlmIChlbnQpIHsKKyAgICAgICAgZW50LT5ldHlwZSA9IFhNTF9J
TlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWTsKKyAgICAgICAgcmV0dXJuIGVudDsKKyAgICB9CisK
KyAgICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOworICAgIGlmICgh
ZW50ICYmIChnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgICAgICAgICAgICAgIHx8IGdldFBhcnNlcihjbG9zdXJlKS0+aXNYSFRN
TE1QRG9jdW1lbnQoKQorI2VuZGlmCisgICAgICAgKSkgeworICAgICAgICBlbnQgPSBnZXRYSFRN
TEVudGl0eShuYW1lKTsKKyAgICAgICAgaWYgKGVudCkKKyAgICAgICAgICAgIGVudC0+ZXR5cGUg
PSBYTUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk7CisgICAgfQorCisgICAgcmV0dXJuIGVudDsK
K30KKworc3RhdGljIHZvaWQgc3RhcnREb2N1bWVudEhhbmRsZXIodm9pZCogY2xvc3VyZSkKK3sK
KyAgICB4bWxQYXJzZXJDdHh0KiBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4dCo+KGNs
b3N1cmUpOworICAgIHN3aXRjaFRvVVRGMTYoY3R4dCk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUp
LT5zdGFydERvY3VtZW50KGN0eHQtPnZlcnNpb24sIGN0eHQtPmVuY29kaW5nLCBjdHh0LT5zdGFu
ZGFsb25lKTsKKyAgICB4bWxTQVgyU3RhcnREb2N1bWVudChjbG9zdXJlKTsKK30KKworc3RhdGlj
IHZvaWQgZW5kRG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCit7CisgICAgZ2V0UGFyc2Vy
KGNsb3N1cmUpLT5lbmREb2N1bWVudCgpOworICAgIHhtbFNBWDJFbmREb2N1bWVudChjbG9zdXJl
KTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIGNsb3N1cmUs
IGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHht
bENoYXIqIHN5c3RlbUlEKQoreworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+aW50ZXJuYWxTdWJz
ZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgIHhtbFNBWDJJbnRlcm5hbFN1YnNl
dChjbG9zdXJlLCBuYW1lLCBleHRlcm5hbElELCBzeXN0ZW1JRCk7Cit9CisKK3N0YXRpYyB2b2lk
IGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29u
c3QgeG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1sQ2hhciopCit7CisgICAgU3RyaW5nIGV4
dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJZCk7CisgICAgaWYgKChleHRJZCA9PSAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0v
L1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8v
RFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0Mv
L0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9X
M0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9X
M0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCisgICAgICAgIHx8IChleHRJ
ZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEv
L0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmls
ZSAxLjAvL0VOIikKKyAgICAgICApCisgICAgICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c2V0SXNY
SFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9y
IG5vdC4KK30KKworc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIodm9pZCos
IGNvbnN0IHhtbENoYXIqLCBpbnQpCit7CisgICAgLy8gbm90aGluZyB0byBkbywgYnV0IHdlIG5l
ZWQgdGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIKKyAgICAvLyBodHRwOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUKKyAgICAvLyBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyCit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IENTdHJpbmcmIGNodW5rKQoreworICAgIHht
bFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisKKyAg
ICBzYXguZXJyb3IgPSBub3JtYWxFcnJvckhhbmRsZXI7CisgICAgc2F4LmZhdGFsRXJyb3IgPSBm
YXRhbEVycm9ySGFuZGxlcjsKKyAgICBzYXguY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNIYW5kbGVy
OworICAgIHNheC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25I
YW5kbGVyOworICAgIHNheC5jZGF0YUJsb2NrID0gY2RhdGFCbG9ja0hhbmRsZXI7CisgICAgc2F4
LmNvbW1lbnQgPSBjb21tZW50SGFuZGxlcjsKKyAgICBzYXgud2FybmluZyA9IHdhcm5pbmdIYW5k
bGVyOworICAgIHNheC5zdGFydEVsZW1lbnROcyA9IHN0YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAg
ICBzYXguZW5kRWxlbWVudE5zID0gZW5kRWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguZ2V0RW50
aXR5ID0gZ2V0RW50aXR5SGFuZGxlcjsKKyAgICBzYXguc3RhcnREb2N1bWVudCA9IHN0YXJ0RG9j
dW1lbnRIYW5kbGVyOworICAgIHNheC5lbmREb2N1bWVudCA9IGVuZERvY3VtZW50SGFuZGxlcjsK
KyAgICBzYXguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5hbFN1YnNldEhhbmRsZXI7CisgICAgc2F4
LmV4dGVybmFsU3Vic2V0ID0gZXh0ZXJuYWxTdWJzZXRIYW5kbGVyOworICAgIHNheC5pZ25vcmFi
bGVXaGl0ZXNwYWNlID0gaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXI7CisgICAgc2F4LmVudGl0
eURlY2wgPSB4bWxTQVgyRW50aXR5RGVjbDsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FY
Ml9NQUdJQzsKKyAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7CisgICAgbV9zYXdF
cnJvciA9IGZhbHNlOworICAgIG1fc2F3Q1NTID0gZmFsc2U7CisgICAgbV9zYXdYU0xUcmFuc2Zv
cm0gPSBmYWxzZTsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOworCisgICAgWE1MRG9j
dW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
KTsKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fY29udGV4dCA9IFhNTFBh
cnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcigmc2F4LCB0aGlzLCBjaHVuayk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVCghY2h1bmsuZGF0YSgpKTsKKyAgICAgICAgbV9jb250ZXh0
ID0gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsIHRoaXMpOworICAg
IH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworICAgIGlmICghaXNT
dG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAgLy8gVGVs
bCBsaWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBYTUxE
b2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCkpOworICAgICAgICAgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29udGV4dCgpLCAwLCAwLCAxKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAgICAgfQor
ICAgIH0KKworI2lmIEVOQUJMRShYU0xUKQorICAgIFhNTFRyZWVWaWV3ZXIgeG1sVHJlZVZpZXdl
cihkb2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdlck1vZGUgPSAhbV9zYXdFcnJvciAmJiAh
bV9zYXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmIHhtbFRyZWVWaWV3ZXIuaGFzTm9TdHls
ZUluZm9ybWF0aW9uKCk7CisgICAgaWYgKHhtbFZpZXdlck1vZGUpCisgICAgICAgIHhtbFRyZWVW
aWV3ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KCk7CisKKyAgICBpZiAobV9zYXdYU0xU
cmFuc2Zvcm0pIHsKKyAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5nKGRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zv
cm0sIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0
VHJhbnNmb3JtU291cmNlKGFkb3B0UHRyKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSkpOworCisg
ICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2N1bWVu
dCB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hlZXRzLgorICAg
ICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKworICAgICAgICBE
b2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIEVO
QUJMRShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdXJsKQoreworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRyCisgICAg
Ly8gRklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMgc28gdGhhdCBhIGZhaWx1cmUgdG8gcGFy
c2UgdGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgorICAgIC8vIGdvb2QgZXJyb3IgbWVzc2Fn
ZXMuCisgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgQk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
JkJPTSk7CisKKyAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGNhY2hlZFJlc291cmNl
TG9hZGVyLCBlcnJvckZ1bmMsIDApOworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxSZWFk
TWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNvdXJjZS5jaGFyYWN0ZXJzKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsLmxhdGluMSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNMVF9QQVJTRV9PUFRJT05T
KTsKKyAgICByZXR1cm4gc291cmNlRG9jOworfQorI2VuZGlmCisKK2ludCBYTUxEb2N1bWVudFBh
cnNlcjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRh
dGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1
cm4gMC1iYXNlZC4KKyAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+bGlu
ZSA6IDE7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVybnMgMS1i
YXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgorICAgIHJldHVybiBj
b250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxOworfQorCitUZXh0UG9zaXRpb24w
IFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHhtbFBhcnNl
ckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICAvLyBG
SVhNRTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJzLCBidXQg
d2UgdHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25zaXN0ZW50
IHdpdGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAgIC8vICAg
ICAgICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAgICAgV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkp
OworfQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLCBpbiBj
b250cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVwbGFjZSB0
ZXh0UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3Np
dGlvbk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0
aGlzLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gVGV4dFBv
c2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RG
OjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwK
KyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlu
cHV0LT5jb2wpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQor
eworICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOworICAgIGlmIChjb250ZXh0KCkp
CisgICAgICAgIHhtbFN0b3BQYXJzZXIoY29udGV4dCgpKTsKK30KKwordm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNTRVJUKCFpc0RldGFjaGVkKCkpOwor
ICAgIEFTU0VSVChtX3BhcnNlclBhdXNlZCk7CisKKyAgICBtX3BhcnNlclBhdXNlZCA9IGZhbHNl
OworCisgICAgLy8gRmlyc3QsIGV4ZWN1dGUgYW55IHBlbmRpbmcgY2FsbGJhY2tzCisgICAgd2hp
bGUgKCFtX3BlbmRpbmdDYWxsYmFja3MtPmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdD
YWxsYmFja3MtPmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKHRoaXMpOworCisgICAgICAgIC8v
IEEgY2FsbGJhY2sgcGF1c2VkIHRoZSBwYXJzZXIKKyAgICAgICAgaWYgKG1fcGFyc2VyUGF1c2Vk
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZW4sIHdyaXRlIGFueSBw
ZW5kaW5nIGRhdGEKKyAgICBTZWdtZW50ZWRTdHJpbmcgcmVzdCA9IG1fcGVuZGluZ1NyYzsKKyAg
ICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBhcHBlbmQocmVzdCk7CisKKyAgICAvLyBGaW5h
bGx5LCBpZiBmaW5pc2goKSBoYXMgYmVlbiBjYWxsZWQgYW5kIHdyaXRlKCkgZGlkbid0IHJlc3Vs
dAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1ZWQsIGNhbGwgZW5k
KCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5
KCkpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRG
cmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIGNodW5rKQoreworICAgIEFTU0VSVCghbV9jb250
ZXh0KTsKKyAgICBBU1NFUlQobV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAgQ1N0cmluZyBjaHVu
a0FzVXRmOCA9IGNodW5rLnV0ZjgoKTsKKyAgICAKKyAgICAvLyBsaWJ4bWwyIHRha2VzIGFuIGlu
dCBmb3IgYSBsZW5ndGgsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgaGFuZGxlIFhNTCBjaHVua3MgbGFy
Z2VyIHRoYW4gMiBHaUIuCisgICAgaWYgKGNodW5rQXNVdGY4Lmxlbmd0aCgpID4gSU5UX01BWCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY2h1
bmtBc1V0ZjgpOworICAgIHhtbFBhcnNlQ29udGVudChjb250ZXh0KCkpOworICAgIGVuZERvY3Vt
ZW50KCk7IC8vIENsb3NlIGFueSBvcGVuIHRleHQgbm9kZXMuCisKKyAgICAvLyBGSVhNRTogSWYg
dGhpcyBjb2RlIGlzIGFjdHVhbGx5IG5lZWRlZCwgaXQgc2hvdWxkIHByb2JhYmx5IG1vdmUgdG8g
ZmluaXNoKCkKKyAgICAvLyBYTUxEb2N1bWVudFBhcnNlclF0IGhhcyBhIHNpbWlsYXIgY2hlY2sg
KG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1
bWVudEVycm9yKSBpbiBkb0VuZCgpLgorICAgIC8vIENoZWNrIGlmIGFsbCB0aGUgY2h1bmsgaGFz
IGJlZW4gcHJvY2Vzc2VkLgorICAgIGxvbmcgYnl0ZXNQcm9jZXNzZWQgPSB4bWxCeXRlQ29uc3Vt
ZWQoY29udGV4dCgpKTsKKyAgICBpZiAoYnl0ZXNQcm9jZXNzZWQgPT0gLTEgfHwgKCh1bnNpZ25l
ZCBsb25nKWJ5dGVzUHJvY2Vzc2VkKSAhPSBjaHVua0FzVXRmOC5sZW5ndGgoKSkgeworICAgICAg
ICAvLyBGSVhNRTogSSBkb24ndCBiZWxpZXZlIHdlIGNhbiBoaXQgdGhpcyBjYXNlIHdpdGhvdXQg
YWxzbyBoYXZpbmcgc2VlbiBhbiBlcnJvciBvciBhIG51bGwgYnl0ZS4KKyAgICAgICAgLy8gSWYg
d2UgaGl0IHRoaXMgQVNTRVJULCB3ZSd2ZSBmb3VuZCBhIHRlc3QgY2FzZSB3aGljaCBkZW1vbnN0
cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgY29kZS4KKyAgICAgICAgQVNTRVJUKG1fc2F3RXJyb3Ig
fHwgKGJ5dGVzUHJvY2Vzc2VkID49IDAgJiYgIWNodW5rQXNVdGY4LmRhdGEoKVtieXRlc1Byb2Nl
c3NlZF0pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vIGVycm9y
IGlmIHRoZSBjaHVuayBpcyB3ZWxsIGZvcm1lZCBvciBpdCBpcyBub3QgYnV0IHdlIGhhdmUgbm8g
ZXJyb3IuCisgICAgcmV0dXJuIGNvbnRleHQoKS0+d2VsbEZvcm1lZCB8fCAheG1sQ3R4dEdldExh
c3RFcnJvcihjb250ZXh0KCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0ZSB7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gYXR0cmlidXRlczsKKyAgICBib29sIGdvdEF0dHJpYnV0ZXM7Cit9OworCitzdGF0
aWMgdm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNv
bnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogLyp4bWxQcmVmaXgqLywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hh
ciogLyp4bWxVUkkqLywgaW50IC8qbmJfbmFtZXNwYWNlcyovLCBjb25zdCB4bWxDaGFyKiogLypu
YW1lc3BhY2VzKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgLypuYl9kZWZhdWx0ZWQqLywgY29uc3QgeG1sQ2hhcioq
IGxpYnhtbEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKHN0cmNtcChyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih4bWxMb2NhbE5hbWUpLCAiYXR0cnMiKSAhPSAwKQorICAgICAgICByZXR1cm47
CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0
UHRyPihjbG9zdXJlKTsKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSA9IHN0YXRpY19j
YXN0PEF0dHJpYnV0ZVBhcnNlU3RhdGUqPihjdHh0LT5fcHJpdmF0ZSk7CisKKyAgICBzdGF0ZS0+
Z290QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICB4bWxTQVgyQXR0cmlidXRlcyogYXR0cmlidXRl
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMkF0dHJpYnV0ZXMqPihsaWJ4bWxBdHRyaWJ1dGVz
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAg
ICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1l
KTsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gKGludCkgKGF0dHJpYnV0ZXNbaV0uZW5kIC0g
YXR0cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgPSB0b1N0cmlu
ZyhhdHRyaWJ1dGVzW2ldLnZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgIFN0cmluZyBhdHRy
UHJlZml4ID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5wcmVmaXgpOworICAgICAgICBTdHJpbmcg
YXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBhdHRyTG9jYWxOYW1lIDogYXR0clBy
ZWZpeCArICI6IiArIGF0dHJMb2NhbE5hbWU7CisKKyAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMu
c2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNP
SykKK3sKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLmdvdEF0dHJp
YnV0ZXMgPSBmYWxzZTsKKworICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4
LCAwLCBzaXplb2Yoc2F4KSk7CisgICAgc2F4LnN0YXJ0RWxlbWVudE5zID0gYXR0cmlidXRlc1N0
YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FYMl9NQUdJ
QzsKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gcGFyc2VyID0gWE1MUGFyc2VyQ29udGV4
dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0ZSk7CisgICAgU3RyaW5nIHBhcnNlU3Ry
aW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICIgKyBzdHJpbmcgKyAiIC8+IjsK
KyAgICB4bWxQYXJzZUNodW5rKHBhcnNlci0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBwYXJzZVN0cmluZy5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhciksIDEpOworICAgIGF0dHJzT0sgPSBzdGF0ZS5nb3RBdHRyaWJ1dGVz
OworICAgIHJldHVybiBzdGF0ZS5hdHRyaWJ1dGVzOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWNm
YTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMCww
ICsxLDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
KHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgi
CisKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIK
KyNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVudGl0
eVBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxM
aW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFhIVE1MTVApCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEVudGl0eVJlc29sdmVyIDogcHVibGljIFFYbWxTdHJlYW1FbnRpdHlSZXNvbHZlciB7Cisg
ICAgdmlydHVhbCBRU3RyaW5nIHJlc29sdmVVbmRlY2xhcmVkRW50aXR5KGNvbnN0IFFTdHJpbmcg
Jm5hbWUpOworfTsKKworUVN0cmluZyBFbnRpdHlSZXNvbHZlcjo6cmVzb2x2ZVVuZGVjbGFyZWRF
bnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSkKK3sKKyAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRF
bnRpdHkobmFtZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgcmV0dXJuIFFTdHJpbmcoYyk7
Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgWE1MRG9j
dW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7
CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFyc2VyOjpY
TUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJhbWVWaWV3
KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwgbV92aWV3
KGZyYW1lVmlldykKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJyZW50Tm9k
ZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhmYWxz
ZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVsZW1l
bnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5
cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2Up
CisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxlZChm
YWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihU
ZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1Njcmlw
dCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3Nj
cmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworICAgIG1fc3Ry
ZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Cit9CisKK1hNTERvY3Vt
ZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RWxlbWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHBlcm1p
c3Npb24pCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50
KCkpCisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9j
dXJyZW50Tm9kZShmcmFnbWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nh
d0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdG
aXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBt
X2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVz
ZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2Zpbmlz
aENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQ
b3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVu
ZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6
OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKKyAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQoreworICAgIGZyYWdtZW50LT5y
ZWYoKTsKKworICAgIC8vIEFkZCBuYW1lc3BhY2VzIGJhc2VkIG9uIHRoZSBwYXJlbnQgbm9kZQor
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNrOworICAgIHdoaWxlIChwYXJlbnRFbGVtZW50
KSB7CisgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFyZW50RWxlbWVudCk7CisKKyAgICAgICAg
Tm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKCFuIHx8
ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcGFyZW50
RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICB9CisKKyAgICBpZiAoZWxl
bVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVhtbFN0cmVhbU5hbWVz
cGFjZURlY2xhcmF0aW9ucyBuYW1lc3BhY2VzOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9
IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3Zl
TGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0
cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMt
Pmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRy
cy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1l
KCkgPT0gInhtbG5zIikKKyAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJ
ID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgo
KSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFwcGVuZChRWG1s
U3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24oYXR0ci0+bG9jYWxOYW1lKCksIGF0dHItPnZhbHVl
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX3N0cmVhbS5hZGRF
eHRyYU5hbWVzcGFjZURlY2xhcmF0aW9ucyhuYW1lc3BhY2VzKTsKKyAgICBtX3N0cmVhbS5zZXRF
bnRpdHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2ZXIpOworCisgICAgLy8gSWYgdGhlIHBhcmVu
dCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8geG1sbnMg
YXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4KKyAgICBp
ZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50LT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVudEVsZW1lbnQt
Pm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3VtZW50UGFy
c2VyKCkKK3sKKyAgICBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKKyAgICBpZiAobV9wZW5kaW5n
U2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAg
ICBkZWxldGUgbV9zdHJlYW0uZW50aXR5UmVzb2x2ZXIoKTsKK30KKwordm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIG1fd3Jv
dGVUZXh0ID0gdHJ1ZTsKKworICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1l
bnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CisgICAgICAgIC8vIElmIHRoZSBkZWNvZGVy
IHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQorICAgICAg
ICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRU3RyaW5nIGRhdGEo
cGFyc2VTdHJpbmcpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSmF2
YVNjcmlwdCBtYXkgY2F1c2UgdGhlIHBhcnNlciB0byBkZXRhY2gsCisgICAgICAgIC8vIGtlZXAg
dGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxY
TUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBtX3N0cmVhbS5hZGRE
YXRhKGRhdGEpOworICAgICAgICBwYXJzZSgpOworICAgIH0KKworICAgIHJldHVybjsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0
cmluZyYpCit7CisgICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOworICAgIG1fc2F3
RXJyb3IgPSBmYWxzZTsKKyAgICBtX3Nhd0NTUyA9IGZhbHNlOworICAgIG1fc2F3WFNMVHJhbnNm
b3JtID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKK30KKwordm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmICht
X3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3Vy
Y2UoYWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZShtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtKSkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0
aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRzLgorICAg
ICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKyAgICAgICAgRG9j
dW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobV9z
dHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50
RXJyb3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiAh
bV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fc2F3RXJyb3IpKQorICAgICAgICBoYW5kbGVFcnJvcihm
YXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLCBj
b2x1bW5OdW1iZXIoKSk7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmxpbmVOdW1iZXIoKTsKK30KKworaW50IFhN
TERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0
cmVhbS5jb2x1bW5OdW1iZXIoKTsKK30KKworVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNl
cjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6
Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Olpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOworfQorCisv
LyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVycHJldHMgemVyby1iYXNlIGxpbmVOdW1i
ZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisvLyBGSVhNRTogVGhpcyBlcnJvciBpcyBr
ZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQgZml4IGl0IGV2ZW50dWFsbHkuIAorVGV4
dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQoKSBjb25z
dAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21P
bmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3Rv
cFBhcnNpbmcoKQoreworICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmco
KTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAg
QVNTRVJUKG1fcGFyc2VyUGF1c2VkKTsKKworICAgIG1fcGFyc2VyUGF1c2VkID0gZmFsc2U7CisK
KyAgICAvLyBGaXJzdCwgZXhlY3V0ZSBhbnkgcGVuZGluZyBjYWxsYmFja3MKKyAgICBwYXJzZSgp
OworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
biwgd3JpdGUgYW55IHBlbmRpbmcgZGF0YQorICAgIFNlZ21lbnRlZFN0cmluZyByZXN0ID0gbV9w
ZW5kaW5nU3JjOworICAgIG1fcGVuZGluZ1NyYy5jbGVhcigpOworICAgIGFwcGVuZChyZXN0KTsK
KworICAgIC8vIEZpbmFsbHksIGlmIGZpbmlzaCgpIGhhcyBiZWVuIGNhbGxlZCBhbmQgYXBwZW5k
KCkgZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBx
dWV1ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgIW1fcGFyc2VyUGF1
c2VkICYmICFtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERv
Y3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSkK
K3sKKyAgICBBU1NFUlQoIW1fc2F3Rmlyc3RFbGVtZW50KTsKKyAgICBhcHBlbmQoU3RyaW5nKCI8
cXhtbHN0cmVhbWR1bW15ZWxlbWVudD4iKSk7CisgICAgYXBwZW5kKHNvdXJjZSk7CisgICAgYXBw
ZW5kKFN0cmluZygiPC9xeG1sc3RyZWFtZHVtbXllbGVtZW50PiIpKTsKKyAgICByZXR1cm4gIWhh
c0Vycm9yKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0
cnVjdCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBh
dHRyaWJ1dGVzOworICAgIGJvb2wgZ290QXR0cmlidXRlczsKK307CisKK3N0YXRpYyB2b2lkIGF0
dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUs
IGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzJiBhdHRycykKK3sKKyAgICBpZiAoYXR0cnMuY291
bnQoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0ZS0+Z290QXR0cmlidXRlcyA9
IHRydWU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7IGkrKykgewor
ICAgICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlJiBhdHRyID0gYXR0cnNbaV07CisgICAg
ICAgIFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0cmluZyBh
dHRyVmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVSSSAgICAg
ICA9IGF0dHIubmFtZXNwYWNlVXJpKCk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUgICAgID0g
YXR0ci5xdWFsaWZpZWROYW1lKCk7CisgICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNldChhdHRy
UU5hbWUsIGF0dHJWYWx1ZSk7CisgICAgfQorfQorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBw
YXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0spCit7Cisg
ICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5nb3RBdHRyaWJ1dGVzID0g
ZmFsc2U7CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyIHN0cmVhbTsKKyAgICBRU3RyaW5nIGR1bW15
ID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAl
MSAvPiIpKS5hcmcoc3RyaW5nKTsKKyAgICBzdHJlYW0uYWRkRGF0YShkdW1teSk7CisgICAgd2hp
bGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBzdHJlYW0ucmVhZE5leHQoKTsKKyAgICAg
ICAgaWYgKHN0cmVhbS5pc1N0YXJ0RWxlbWVudCgpKSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVz
U3RhcnRFbGVtZW50TnNIYW5kbGVyKCZzdGF0ZSwgc3RyZWFtLmF0dHJpYnV0ZXMoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgYXR0cnNPSyA9IHN0YXRlLmdvdEF0dHJpYnV0ZXM7CisgICAgcmV0
dXJuIHN0YXRlLmF0dHJpYnV0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHByZWZpeEZy
b21RTmFtZShjb25zdCBRU3RyaW5nJiBxTmFtZSkKK3sKKyAgICBjb25zdCBpbnQgb2Zmc2V0ID0g
cU5hbWUuaW5kZXhPZihRTGF0aW4xQ2hhcignOicpKTsKKyAgICBpZiAob2Zmc2V0IDw9IDApCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBxTmFtZS5s
ZWZ0KG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50TmFtZXNw
YWNlcyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFy
YXRpb25zICZucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Bl
cm1pc3Npb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBucy5jb3VudCgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9uICZkZWNsID0gbnNb
aV07CisgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkZWNsLm5hbWVzcGFjZVVyaSgpOwor
ICAgICAgICBTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSBkZWNsLnByZWZpeCgpLmlzRW1wdHkoKSA/
IFN0cmluZygieG1sbnMiKSA6IFN0cmluZygieG1sbnM6Iik7CisgICAgICAgIG5hbWVzcGFjZVFO
YW1lLmFwcGVuZChkZWNsLnByZWZpeCgpKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmli
dXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgbmFtZXNwYWNlUU5hbWUsIG5h
bWVzcGFjZVVSSSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBpZiAoZWMpIC8v
IGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50
KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlcyAmYXR0cnMsIEV4Y2VwdGlv
bkNvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFY
bWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAgICAgICAgU3RyaW5nIGF0dHJM
b2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAgICAgPSBh
dHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5uYW1lc3Bh
Y2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhhdHRyLm5hbWVzcGFjZVVyaSgp
KTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5hbWUoKTsK
KyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVSSSwgYXR0clFOYW1lLCBh
dHRyVmFsdWUsIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAvLyBl
eGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSgpCit7CisgICAgd2hpbGUgKCFpc1N0
b3BwZWQoKSAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fc3RyZWFtLmF0RW5kKCkpIHsKKyAgICAg
ICAgbV9zdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChtX3N0cmVhbS50b2tlblR5
cGUoKSkgeworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1lbnQ6IHsK
KyAgICAgICAgICAgIHN0YXJ0RG9jdW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6IHsKKyAgICAg
ICAgICAgIGVuZERvY3VtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVOQUJMRShY
SFRNTE1QKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkg
JiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJy
b3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1lbnQ6IHsK
KyAgICAgICAgICAgIHBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJzOiB7CisgICAg
ICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAgLy9jZGF0
YQorICAgICAgICAgICAgICAgIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgcGFyc2VDaGFyYWN0
ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAgIHBhcnNl
Q29tbWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBR
WG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKKyAgICAgICAgICAgIC8vcURlYnVnKCk8PCItLS0tLS0t
LS0tLS0tIERURCI7CisgICAgICAgICAgICBwYXJzZUR0ZCgpOworI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSB0cnVlOworI2VuZGlmCisg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OkVudGl0eVJlZmVyZW5jZTogeworICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0t
LS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCkKKyAgICAgICAgICAgIC8v
ICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0KCkudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAg
ICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgorICAgICAgICAgICAgICAgKSB7
CisgICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBtX3N0cmVhbS5uYW1lKCkudG9TdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHkoZW50aXR5
LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGVhZlRleHRO
b2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRlclRleHQoKTsKKyAgICAgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZjLCAxKTsK
KyAgICAgICAgICAgICAgICAvLyBxRGVidWcoKTw8IiAtLS0tLS0tIGFkZGluZyBlbnRpdHkgIjw8
c3RyOworICAgICAgICAgICAgICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRhKHN0ciwgZWMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IHsKKyAgICAgICAg
ICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpZiAobV9zdHJlYW0uZXJy
b3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigpID09IFFY
bWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAgICAgICAgICAgIGhhbmRsZUVy
cm9yKHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KCkKK3sKKyAgICBpbml0
aWFsaXplUGFyc2VyQ29udGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAg
aWYgKCFtX3BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRYTUxTdGFu
ZGFsb25lKG1fc3RyZWFtLmlzU3RhbmRhbG9uZURvY3VtZW50KCksIGVjKTsKKworICAgICAgICBR
U3RyaW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1bWVudFZlcnNpb24oKTsKKyAgICAgICAg
aWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTFZl
cnNpb24odmVyc2lvbiwgZWMpOworICAgICAgICBRU3RyaW5nUmVmIGVuY29kaW5nID0gbV9zdHJl
YW0uZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKGVuY29kaW5nKTsKKyAgICB9
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAg
ICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIG1fcGFyc2luZ0ZyYWdtZW50KSB7CisgICAgICAg
IC8vIHNraXAgZHVtbXkgZWxlbWVudCBmb3IgZnJhZ21lbnRzCisgICAgICAgIG1fc2F3Rmlyc3RF
bGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7
CisKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJlYW0ubmFtZSgpOworICAgIFN0cmluZyB1
cmkgICAgICAgPSBtX3N0cmVhbS5uYW1lc3BhY2VVcmkoKTsKKyAgICBTdHJpbmcgcHJlZml4ICAg
ID0gcHJlZml4RnJvbVFOYW1lKG1fc3RyZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmluZygpKTsK
KworICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsKKyAgICAgICAg
UV9BU1NFUlQocHJlZml4LmlzTnVsbCgpKTsKKyAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNw
YWNlVVJJOworICAgIH0KKworICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5h
bWUsIHVyaSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5j
cmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKKyAgICBpZiAoIW5ld0VsZW1lbnQpIHsKKyAgICAg
ICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShY
SFRNTE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQo
KSkgeworICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRNTE1QLVYx
XzEtMjAwNjEwMjAtQS5wZGYsCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0
aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAorICAgICAgICAvLyBlbnN1cmUgdGhl
IG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcK
KyAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAg
ICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAg
ICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdo
dG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJOworICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwor
ICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3Ry
ZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1l
bnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwor
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMo
bmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0ubmFtZXNwYWNlRGVjbGFyYXRpb25zKCksIGVjLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGlmIChlYykgeworICAgICAgICBzdG9wUGFyc2lu
ZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0
ZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0uYXR0cmlidXRlcygpLCBlYywgbV9zY3JpcHRp
bmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQg
PSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHNjcmlwdEVsZW1l
bnQpCisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9uZUJhc2Vk
KCk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgp
KTsKKworICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKKyAgICBpZiAobV92
aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50LT5hdHRh
Y2goKTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKG5l
d0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJz
ZXIoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZy
YW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERv
Y3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
YXJzZUVuZEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CisgICAgbi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CisKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0aW5n
Tm90QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbi0+cmVtb3ZlKGVjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpIHx8ICFtX3Zp
ZXcpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSk7CisKKyAgICAv
LyBUaGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9t
IGRvY3VtZW50LgorICAgIC8vIFBhcnNpbmcgY29udGludWVzIGluIHRoaXMgY2FzZSwgYnV0IHNj
cmlwdHMgYXJlbid0IGV4ZWN1dGVkLgorICAgIGlmICghZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7
CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGVsZW1lbnQp
OworICAgIGlmICghc2NyaXB0RWxlbWVudCkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3Jp
cHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKKyAgICBBU1NFUlQoIW1fcGVu
ZGluZ1NjcmlwdCk7CisgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKKworICAgIGJvb2wg
c3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0KG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0
cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CisjaWYgRU5BQkxFKFhI
VE1MTVApCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3VwcG9ydGVk
KFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwor
I2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9C
ZVBhcnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2Ny
aXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1
bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVsc2UgaWYg
KHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAgICAgIG1f
cGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAgICAgICAg
ICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Njcmlw
dC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2ls
bCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1
dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAg
ICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSAwOworICAgIH0KKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKKyAgICBw
b3BDdXJyZW50Tm9kZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNoYXJh
Y3RlcnMoKQoreworICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCisgICAgICAgIGVudGVyVGV4dCgp
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmRE
YXRhKG1fc3RyZWFtLnRleHQoKSwgZWMpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
YXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCit7CisgICAgZXhpdFRleHQoKTsKKworICAgIC8v
ICMjIyBoYW5kbGUgZXhjZXB0aW9ucworICAgIGludCBleGNlcHRpb24gPSAwOworICAgIFJlZlB0
cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gZG9jdW1lbnQoKS0+Y3JlYXRlUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKAorICAgICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYXJn
ZXQoKSwKKyAgICAgICAgbV9zdHJlYW0ucHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YSgpLCBleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5z
ZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRD
aGlsZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAg
ICAgIHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKwor
ICAgIGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJM
RShYU0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBp
LT5pc1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJh
bnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNkYXRhKCkKK3sKKyAgICBleGl0VGV4
dCgpOworCisgICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6
Y3JlYXRlKGRvY3VtZW50KCksIG1fc3RyZWFtLnRleHQoKSk7CisKKyAgICBtX2N1cnJlbnROb2Rl
LT5wYXJzZXJBZGRDaGlsZChuZXdOb2RlLmdldCgpKTsKKyAgICBpZiAobV92aWV3ICYmICFuZXdO
b2RlLT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKK30KKwordm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KCkKK3sKKyAgICBleGl0VGV4dCgpOworCisg
ICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwg
bV9zdHJlYW0udGV4dCgpKTsKKworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5l
d05vZGUuZ2V0KCkpOworICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCisg
ICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpl
bmREb2N1bWVudCgpCit7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjpo
YXNFcnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmhhc0Vycm9yKCk7Cit9CisK
K3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKK3sKKyAgICBRU3RyaW5nUmVmIG5h
bWUgPSBtX3N0cmVhbS5kdGROYW1lKCk7CisgICAgUVN0cmluZ1JlZiBwdWJsaWNJZCA9IG1fc3Ry
ZWFtLmR0ZFB1YmxpY0lkKCk7CisgICAgUVN0cmluZ1JlZiBzeXN0ZW1JZCA9IG1fc3RyZWFtLmR0
ZFN5c3RlbUlkKCk7CisKKyAgICAvL3FEZWJ1ZygpIDw8IGR0ZCA8PCBuYW1lIDw8IHB1YmxpY0lk
IDw8IHN5c3RlbUlkOworICAgIGlmICgocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzND
Ly9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKSkKKyAgICAgICAgfHwgKHB1YmxpY0lk
ID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKSkKKyAgICAgICAg
fHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJp
Y3QvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0Mv
L0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBR
TGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCisgICAgICAg
IHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1
cyBNYXRoTUwgMi4wLy9FTiIpKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmlu
ZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VO
IikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKQorI2VuZGlm
CisgICAgICAgKQorICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNvbnRyb2xz
IGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lmIEVOQUJMRShYSFRNTE1QKQorICAg
IGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhI
VE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRp
bjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyAg
ICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxO
YW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBF
IGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1i
ZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIC8vIGNoZWNrIGlm
IHRoZSBNSU1FIHR5cGUgaXMgY29ycmVjdCB3aXRoIHRoaXMgbWV0aG9kCisgICAgICAgICAgICBz
ZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0
SXNYSFRNTERvY3VtZW50KHRydWUpOworICAgIH0KKyNlbmRpZgorICAgIGlmICghbV9wYXJzaW5n
RnJhZ21lbnQpCisgICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlw
ZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOworCit9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
U2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNj
b3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wYTQ3M2VkMjMwODJmMzdkMzkzYThkMTFmMWFkYTE1ZWNjM2Mz
NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlclNjb3BlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNo
ZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJl
c291cmNlTG9hZGVyID0gMDsKKworWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQ
YXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCisg
ICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRl
cikKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5l
cmljRXJyb3IpCisgICAgLCBtX29sZFN0cnVjdHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0dXJlZEVy
cm9yKQorICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKKyNl
bmRpZgoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNl
TG9hZGVyOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpY
TUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1
cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4dCkKKyAg
ICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVy
KQorICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdlbmVyaWNFcnJvcikKKyAgICAsIG1f
b2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCisgICAgLCBtX29sZEVy
cm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQoreworICAgIGN1cnJlbnRDYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGlmIChnZW5lcmljRXJy
b3JGdW5jKQorICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQ29udGV4dCwgZ2Vu
ZXJpY0Vycm9yRnVuYyk7CisgICAgaWYgKHN0cnVjdHVyZWRFcnJvckZ1bmMpCisgICAgICAgIHht
bFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5j
KTsKK30KKyNlbmRpZgorCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJz
ZXJTY29wZSgpCit7CisgICAgY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gbV9vbGRDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICB4bWxTZXRHZW5lcmljRXJy
b3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVyaWNFcnJvckZ1bmMpOworICAgIHht
bFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNvbnRleHQsIG1fb2xkU3RydWN0dXJl
ZEVycm9yRnVuYyk7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDQwNDNiNDhiMTFl
YzViODgzNjBhZTNlMTc5YjVkMWVlMTJkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
WE1MRG9jdW1lbnRQYXJzZXJTY29wZV9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyU2NvcGVf
aAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBFTkFCTEUoWFNMVCkKKyNp
bmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworICAgIGNsYXNzIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYTUxEb2N1bWVu
dFBhcnNlclNjb3BlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAg
flhNTERvY3VtZW50UGFyc2VyU2NvcGUoKTsKKworICAgICAgICBzdGF0aWMgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworI2lmIEVOQUJMRShYU0xU
KQorICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5j
LCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMgPSAwLCB2b2lkKiBl
cnJvckNvbnRleHQgPSAwKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisKKyNpZiBFTkFCTEUo
WFNMVCkKKyAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBtX29sZEdlbmVyaWNFcnJvckZ1bmM7
CisgICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgbV9vbGRTdHJ1Y3R1cmVkRXJyb3JGdW5j
OworICAgICAgICB2b2lkKiBtX29sZEVycm9yQ29udGV4dDsKKyNlbmRpZgorICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyU2NvcGVf
aAo=
</data>
<flag name="commit-queue"
          id="93825"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99385</attachid>
            <date>2011-06-30 15:57:44 -0700</date>
            <delta_ts>2011-07-01 11:34:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>movexml.patch</filename>
            <type>text/plain</type>
            <size>255653</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTliMmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYw
ZTBiN2JiNC4uMTNlNzg2OGNlYTVlZmViMGI4MjlkYjc0ZWQyNjY4ODE2YzRmYjk3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTYyLDYgKzYyLDcgQEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS93ZWJzb2NrZXRzIgogICAgICIke1dFQkNPUkVf
RElSfS93b3JrZXJzIgogICAgICIke1dFQkNPUkVfRElSfS94bWwiCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3htbC9wYXJzZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfSIKICAgICAiJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzIgogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vQVBJIgpAQCAtNjA2LDkgKzYwNyw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBk
b20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcAogICAg
IGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2VyLmNw
cAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCi0gICAgZG9tL1hNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAKIApAQCAtMTM4OCw2ICsxMzg2LDEwIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
ICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKICAgICB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCiAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKKworICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXIuY3BwCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcAogKQogCiBTRVQo
V2ViQ29yZV9DU1NfUFJPUEVSVFlfTkFNRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MTkzNTIyNWRmYmRjMTI1
ZmVhZDhjYmUzMGFjODRhNmI3YjlhZDU4Li42OGQ4YjM1Y2YxMmExNTg5NWM5MzJkZjBlYzBkYTBh
Y2QyNzM1ZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc1IEBACisyMDExLTA2LTMwICBKZWZm
cmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBYTUxEb2N1bWVudFBhcnNlciB0byBuZXcgZm9sZGVy
IHhtbC9wYXJzZXIvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MzY2NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5v
ZGVTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjphcHBlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6dG9T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkZXRhY2gpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJz
ZXJFcnJvckhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aW5z
ZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
Ojppc1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpwYXVzZVBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OnBhcnNlRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6Y29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpYTUxQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnNldElzWEhUTUxEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNYSFRNTERvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzZXRJc1hIVE1MTVBEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OndlbGxGb3JtZWQpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRleHQpOgorICAgICAgICAqIHhtbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdDYWxsYmFja3M6On5QZW5kaW5nQ2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdDYWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tz
OjphcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdDYWxsYmFja3M6OmFwcGVuZEVuZEVsZW1lbnROU0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25D
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRDREFU
QUJsb2NrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBw
ZW5kQ29tbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6
OmFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6YXBwZW5kRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5k
aW5nQ2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdDYWxsYmFja3M6OlBlbmRpbmdDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z0NhbGxiYWNrczo6UGVuZGluZ0NhbGxiYWNrOjp+UGVuZGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNr
Ojp+UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVu
ZGluZ0NhbGxiYWNrczo6UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s6OmNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0VuZEVsZW1lbnROU0NhbGxi
YWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdD
aGFyYWN0ZXJzQ2FsbGJhY2s6On5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s6OmNh
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbkNhbGxiYWNrOjp+UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb25DYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5n
Q2FsbGJhY2tzOjpQZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrOjp+UGVuZGluZ0NEQVRBQmxvY2tD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ0RB
VEFCbG9ja0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFj
a3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6On5QZW5kaW5nQ29tbWVudENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDb21tZW50Q2FsbGJhY2s6
OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0ludGVy
bmFsU3Vic2V0Q2FsbGJhY2s6On5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxs
YmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjptYXRjaEZ1bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
c2V0QnVmZmVyOjpyZWFkT3V0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3dpdGNoVG9VVEYx
Nik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbGxvd0V4dGVybmFsTG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OmVycm9yRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJz
ZXJDb250ZXh0OjpjcmVhdGVTdHJpbmdQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MUGFy
c2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFBhcnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6dG9BdG9taWNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVu
dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0
RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVt
ZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNkYXRhQmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJzZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyk6CisgICAgICAg
IChXZWJDb3JlOjpzdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5k
RWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJzSGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNkYXRhQmxvY2tIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbW1l
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ondhcm5pbmdIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmZhdGFsRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbEVy
cm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRYSFRNTEVudGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRYSFRNTEVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRFbnRp
dHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0RG9jdW1lbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmVuZERvY3VtZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6dGV4dFBvc2l0aW9uT25lQmFzZWQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnN0b3BQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2Vy
OjpyZXN1bWVQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjph
cHBlbmRGcmFnbWVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVzU3RhcnRF
bGVtZW50TnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXR0cmlidXRlcyk6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9ydHNYTUxWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3VtZW50UGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNT
dGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZpeEZyb21RTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVt
ZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ29tbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUR0ZCk6CisgICAgICAgICogeG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3Vt
ZW50UGFyc2VyU2NvcGU6OlhNTERvY3VtZW50UGFyc2VyU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6flhNTERvY3VtZW50UGFyc2VyU2NvcGUpOgorCiAy
MDExLTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA1Nzg2OTYxZjY4
OTBjNTg4NjA0YTk0NTE5ZmIwMWViZmIzNjZhNGEzLi5lNGI4M2FmNzEzN2E0ZjRlY2FkMzRjZWQ1
NGQ1YWQxMjZhNmE1Zjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtODMsNiArODMsNyBAQCB3
ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2Nr
ZXRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS94bWwgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMgXAogCS1JJCh0
b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUgXAogCS1JJCh0b3BfYnVpbGRkaXIp
L0Rlcml2ZWRTb3VyY2VzIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGMyMGJj
ZjE2NGZiOWJhMTgwYWJhNWI1MWEwNTBkN2JiMzRkODkwMjUuLjU5MTA4MGM1ZTk0MDQxYWQ1Mzg4
ZmE3MWRhMWViZDliYzI5Mjk3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
MTMyNCwxMSArMTMyNCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50Q29udGV4
dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudENvbnRleHQuaCBcCi0JU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
ZG9tL1hNTERvY3VtZW50UGFyc2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmggXAogCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCkBAIC0zNzkxLDYgKzM3
ODYsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclNjcmlwdExvYWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL3ht
bC9ET01QYXJzZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3htbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2FmODhhZjZkOWYwNGVjM2VkLi5iNjc0ZDI2
Y2Y1NjQwNjVjZWRjNmJiNGIwYTA1MDdkYzIyZmQxNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01
NTgsNyArNTU4LDYgQEAKICAgICAgICAgICAgICdkb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaCcs
CiAgICAgICAgICAgICAnZG9tL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgnLAogICAgICAg
ICAgICAgJ2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oJywKLSAgICAgICAgICAgICdkb20vWE1MRG9j
dW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENv
bW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCcsCkBAIC0yNjM3LDEx
ICsyNjM2LDYgQEAKICAgICAgICAgICAgICdkb20vV2hlZWxFdmVudC5oJywKICAgICAgICAgICAg
ICdkb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1dpbmRvd0V2
ZW50Q29udGV4dC5oJywKLSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywK
LSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCcsCi0gICAgICAg
ICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwJywKLSAgICAgICAgICAgICdkb20vWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5jcHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5j
cHAnLApAQCAtNjEyNyw2ICs2MTIxLDEyIEBACiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwJywKKyAgICAg
ICAgICAgICd4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcCcsCisgICAgICAgICAgICAn
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oJywKKyAgICAgICAgICAgICd4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmNwcCcsCiAgICAg
ICAgICAgICAneG1sL0RPTVBhcnNlci5oJywKICAgICAgICAgICAgICd4bWwvTmF0aXZlWFBhdGhO
U1Jlc29sdmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDhjZTFjNzBmMGY1MDU5YzI0MGRkM2M3
YjkwMzQ0ZDg4NmE2ZmY4Y2QuLjc5MDBmYzA3NzFlMzYwMWRhMTNiNzZlYzM0YzI1ZTVhYmZmNGM2
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0xMTgsNiArMTE4LDcgQEAgV0VCQ09SRV9JTkNMVURFUEFU
SCA9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS93ZWJzb2NrZXRzIFwKICAgICAkJFNPVVJD
RV9ESVIvV2ViQ29yZS93b3JrZXJzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS94bWwgXAor
ICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3htbC9wYXJzZXIgXAogICAgICQkV0VCQ09SRV9JTkNM
VURFUEFUSAogCiBXRUJDT1JFX0lOQ0xVREVQQVRIID0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBiYzEw
NmY2NGU5M2Q4YWYwZjBkOThhYjVmY2RiMWYwNTY2YjAxMTg3Li43ZTRmNDE4MTM3N2I0Y2I3Yjk0
YTUzNDdhMWVkODI2N2UxNzI4ZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTY0LDcgKzU2NCw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIFwKICAgICBk
b20vV2hlZWxFdmVudC5jcHAgXAogICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwIFwKLSAg
ICBkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3Bw
IFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXApAQCAtMTE5Niw3
ICsxMTk1LDggQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAg
ICAgeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAgICAgeG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCi0gICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCisg
ICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyLmNwcCAKIAogSEVBREVSUyArPSBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmggXApAQCAtMTU0Nyw3ICsxNTQ3LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
ZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmggXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZl
bnQuaCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2Vy
LmggXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
IFwKQEAgLTI0OTEsNiArMjQ5MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHdvcmtlcnMvV29ya2Vy
UnVuTG9vcC5oIFwKICAgICB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oIFwKICAgICB3b3Jr
ZXJzL1dvcmtlclRocmVhZC5oIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgg
XAogICAgIHhtbC9ET01QYXJzZXIuaCBcCiAgICAgeG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5o
IFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuaCBcCkBAIC0yNTkxLDcgKzI1OTEsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAKIAogIWNvbnRhaW5zKERFRklO
RVMsIFdURl9VU0VfTElCWE1MMj0xKSB7Ci0gICAgU09VUkNFUyArPSBkb20vWE1MRG9jdW1lbnRQ
YXJzZXJRdC5jcHAKKyAgICBTT1VSQ0VTICs9IHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MSkg
ewpAQCAtMzEwMiw4ICszMTAyLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkg
ewogICAgICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuY3BwIFwKICAgICAgICAgICAgIHhtbC9Y
U0xUVW5pY29kZVNvcnQuY3BwIFwKICAgICAgICAgICAgIHhtbC9YTUxUcmVlVmlld2VyLmNwcCBc
Ci0gICAgICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCi0gICAgICAg
ICAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKyAgICAgICAgICAgIHhtbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisgICAgICAgICAgICB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICAgICAgICAgIEhFQURFUlMgKz0gXAog
ICAgICAgICAgICAgICAgIHhtbC9YU0xJbXBvcnRSdWxlLmggXApAQCAtMzExMSw3ICszMTExLDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkgewogICAgICAgICAgICAgICAgIHht
bC9YU0xJbXBvcnRSdWxlLmggXAogICAgICAgICAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQu
aCBcCiAgICAgICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuaCBcCi0gICAgICAgICAgICAg
ICAgZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorICAgICAgICAgICAgICAgIHhtbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oCiAKICAgICB9IGVsc2UgewogICAgICAgICBTT1VS
Q0VTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNmIzMjgyNzI1MzM4NDY3ZWI0MzFmMWIwM2FiNTI2ZjJjY2QyOWI4Ni4uODlmNmE2NTEy
OTE1NzA2NmZiNmUzOTQyZTViNzdjYjBhYjhlZjQ2MyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyMzEzLDYgKzQyMzEzLDEyNiBAQAogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRVbmljb2RlU29ydC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KKwkJCTxGaWx0ZXIKKwkJCQlOYW1lPSJwYXJzZXIiCisJCQkJPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCisJCQkJ
CT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAor
CQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFy
c2VyXFhNTERvY3VtZW50UGFyc2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIgorCQkJCQk+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4K
IAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9ImRvbSIKQEAgLTQ5MTI5LDEyMiArNDky
NDksNiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdpbmRvd0V2ZW50Q29udGV4dC5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1M
RG9jdW1lbnRQYXJzZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCIKLQkJCQk+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8
RmlsdGVyCiAJCQlOYW1lPSJ3b3JrZXJzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzCmluZGV4IGRhNmUyMWZhZWQwODkwZGZlMjkz
NDQ5MWQ0NGNjMWM3YTM1MDVhYzkuLmU5NWI4N2MzOWVlOTJlNmVhZmE1ODlhYzA3M2NiYTZkYzli
MzFjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVD
b21tb24udnNwcm9wcworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
Q29tbW9uLnZzcHJvcHMKQEAgLTcsNyArNyw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJv
amVjdERpcikuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGJyaWRnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGNzcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cZmlsZWFwaSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cmVuZGVyaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcbWF0aG1sJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHJlbmRlcmluZ1xzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJp
bmRpbmdzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xnZW5lcmljJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqcyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cYmluZGluZ3NcanNcc3BlY2lhbGl6YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGRvbSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGhpc3RvcnkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0
bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxodG1sXHBhcnNlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRt
bFxzaGFkb3cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cbG9hZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcYXBwY2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbG9hZGVyXGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxs
b2FkZXJcaWNvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbWF0aG1sJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxub3RpZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxhbmltYXRpb24m
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG1vY2smcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHBsYXRmb3JtXHNxbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrXHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxn
cmFwaGljc1xjYSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
ZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmls
dGVyc1xhcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXG9w
ZW50eXBlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFu
c2Zvcm1zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0JnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0XHRyYW5zY29kZXImcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ceG1sJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcV2Vi
Q29yZVxEZXJpdmVkU291cmNlcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2lucyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2luc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHN2Z1xhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xn
cmFwaGljcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXHByb3BlcnRpZXMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHRlc3RpbmcmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
c3RvcmFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd2Vic29ja2V0cyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cd29ya2VycyZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVk
ZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEph
dmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRl
XHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndh
cmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxzcWxpdGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcemxpYiZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1
ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxhY2Nlc3NpYmlsaXR5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3Np
YmlsaXR5XHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxicmlkZ2VcYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJp
ZGdlXGpzYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cY3NzJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxlZGl0aW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxmaWxlYXBpJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHJlbmRlcmluZ1xtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRl
cmluZ1xzdHlsZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN2ZyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGJpbmRpbmdzXGdlbmVyaWMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdz
XGpzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqc1xzcGVjaWFsaXphdGlv
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxkb21cZGVmYXVsdCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caGlzdG9yeSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
aHRtbFxjYW52YXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxccGFyc2VyJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXHNoYWRvdyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5caW5zcGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXImcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRl
clxhcmNoaXZlXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcY2FjaGUmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxpY29uJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG5vdGlmaWNhdGlvbnMm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBhZ2VcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRl
eHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGll
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVz
dGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3Jp
cHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRz
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1b3Q7IgogCQlQcmVwcm9j
ZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVfM0RfUkVOREVSSU5HO1dFQkNPUkVf
Q09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBpbGVk
SGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZCBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKaW5kZXggY2E0ZDhm
MDRmMzYyMTA1ZTU3MmYxNzYxYTY0NTFkZDViMDZlYmRiZC4uZGFkNWFkZjM5MmI2YTdkNzQ3ZTk4
MTY3MWJmMzI5M2EzOWU4OWZmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCkBAIC02Niw2ICs2Niw3IEBAIHhj
b3B5IC95IC9kICIlUHJvamVjdERpciUuLlxyZW5kZXJpbmdcc3R5bGVcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccmVuZGVy
aW5nXHN2Z1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4
Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZWRpdGluZ1wqLmgiICIlQ09ORklHVVJBVElPTkJV
SUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZG9t
XCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKK3hjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlx4bWxccGFyc2VyXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERE
SVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlx4bWxcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2Qg
IiVQcm9qZWN0RGlyJS4uXHN2Z1xhbmltYXRpb25cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJ
UiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXHN2Z1xwcm9w
ZXJ0aWVzXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBiNzk0MWYwZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi45MTc1ZmRjMjk4NWE4
NjFmZDAwZGIwNzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0
NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIy
MERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAw
MEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNj
ZXNzRW50cnkuaCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250
ZW50VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDAwM0YxRkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERC
MzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmgg
Ki87IH07CisJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAg
Ki87IH07CisJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAw
QjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsg
fTsKKwkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2
MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1
MkJGQ0U5MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYx
NTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VC
MTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4
RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGlt
ZVN0YW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NUZENjlERjEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJ
CTUyMUQ0NkY4MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8q
IEtpbGxSaW5nLmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUz
MjVFNEQ4MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAv
KiBDU1NGbGV4VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9
OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZp
ZXdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
OTA1QURCRDEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0x
NDgyLDggKzE0ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVv
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0
RjIzMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEz
MURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVz
RGF0YS5jcHAgKi87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYy
NzEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2
QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0Yg
LyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEw
MDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEg
LyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICov
OyB9OwogCQk1RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNw
cCAqLzsgfTsKIAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4
N0JCODIxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpA
QCAtMzA0Myw3ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlB
QkMgLyogVGV4dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJj
ZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1
cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBT
ZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJD
IC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3
LDYgQEAKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkw
MDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0
UmVzb3VyY2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8q
IFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJD
MDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0Eg
LyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlB
QkMgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFz
VGV4dC5jcHAgKi87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2Vw
dGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5
M0YxOUFFNjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYw
MEQyQjc3MSAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3
LDExIEBACiAJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRy
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBC
MjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
MDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVu
dFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNC
QTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBY
TUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1
MkJGQ0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNw
cDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNs
aWVudE1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1l
U3RhbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFE
NDZGNzExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMy
NUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVh
bGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1
QTU3NEYyMzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUE1NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHls
ZS9RdW90ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcx
MzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNUQxNUUzQUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYg
LyogV2ViQ29yZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAv
KiBXZWJDb3JlRXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAv
KiBFeHBvcnRGaWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9FeHBvcnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKQEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYz
NUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMw
MkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYw
MTg2MzVDQSAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERv
Y3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYw
MTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkx
MjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5w
dXRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNF
RjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyNzAwLDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNC
QTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyLmggKi8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhN
TERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNl
cjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQx
MURCOUM4QiAvKiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRF
QSAvKiB4bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThE
MThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAw
MjI5NDdEIC8qIERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAv
KiBET01QYXJzZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFG
NzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdC
MzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1Njcx
MjdCMzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5
MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0Qz
MEEwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBG
N0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0J
CQkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
ICovLAotCQkJCTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yMzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgx
IC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEI5MzE4ODEzQkE4REJB
MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkz
MThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5OTE4RiAvKiBYTUxIdHRwUmVx
dWVzdEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENBMjAwRDE2
REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTc5Niw5ICsyNTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5
RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhN
TERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU0QzUwRjdCMEU4MDFERjMw
MDk4MzJBMCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNUQxNUUzQUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3Vt
ZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBC
OTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYz
Njk2MzdiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vp
bmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgot
Ci0jaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0j
aW5jbHVkZSAiQ29tbWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJJbWFnZUxvYWRlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVF
bGVtZW50LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1jb25zdCBpbnQgbWF4RXJy
b3JzID0gMjU7Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZShDb250
YWluZXJOb2RlKiBuKQotewotICAgIEFTU0VSVChuKTsKLSAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZSk7Ci0gICAgaWYgKG4gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbi0+cmVmKCk7Ci0gICAgbV9j
dXJyZW50Tm9kZVN0YWNrLmFwcGVuZChtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnROb2Rl
ID0gbjsKLSAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSA+IG1heERPTVRyZWVEZXB0
aCkKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFeGNlc3NpdmUgbm9kZSBuZXN0aW5nLiIs
IGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwb3BDdXJyZW50Tm9kZSgpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnROb2RlKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkpOwotCi0gICAg
aWYgKG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+
ZGVyZWYoKTsKLQotICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlU3RhY2subGFzdCgp
OwotICAgIG1fY3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCi17Ci0gICAgaWYgKG1fY3VycmVu
dE5vZGUgJiYgbV9jdXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQotICAgICAgICBtX2N1cnJlbnRO
b2RlLT5kZXJlZigpOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwotICAgIG1fbGVhZlRleHROb2Rl
ID0gMDsKLQotICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpKSB7IC8vIEFib3J0ZWQg
cGFyc2luZy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY3VycmVudE5vZGVTdGFjay5zaXpl
KCkgLSAxOyBpICE9IDA7IC0taSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1tpXS0+
ZGVyZWYoKTsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFja1swXSAmJiBtX2N1cnJlbnRO
b2RlU3RhY2tbMF0gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFj
a1swXS0+ZGVyZWYoKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrLmNsZWFyKCk7Ci0gICAg
fQotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcykKLXsKLSAgICBTdHJpbmcg
cGFyc2VTdHJpbmcgPSBzLnRvU3RyaW5nKCk7Ci0KLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0g
fHwgIW1fc2F3Rmlyc3RFbGVtZW50KQotICAgICAgICBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtICs9IHBhcnNlU3RyaW5nOwotCi0gICAgaWYgKGlzU3RvcHBlZCgpIHx8IG1fc2F3WFNMVHJh
bnNmb3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAg
ICAgICAgbV9wZW5kaW5nU3JjLmFwcGVuZChzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvV3JpdGUocy50b1N0cmluZygpKTsKLQotICAgIC8vIEFmdGVyIHBhcnNpbmcsIGdvIGFo
ZWFkIGFuZCBkaXNwYXRjaCBpbWFnZSBiZWZvcmVsb2FkIGV2ZW50cy4KLSAgICBJbWFnZUxvYWRl
cjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwotfQotCi12b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgaGFuZGxlRXJyb3IodHlwZSwg
bSwgVGV4dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGlu
ZU51bWJlciksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1i
ZXIpKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKEVycm9yVHlw
ZSB0eXBlLCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKQotewotICAgIGlm
ICh0eXBlID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJy
b3JQb3NpdGlvbi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9yUG9zaXRp
b24ubV9jb2x1bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlcyArPSAid2FybmluZyBvbiBsaW5lICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5t
X2xpbmUub25lQmFzZWRJbnQoKSkgKyAiIGF0IGNvbHVtbiAiICsgU3RyaW5nOjpudW1iZXIocG9z
aXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSkgKyAiOiAiICsgbTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZmF0YWw6Ci0gICAgICAgICAgICBjYXNlIG5vbkZh
dGFsOgotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSAiZXJyb3Igb24gbGluZSAi
ICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBj
b2x1bW4gIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkp
ICsgIjogIiArIG07Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xhc3RFcnJvclBvc2l0aW9uID0g
cG9zaXRpb247Ci0gICAgICAgICsrbV9lcnJvckNvdW50OwotICAgIH0KLQotICAgIGlmICh0eXBl
ICE9IHdhcm5pbmcpCi0gICAgICAgIG1fc2F3RXJyb3IgPSB0cnVlOwotCi0gICAgaWYgKHR5cGUg
PT0gZmF0YWwpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmVudGVyVGV4dCgpCi17Ci0jaWYgIVVTRShRWE1MU1RSRUFNKQotICAgIEFTU0VSVCht
X2J1ZmZlcmVkVGV4dC5zaXplKCkgPT0gMCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoIW1fbGVhZlRl
eHROb2RlKTsKLSAgICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCAi
Iik7Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobV9sZWFmVGV4dE5vZGUuZ2V0
KCkpOwotfQotCi0jaWYgIVVTRShRWE1MU1RSRUFNKQotc3RhdGljIGlubGluZSBTdHJpbmcgdG9T
dHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkgCi17IAotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyks
IHNpemUpOyAKLX0KLSNlbmRpZgotCi0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0
KCkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9sZWFmVGV4dE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2xlYWZUZXh0Tm9kZS0+YXBwZW5kRGF0
YSh0b1N0cmluZyhtX2J1ZmZlcmVkVGV4dC5kYXRhKCksIG1fYnVmZmVyZWRUZXh0LnNpemUoKSks
IGVjKTsKLSAgICBWZWN0b3I8eG1sQ2hhcj4gZW1wdHk7Ci0gICAgbV9idWZmZXJlZFRleHQuc3dh
cChlbXB0eSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3ZpZXcgJiYgIW1fbGVhZlRleHROb2RlLT5h
dHRhY2hlZCgpKQotICAgICAgICBtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoKCk7Ci0KLSAgICBtX2xl
YWZUZXh0Tm9kZSA9IDA7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCgpCi17
Ci0gICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyOjpkZXRhY2goKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAg
ICAvLyBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIgd2lsbCBkbyBiYWQgdGhpbmdzIHRvIHRoZSBk
b2N1bWVudCBpZiBkb0VuZCgpIGlzIGNhbGxlZC4KLSAgICAvLyBJIGRvbid0IGJlbGlldmUgWE1M
RG9jdW1lbnRQYXJzZXJRdCBuZWVkcyBkb0VuZCBjYWxsZWQgaW4gdGhlIGZyYWdtZW50IGNhc2Uu
Ci0gICAgQVNTRVJUKCFtX3BhcnNpbmdGcmFnbWVudCk7Ci0KLSAgICBkb0VuZCgpOwotCi0gICAg
Ly8gZG9FbmQoKSBjb3VsZCBwcm9jZXNzIGEgc2NyaXB0IHRhZywgdGh1cyBwYXVzaW5nIHBhcnNp
bmcuCi0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9zYXdFcnJvcikKLSAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgZXhpdFRleHQoKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAgfQotCi0gICAgaWYgKGlzUGFy
c2luZygpKQotICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygpOwotICAgIGRvY3VtZW50KCkt
PnNldFJlYWR5U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsKLSAgICBjbGVhckN1cnJlbnRO
b2RlU3RhY2soKTsKLSAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IEFTU0VSVCghbV9wYXJzZXJTdG9wcGVkKSBoZXJlLCBzaW5jZSBpdCBkb2VzIG5vdAotICAgIC8v
IG1ha2VzIHNlbnNlIHRvIGNhbGwgYW55IG1ldGhvZHMgb24gRG9jdW1lbnRQYXJzZXIgb25jZSBp
dCdzIGJlZW4gc3RvcHBlZC4KLSAgICAvLyBIb3dldmVyLCBGcmFtZUxvYWRlcjo6c3RvcCBjYWxs
cyBEb2N1bWVudFBhcnNlcjo6ZmluaXNoIHVuY29uZGl0aW9uYWxseS4KLQotICAgIGlmIChtX3Bh
cnNlclBhdXNlZCkKLSAgICAgICAgbV9maW5pc2hDYWxsZWQgPSB0cnVlOwotICAgIGVsc2UKLSAg
ICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxl
ZCgpCi17Ci0gICAgcmV0dXJuIG1fZmluaXNoQ2FsbGVkOwotfQotCi1zdGF0aWMgaW5saW5lIFJl
ZlB0cjxFbGVtZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKERvY3VtZW50KiBkb2Ms
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlcykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4gcmVw
b3J0RWxlbWVudCA9IGRvYy0+Y3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
cGFyc2VyZXJyb3IiLCB4aHRtbE5hbWVzcGFjZVVSSSksIGZhbHNlKTsKLSAgICByZXBvcnRFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNl
OiBwcmU7IGJvcmRlcjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJn
aW46IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6IGJsYWNrIik7Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gaDMgPSBkb2MtPmNyZWF0
ZUVsZW1lbnQoaDNUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZCho
My5nZXQoKSwgZWMpOwotICAgIGgzLT5hcHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKCJU
aGlzIHBhZ2UgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6IiksIGVjKTsKLQotICAgIFJl
ZlB0cjxFbGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsK
LSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChmaXhlZC5nZXQoKSwgZWMpOwotICAgIGZp
eGVkLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQt
c2l6ZToxMnB4Iik7Ci0gICAgZml4ZWQtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUo
ZXJyb3JNZXNzYWdlcyksIGVjKTsKLQotICAgIGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFn
LCBmYWxzZSk7Ci0gICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsK
LSAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiQmVsb3cgaXMgYSByZW5k
ZXJpbmcgb2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9yLiIpLCBlYyk7Ci0KLSAgICBy
ZXR1cm4gcmVwb3J0RWxlbWVudDsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0
RXJyb3JNZXNzYWdlQmxvY2soKQotewotI2lmIFVTRShRWE1MU1RSRUFNKQotICAgIGlmIChtX3Bh
cnNpbmdGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgLy8gT25lIG9yIG1v
cmUgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjb2RlLiBEaXNwbGF5IGFu
IGVycm9yIGJsb2NrIHRvIHRoZSB1c2VyIGFib3ZlCi0gICAgLy8gdGhlIG5vcm1hbCBjb250ZW50
ICh0aGUgRE9NIHRyZWUgaXMgY3JlYXRlZCBtYW51YWxseSBhbmQgaW5jbHVkZXMgbGluZS9jb2wg
aW5mbyByZWdhcmRpbmcKLSAgICAvLyB3aGVyZSB0aGUgZXJyb3JzIGFyZSBsb2NhdGVkKQotCi0g
ICAgLy8gQ3JlYXRlIGVsZW1lbnRzIGZvciBkaXNwbGF5Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQ
dHI8RWxlbWVudD4gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwotICAgIGlmICghZG9jdW1lbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBy
b290RWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKLSAg
ICAgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7Ci0gICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFs
c2UpOwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAg
ICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwotICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQot
ICAgIGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6
OnN2Z05hbWVzcGFjZVVSSSkgewotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIFJlZlB0
cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2Up
OwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBi
b2R5LT5hcHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQsIGVjKTsKLSAgICAgICAgZG9jdW1lbnQt
PmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Ci0gICAgICAgIGRvY3VtZW50RWxl
bWVudCA9IGJvZHkuZ2V0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHJl
cG9ydEVsZW1lbnQgPSBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKGRvY3VtZW50LCBtX2Vy
cm9yTWVzc2FnZXMpOwotICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVs
ZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7Ci0jaWYgRU5BQkxFKFhT
TFQpCi0gICAgaWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChw
VGFnLCBmYWxzZSk7Ci0gICAgICAgIHBhcmFncmFwaC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
IndoaXRlLXNwYWNlOiBub3JtYWwiKTsKLSAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZChk
b2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhl
IHJlc3VsdCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVt
YmVycyBnaXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpLCBlYyk7Ci0gICAg
ICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKHBhcmFncmFwaC5yZWxlYXNlKCksIGVjKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSog
dW51c2VkUmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51
c2VkUmVzb3VyY2UgPT0gbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wZW5kaW5nU2Ny
aXB0LT5hY2Nlc3NDb3VudCgpID4gMCk7Ci0KLSAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNv
ZGUobV9wZW5kaW5nU2NyaXB0LmdldCgpKTsKLSAgICBib29sIGVycm9yT2NjdXJyZWQgPSBtX3Bl
bmRpbmdTY3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKLSAgICBib29sIHdhc0NhbmNlbGVkID0gbV9w
ZW5kaW5nU2NyaXB0LT53YXNDYW5jZWxlZCgpOwotCi0gICAgbV9wZW5kaW5nU2NyaXB0LT5yZW1v
dmVDbGllbnQodGhpcyk7Ci0gICAgbV9wZW5kaW5nU2NyaXB0ID0gMDsKLQotICAgIFJlZlB0cjxF
bGVtZW50PiBlID0gbV9zY3JpcHRFbGVtZW50OwotICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0K
LSAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGUuZ2V0
KCkpOwotICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLQotICAgIC8vIEphdmFTY3JpcHQgY2Fu
IGRldGFjaCB0aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2VwdCBhbGl2ZSBldmVuIGlmIGRl
dGFjaGVkLgotICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKLSAg
ICAKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0
Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIXdhc0NhbmNlbGVkKSB7Ci0gICAgICAgIHNj
cmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFbGVtZW50
ID0gMDsKLQotICAgIGlmICghaXNEZXRhY2hlZCgpICYmICFtX3JlcXVlc3RpbmdTY3JpcHQpCi0g
ICAgICAgIHJlc3VtZVBhcnNpbmcoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6aXNX
YWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1NjcmlwdDsK
LX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJzaW5nKCkKLXsKLSAgICBpZiAo
bV9wYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyc2VyUGF1c2Vk
ID0gdHJ1ZTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdt
ZW50KGNvbnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCi17Ci0gICAgaWYgKCFjaHVuay5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIEhUTUw1IFhN
TCBGcmFnbWVudCBwYXJzaW5nIGFsZ29yaXRobToKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUteGh0bWwtc3ludGF4
Lmh0bWwjeG1sLWZyYWdtZW50LXBhcnNpbmctYWxnb3JpdGhtCi0gICAgLy8gRm9yIG5vdyB3ZSBo
YXZlIGEgaGFjayBmb3Igc2NyaXB0L3N0eWxlIGlubmVySFRNTCBzdXBwb3J0OgotICAgIGlmIChj
b250ZXh0RWxlbWVudCAmJiAoY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnNjcmlwdFRhZykgfHwgY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0
eWxlVGFnKSkpIHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlckFkZENoaWxkKGZyYWdtZW50LT5k
b2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IFhNTERvY3Vt
ZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJt
aXNzaW9uKTsKLSAgICBib29sIHdlbGxGb3JtZWQgPSBwYXJzZXItPmFwcGVuZEZyYWdtZW50U291
cmNlKGNodW5rKTsKLSAgICAvLyBEbyBub3QgY2FsbCBmaW5pc2goKS4gIEN1cnJlbnQgZmluaXNo
KCkgYW5kIGRvRW5kKCkgaW1wbGVtZW50YXRpb25zIHRvdWNoIHRoZSBtYWluIERvY3VtZW50L2xv
YWRlcgotICAgIC8vIGFuZCBjYW4gY2F1c2UgY3Jhc2hlcyBpbiB0aGUgZnJhZ21lbnQgY2FzZS4K
LSAgICBwYXJzZXItPmRldGFjaCgpOyAvLyBBbGxvd3MgfkRvY3VtZW50UGFyc2VyIHRvIGFzc2Vy
dCBpdCB3YXMgZGV0YWNoZWQgYmVmb3JlIGRlc3RydWN0aW9uLgotICAgIHJldHVybiB3ZWxsRm9y
bWVkOyAvLyBhcHBlbmRGcmFnbWVudFNvdXJjZSgpJ3Mgd2VsbEZvcm1lZCBpcyBtb3JlIHBlcm1p
c3NpdmUgdGhhbiB3ZWxsRm9ybWVkKCkuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNhY2RkMjVjNTVkYzAzNWI4ZjMyYTc0MTc1YTQ2ZDk4OWVlYjI3NWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBYTUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gK
LQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIK
LSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi0jaW5jbHVkZSA8cXhtbHN0cmVh
bS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC94
bWxzdHJpbmcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRh
aW5lck5vZGU7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cjsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1l
bnQ7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOwotY2xhc3MgVGV4
dDsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2Vy
KHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmlu
Z1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7Ci0gICAgICAgIH5YTUxQ
YXJzZXJDb250ZXh0KCk7Ci0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgWE1MUGFyc2Vy
Q29udGV4dCh4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCi0gICAgICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgeG1sUGFyc2VyQ3R4dFB0
ciBtX2NvbnRleHQ7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJz
ZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsK
LSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4g
Y3JlYXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVu
dCwgcGVybWlzc2lvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgflhNTERvY3VtZW50UGFyc2Vy
KCk7Ci0KLSAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tzOgotICAgICAgICBlbnVtIEVy
cm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9OwotICAgICAgICB2b2lkIGhhbmRs
ZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29u
c3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7Ci0KLSAgICAgICAgdm9pZCBzZXRJc1hI
VE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsg
fQotICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRN
TERvY3VtZW50OyB9Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHZvaWQgc2V0SXNYSFRN
TE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1M
OyB9Ci0gICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
WEhUTUxNUERvY3VtZW50OyB9Ci0jZW5kaWYKLQotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURv
Y3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQq
IHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBi
ZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KLSAgICAgICAgdmlydHVhbCBib29sIHdl
bGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQotCi0gICAgICAgIFRleHRQ
b3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgdGV4
dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKLSAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24pOwotCi0gICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKLSAgICAgICAg
dmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmlzaCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7Ci0gICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAgICAg
aW50IGNvbHVtbk51bWJlcigpIGNvbnN0OwotCi0gICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7Ci0KLSAgICAgICAgdm9pZCBlbmQoKTsKLQotICAgICAgICB2b2lkIHBhdXNlUGFyc2lu
ZygpOwotICAgICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKLQotICAgICAgICBib29sIGFwcGVu
ZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi1w
cml2YXRlOgotICAgICAgICB2b2lkIHBhcnNlKCk7Ci0gICAgICAgIHZvaWQgc3RhcnREb2N1bWVu
dCgpOwotICAgICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFy
c2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgdm9pZCBwYXJzZUNk
YXRhKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7Ci0gICAgICAgIHZvaWQgZW5kRG9j
dW1lbnQoKTsKLSAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOwotICAgICAgICBib29sIGhhc0Vycm9y
KCkgY29uc3Q7Ci0jZWxzZQotcHVibGljOgotICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJz
ZXIgU0FYCi0gICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdl
LCB2YV9saXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOwotICAgICAgICB2b2lk
IHN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hh
ciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBp
bnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnht
bEF0dHJpYnV0ZXMpOwotICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOwotICAgICAgICB2b2lk
IGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7Ci0gICAgICAgIHZvaWQgcHJv
Y2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciog
ZGF0YSk7Ci0gICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVu
KTsKLSAgICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOwotICAgICAgICB2b2lk
IHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5j
b2RpbmcsIGludCBzdGFuZGFsb25lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25z
dCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFy
KiBzeXN0ZW1JRCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKLSNlbmRpZgotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmlu
ZyYgY2h1bmsgPSBDU3RyaW5nKCkpOwotCi0gICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENv
bnRhaW5lck5vZGUqKTsKLSAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICB2
b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotCi0gICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JN
ZXNzYWdlQmxvY2soKTsKLQotICAgICAgICB2b2lkIGVudGVyVGV4dCgpOwotICAgICAgICB2b2lk
IGV4aXRUZXh0KCk7Ci0KLSAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOwotICAg
ICAgICB2b2lkIGRvRW5kKCk7Ci0KLSAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7Ci0KLSAgICAg
ICAgU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07Ci0KLSNpZiBVU0UoUVhNTFNU
UkVBTSkKLSAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKLSAgICAgICAgYm9vbCBt
X3dyb3RlVGV4dDsKLSNlbHNlCi0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKLSAg
ICAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgT3duUHRy
PFBlbmRpbmdDYWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKLSAgICAgICAgVmVjdG9yPHht
bENoYXI+IG1fYnVmZmVyZWRUZXh0OwotI2VuZGlmCi0gICAgICAgIENvbnRhaW5lck5vZGUqIG1f
Y3VycmVudE5vZGU7Ci0gICAgICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9k
ZVN0YWNrOwotCi0gICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKLQotICAgICAg
ICBib29sIG1fc2F3RXJyb3I7Ci0gICAgICAgIGJvb2wgbV9zYXdDU1M7Ci0gICAgICAgIGJvb2wg
bV9zYXdYU0xUcmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAg
ICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAg
IGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNs
YXJhdGlvbjsKLSNlbmRpZgotCi0gICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7Ci0gICAgICAg
IGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOwot
Ci0gICAgICAgIGludCBtX2Vycm9yQ291bnQ7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0
RXJyb3JQb3NpdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKLQotICAgICAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKLSAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgVGV4dFBvc2l0
aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRpb247Ci0KLSAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFn
bWVudDsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKLQotICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZv
ck5hbWVzcGFjZU1hcDsKLSAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9O
YW1lc3BhY2VNYXA7Ci0gICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7Ci0gICAg
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Ci0g
ICAgfTsKLQotI2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hl
ZFJlc291cmNlTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJs
KTsKLSNlbmRpZgotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29u
c3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyZjM5ZmI0ZWM3ZGVlMDcwYTgzNTE1YWUwYzRmNDEwZjZiNzI4NmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgPHBta0Bwb3N0LmNvbT4KLSAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2lu
Y2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2Vy
LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCi0jaW5j
bHVkZSAiWE1MTlNOYW1lcy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIK
LSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVy
bmFscy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShYU0xU
KQotI2luY2x1ZGUgIlhNTFRyZWVWaWV3ZXIuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0jaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1l
bnQuaCIKLSNlbmRpZgotCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGVuZGluZ0NhbGxiYWNrcyk7Ci1wdWJsaWM6Ci0gICAgflBlbmRpbmdDYWxsYmFja3MoKSB7
IH0KLSAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nQ2FsbGJhY2tzPiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2FsbGJhY2tzKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKGNvbnN0IHhtbENo
YXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFy
KiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNlcywgaW50IG5iX2F0dHJpYnV0ZXMs
IGludCBuYl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBhdHRyaWJ1dGVzKQotICAgIHsKLSAg
ICAgICAgT3duUHRyPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UHRyKG5ldyBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayk7Ci0KLSAgICAgICAgY2Fs
bGJhY2stPnhtbExvY2FsTmFtZSA9IHhtbFN0cmR1cCh4bWxMb2NhbE5hbWUpOwotICAgICAgICBj
YWxsYmFjay0+eG1sUHJlZml4ID0geG1sU3RyZHVwKHhtbFByZWZpeCk7Ci0gICAgICAgIGNhbGxi
YWNrLT54bWxVUkkgPSB4bWxTdHJkdXAoeG1sVVJJKTsKLSAgICAgICAgY2FsbGJhY2stPm5iX25h
bWVzcGFjZXMgPSBuYl9uYW1lc3BhY2VzOwotICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlcyA9
IHN0YXRpY19jYXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9u
YW1lc3BhY2VzICogMikpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX25hbWVzcGFj
ZXMgKiAyIDsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2stPm5hbWVzcGFjZXNbaV0gPSB4bWxT
dHJkdXAobmFtZXNwYWNlc1tpXSk7Ci0gICAgICAgIGNhbGxiYWNrLT5uYl9hdHRyaWJ1dGVzID0g
bmJfYXR0cmlidXRlczsKLSAgICAgICAgY2FsbGJhY2stPm5iX2RlZmF1bHRlZCA9IG5iX2RlZmF1
bHRlZDsKLSAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXMgPSBzdGF0aWNfY2FzdDx4bWxDaGFy
Kio+KHhtbE1hbGxvYyhzaXplb2YoeG1sQ2hhciopICogbmJfYXR0cmlidXRlcyAqIDUpKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAg
ICAgIC8vIEVhY2ggYXR0cmlidXRlIGhhcyA1IGVsZW1lbnRzIGluIHRoZSBhcnJheToKLSAgICAg
ICAgICAgIC8vIG5hbWUsIHByZWZpeCwgdXJpLCB2YWx1ZSBhbmQgYW4gZW5kIHBvaW50ZXIuCi0K
LSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQotICAgICAgICAgICAgICAg
IGNhbGxiYWNrLT5hdHRyaWJ1dGVzW2kgKiA1ICsgal0gPSB4bWxTdHJkdXAoYXR0cmlidXRlc1tp
ICogNSArIGpdKTsKLQotICAgICAgICAgICAgaW50IGxlbiA9IGF0dHJpYnV0ZXNbaSAqIDUgKyA0
XSAtIGF0dHJpYnV0ZXNbaSAqIDUgKyAzXTsKLQotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJp
YnV0ZXNbaSAqIDUgKyAzXSA9IHhtbFN0cm5kdXAoYXR0cmlidXRlc1tpICogNSArIDNdLCBsZW4p
OwotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyA0XSA9IGNhbGxiYWNr
LT5hdHRyaWJ1dGVzW2kgKiA1ICsgM10gKyBsZW47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Nh
bGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFw
cGVuZEVuZEVsZW1lbnROU0NhbGxiYWNrKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChhZG9wdFB0cihuZXcgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogcywgaW50
IGxlbikKLSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKTsKLQotICAg
ICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsKLSAgICAgICAgY2FsbGJhY2st
PmxlbiA9IGxlbjsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFz
ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxi
YWNrKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKLSAgICB7Ci0g
ICAgICAgIE93blB0cjxQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk7
Ci0KLSAgICAgICAgY2FsbGJhY2stPnRhcmdldCA9IHhtbFN0cmR1cCh0YXJnZXQpOwotICAgICAg
ICBjYWxsYmFjay0+ZGF0YSA9IHhtbFN0cmR1cChkYXRhKTsKLQotICAgICAgICBtX2NhbGxiYWNr
cy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENE
QVRBQmxvY2tDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotICAgIHsKLSAgICAg
ICAgT3duUHRyPFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIo
bmV3IFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2spOwotCi0gICAgICAgIGNhbGxiYWNrLT5zID0g
eG1sU3RybmR1cChzLCBsZW4pOwotICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVuOwotCi0gICAg
ICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IHZvaWQgYXBwZW5kQ29tbWVudENhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMpCi0gICAgewotICAg
ICAgICBPd25QdHI8UGVuZGluZ0NvbW1lbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihu
ZXcgUGVuZGluZ0NvbW1lbnRDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxT
dHJkdXAocyk7Ci0KLSAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKGNvbnN0
IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIq
IHN5c3RlbUlEKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdJbnRlcm5hbFN1YnNldENh
bGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxs
YmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm5hbWUgPSB4bWxTdHJkdXAobmFtZSk7Ci0gICAg
ICAgIGNhbGxiYWNrLT5leHRlcm5hbElEID0geG1sU3RyZHVwKGV4dGVybmFsSUQpOwotICAgICAg
ICBjYWxsYmFjay0+c3lzdGVtSUQgPSB4bWxTdHJkdXAoc3lzdGVtSUQpOwotCi0gICAgICAgIG1f
Y2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQg
YXBwZW5kRXJyb3JDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGUsIGNv
bnN0IHhtbENoYXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQot
ICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdFcnJvckNhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UHRyKG5ldyBQZW5kaW5nRXJyb3JDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm1l
c3NhZ2UgPSB4bWxTdHJkdXAobWVzc2FnZSk7Ci0gICAgICAgIGNhbGxiYWNrLT50eXBlID0gdHlw
ZTsKLSAgICAgICAgY2FsbGJhY2stPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBj
YWxsYmFjay0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotCi0gICAgICAgIG1fY2FsbGJh
Y2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbEFu
ZFJlbW92ZUZpcnN0Q2FsbGJhY2soWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICB7Ci0g
ICAgICAgIE93blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFr
ZUZpcnN0KCk7Ci0gICAgICAgIGNhbGxiYWNrLT5jYWxsKHBhcnNlcik7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuaXNFbXB0eSgpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgUGVuZGluZ0NhbGxiYWNrcygpIHsgfQotCi0gICAgc3RydWN0IFBlbmRp
bmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDYWxsYmFjaygpIHsgfQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKSA9IDA7Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayA6IHB1Ymxp
YyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nU3RhcnRFbGVtZW50
TlNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sTG9jYWxOYW1l
KTsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sUHJlZml4KTsKLSAgICAgICAgICAgIHhtbEZyZWUo
eG1sVVJJKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAq
IDI7IGkrKykKLSAgICAgICAgICAgICAgICB4bWxGcmVlKG5hbWVzcGFjZXNbaV0pOwotICAgICAg
ICAgICAgeG1sRnJlZShuYW1lc3BhY2VzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbmJfYXR0cmlidXRlczsgaSsrKQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgNDsgaisrKQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXNbaSAqIDUg
KyBqXSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcGFyc2VyLT5zdGFydEVsZW1lbnROcyh4bWxMb2NhbE5hbWUsIHht
bFByZWZpeCwgeG1sVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
Yl9uYW1lc3BhY2VzLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4obmFtZXNwYWNlcyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5iX2Rl
ZmF1bHRlZCwgY29uc3RfY2FzdDxjb25zdCB4bWxDaGFyKio+KGF0dHJpYnV0ZXMpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHhtbENoYXIqIHhtbExvY2FsTmFtZTsKLSAgICAgICAgeG1sQ2hhciog
eG1sUHJlZml4OwotICAgICAgICB4bWxDaGFyKiB4bWxVUkk7Ci0gICAgICAgIGludCBuYl9uYW1l
c3BhY2VzOwotICAgICAgICB4bWxDaGFyKiogbmFtZXNwYWNlczsKLSAgICAgICAgaW50IG5iX2F0
dHJpYnV0ZXM7Ci0gICAgICAgIGludCBuYl9kZWZhdWx0ZWQ7Ci0gICAgICAgIHhtbENoYXIqKiBh
dHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxi
YWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxs
KFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNl
ci0+ZW5kRWxlbWVudE5zKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IFBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAg
dmlydHVhbCB+UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHhtbEZyZWUocyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChY
TUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXIt
PmNoYXJhY3RlcnMocywgbGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0g
ICAgICAgIGludCBsZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nUHJvY2Vzc2luZ0lu
c3RydWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmly
dHVhbCB+UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgeG1sRnJlZSh0YXJnZXQpOwotICAgICAgICAgICAgeG1sRnJlZShkYXRhKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2Vy
KiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+cHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiB0YXJn
ZXQ7Ci0gICAgICAgIHhtbENoYXIqIGRhdGE7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5n
Q0RBVEFCbG9ja0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZp
cnR1YWwgflBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB4bWxGcmVlKHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1M
RG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLT5j
ZGF0YUJsb2NrKHMsIGxlbik7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiBzOwotICAg
ICAgICBpbnQgbGVuOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0NvbW1lbnRDYWxsYmFj
ayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nQ29t
bWVudENhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgeG1sRnJlZShzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJz
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+Y29tbWVudChzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nSW50
ZXJuYWxTdWJzZXRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHhtbEZyZWUobmFtZSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGV4dGVybmFsSUQpOwot
ICAgICAgICAgICAgeG1sRnJlZShzeXN0ZW1JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwYXJzZXItPmludGVybmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlE
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIG5hbWU7Ci0gICAgICAgIHhtbENoYXIq
IGV4dGVybmFsSUQ7Ci0gICAgICAgIHhtbENoYXIqIHN5c3RlbUlEOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGVuZGluZ0Vycm9yQ2FsbGJhY2s6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAg
ICAgICB2aXJ0dWFsIH5QZW5kaW5nRXJyb3JDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHhtbEZyZWUobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBw
YXJzZXItPmhhbmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2Up
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXI6OkVycm9yVHlwZSB0eXBlOwotICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwot
ICAgICAgICBpbnQgbGluZU51bWJlcjsKLSAgICAgICAgaW50IGNvbHVtbk51bWJlcjsKLSAgICB9
OwotCi0gICAgRGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKLX07
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW50IGdsb2Jh
bERlc2NyaXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9hZGVyVGhy
ZWFkID0gMDsKLQotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCi17Ci0gICAgLy8g
T25seSBtYXRjaCBsb2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdp
dGhpbiBYTUxEb2N1bWVudFBhcnNlciB0byBhdm9pZAotICAgIC8vIGludGVyZmVyaW5nIHdpdGgg
Y2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJldHVybiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIgJiYgY3VycmVudFRocmVhZCgp
ID09IGxpYnhtbExvYWRlclRocmVhZDsKLX0KLQotY2xhc3MgT2Zmc2V0QnVmZmVyIHsKLXB1Ymxp
YzoKLSAgICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBiKSA6IG1fYnVmZmVyKGIp
LCBtX2N1cnJlbnRPZmZzZXQoMCkgeyB9Ci0KLSAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIqIG91
dHB1dEJ1ZmZlciwgdW5zaWduZWQgYXNrZWRUb1JlYWQpCi0gICAgewotICAgICAgICB1bnNpZ25l
ZCBieXRlc0xlZnQgPSBtX2J1ZmZlci5zaXplKCkgLSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAg
IHVuc2lnbmVkIGxlblRvQ29weSA9IG1pbihhc2tlZFRvUmVhZCwgYnl0ZXNMZWZ0KTsKLSAgICAg
ICAgaWYgKGxlblRvQ29weSkgewotICAgICAgICAgICAgbWVtY3B5KG91dHB1dEJ1ZmZlciwgbV9i
dWZmZXIuZGF0YSgpICsgbV9jdXJyZW50T2Zmc2V0LCBsZW5Ub0NvcHkpOwotICAgICAgICAgICAg
bV9jdXJyZW50T2Zmc2V0ICs9IGxlblRvQ29weTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bGVuVG9Db3B5OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7
Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50T2Zmc2V0OwotfTsKLQotc3RhdGljIHZvaWQgc3dpdGNo
VG9VVEYxNih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCi17Ci0gICAgLy8gSGFjayBhcm91bmQgbGli
eG1sMidzIGxhY2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1hbnVhbGx5Ci0gICAg
Ly8gcmVzZXR0aW5nIHRoZSBlbmNvZGluZyB0byBVVEYtMTYgYmVmb3JlIGV2ZXJ5IGNodW5rLiAg
T3RoZXJ3aXNlIGxpYnhtbAotICAgIC8vIHdpbGwgZGV0ZWN0IDw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IjxlbmNvZGluZyBuYW1lPiI/PiBibG9ja3MKLSAgICAvLyBhbmQgc3dpdGNoIGVu
Y29kaW5ncywgY2F1c2luZyB0aGUgcGFyc2UgdG8gZmFpbC4KLSAgICBjb25zdCBVQ2hhciBCT00g
PSAweEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICB4bWxTd2l0Y2hFbmNv
ZGluZyhjdHh0LCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZM
RSA6IFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkUpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRB
bGxvd0V4dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHVybC5zdHJpbmcoKTsKLQotICAgIC8vIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBsaWJ4
bWwgYXNrcyBmb3IgdGhpcyBVUkwsIHRoZQotICAgIC8vICJYTUxfWE1MX0RFRkFVTFRfQ0FUQUxP
RyIsIG9uIGluaXRpYWxpemF0aW9uLgotICAgIGlmICh1cmxTdHJpbmcgPT0gImZpbGU6Ly8vZXRj
L3htbC9jYXRhbG9nIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT24gV2luZG93
cywgbGlieG1sIGNvbXB1dGVzIGEgVVJMIHJlbGF0aXZlIHRvIHdoZXJlIGl0cyBETEwgcmVzaWRl
cy4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIiwgZmFsc2UpICYmIHVy
bFN0cmluZy5lbmRzV2l0aCgiL2V0Yy9jYXRhbG9nIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBUaGUgbW9zdCBjb21tb24gRFRELiAgVGhlcmUgaXNuJ3QgbXVjaCBw
b2ludCBpbiBoYW1tZXJpbmcgd3d3LnczYy5vcmcKLSAgICAvLyBieSByZXF1ZXN0aW5nIHRoaXMg
VVJMIGZvciBldmVyeSBYSFRNTCBkb2N1bWVudC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dp
dGgoImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBTaW1pbGFybHksIHRoZXJlIGlzbid0IG11Y2ggcG9pbnQgaW4gcmVx
dWVzdGluZyB0aGUgU1ZHIERURC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6
Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRyIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlIGxpYnhtbCBkb2Vzbid0IGdpdmUgdXMgYSBsb3Qgb2YgY29udGV4dCBm
b3IgZGVjaWRpbmcgd2hldGhlciB0bwotICAgIC8vIGFsbG93IHRoaXMgcmVxdWVzdC4gIEluIHRo
ZSB3b3JzdCBjYXNlLCB0aGlzIGxvYWQgY291bGQgYmUgZm9yIGFuCi0gICAgLy8gZXh0ZXJuYWwg
ZW50aXR5IGFuZCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGNvdWxkIHNpbXBseSByZWFkIHRoZQot
ICAgIC8vIHJldHJpZXZlZCBjb250ZW50LiAgSWYgd2UgaGFkIG1vcmUgY29udGV4dCwgd2UgY291
bGQgcG90ZW50aWFsbHkgYWxsb3cKLSAgICAvLyB0aGUgcGFyc2VyIHRvIGxvYWQgYSBEVEQuICBB
cyB0aGluZ3Mgc3RhbmQsIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIHJvdXRlIGFu
ZCBhbGxvdyBzYW1lLW9yaWdpbiByZXF1ZXN0cyBvbmx5LgotICAgIGlmICghWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1l
c3NhZ2UodXJsKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQotewotICAg
IEFTU0VSVChYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOwotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsK
LQotICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKLQotICAgIGlmICghc2hvdWxkQWxsb3dFeHRl
cm5hbExvYWQodXJsKSkKLSAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOwotCi0gICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAg
IFZlY3RvcjxjaGFyPiBkYXRhOwotCi0KLSAgICB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJl
bnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBz
Y29wZSgwKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIHRoZSBvcmlnaW5h
bCBnbG9iYWwgZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgotCi0gICAgICAgIGlmIChjYWNoZWRSZXNv
dXJjZUxvYWRlci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5m
cmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgfQotCi0gICAgLy8g
V2UgaGF2ZSB0byBjaGVjayB0aGUgVVJMIGFnYWluIGFmdGVyIHRoZSBsb2FkIHRvIGNhdGNoIHJl
ZGlyZWN0cy4KLSAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTk2Mz4uCi0gICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZChyZXNwb25zZS51
cmwoKSkpCi0gICAgICAgIHJldHVybiAmZ2xvYmFsRGVzY3JpcHRvcjsKLQotICAgIHJldHVybiBu
ZXcgT2Zmc2V0QnVmZmVyKGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJlYWRGdW5jKHZvaWQqIGNv
bnRleHQsIGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICAvLyBEbyAwLWJ5dGUgcmVhZHMg
aW4gY2FzZSBvZiBhIG51bGwgZGVzY3JpcHRvcgotICAgIGlmIChjb250ZXh0ID09ICZnbG9iYWxE
ZXNjcmlwdG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE9mZnNldEJ1ZmZlciogZGF0YSA9
IHN0YXRpY19jYXN0PE9mZnNldEJ1ZmZlcio+KGNvbnRleHQpOwotICAgIHJldHVybiBkYXRhLT5y
ZWFkT3V0Qnl0ZXMoYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHdyaXRlRnVuYyh2b2lk
KiwgY29uc3QgY2hhciosIGludCkKLXsKLSAgICAvLyBBbHdheXMganVzdCBkbyAwLWJ5dGUgd3Jp
dGVzCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xvc2VGdW5jKHZvaWQqIGNvbnRl
eHQpCi17Ci0gICAgaWYgKGNvbnRleHQgIT0gJmdsb2JhbERlc2NyaXB0b3IpIHsKLSAgICAgICAg
T2Zmc2V0QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7
Ci0gICAgICAgIGRlbGV0ZSBkYXRhOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVO
QUJMRShYU0xUKQotc3RhdGljIHZvaWQgZXJyb3JGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgLi4u
KQotewotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRpc3BsYXkgZXJyb3IgbWVz
c2FnZXMgc29tZXdoZXJlLgotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGRpZEluaXQgPSBmYWxz
ZTsKLQotUGFzc1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQYXJzZXJDb250ZXh0OjpjcmVh
dGVTdHJpbmdQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlckRhdGEp
Ci17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAgICAg
ICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVu
YywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hG
dW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2Fk
ZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwotICAg
IH0KLQotICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0
eHQoaGFuZGxlcnMsIDAsIDAsIDAsIDApOwotICAgIHBhcnNlci0+X3ByaXZhdGUgPSB1c2VyRGF0
YTsKLSAgICBwYXJzZXItPnJlcGxhY2VFbnRpdGllcyA9IHRydWU7Ci0gICAgc3dpdGNoVG9VVEYx
NihwYXJzZXIpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBh
cnNlcikpOwotfQotCi0KLS8vIENodW5rIHNob3VsZCBiZSBlbmNvZGVkIGluIFVURi04Ci1QYXNz
UmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBh
cnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgQ1N0
cmluZyYgY2h1bmspCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJz
ZXIoKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5G
dW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxs
YmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAg
ICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQg
PSB0cnVlOwotICAgIH0KLQotICAgIC8vIGFwcGVuZEZyYWdtZW50U291cmNlKCkgY2hlY2tzIHRo
YXQgdGhlIGxlbmd0aCBkb2Vzbid0IG92ZXJmbG93IGFuIGludC4KLSAgICB4bWxQYXJzZXJDdHh0
UHRyIHBhcnNlciA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoY2h1bmsuZGF0YSgpLCBjaHVu
ay5sZW5ndGgoKSk7Ci0KLSAgICBpZiAoIXBhcnNlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBDb3B5IHRoZSBzYXggaGFuZGxlcgotICAgIG1lbWNweShwYXJzZXItPnNheCwgaGFuZGxl
cnMsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7Ci0KLSAgICAvLyBTZXQgcGFyc2VyIG9wdGlvbnMu
Ci0gICAgLy8gWE1MX1BBUlNFX05PRElDVDogZGVmYXVsdCBkaWN0aW9uYXJ5IG9wdGlvbi4KLSAg
ICAvLyBYTUxfUEFSU0VfTk9FTlQ6IGZvcmNlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMuCi0gICAg
eG1sQ3R4dFVzZU9wdGlvbnMocGFyc2VyLCBYTUxfUEFSU0VfTk9ESUNUIHwgWE1MX1BBUlNFX05P
RU5UKTsKLQotICAgIC8vIEludGVybmFsIGluaXRpYWxpemF0aW9uCi0gICAgcGFyc2VyLT5zYXgy
ID0gMTsKLSAgICBwYXJzZXItPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7IC8vIFdlIGFy
ZSBwYXJzaW5nIGEgQ09OVEVOVAotICAgIHBhcnNlci0+ZGVwdGggPSAwOwotICAgIHBhcnNlci0+
c3RyX3htbCA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sIiwgMyk7
Ci0gICAgcGFyc2VyLT5zdHJfeG1sbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgQkFE
X0NBU1QgInhtbG5zIiwgNSk7Ci0gICAgcGFyc2VyLT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1
cChwYXJzZXItPmRpY3QsIFhNTF9YTUxfTkFNRVNQQUNFLCAzNik7Ci0gICAgcGFyc2VyLT5fcHJp
dmF0ZSA9IHVzZXJEYXRhOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250
ZXh0KHBhcnNlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1ib29sIFhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQotewotICAgIHJldHVybiB2ZXJzaW9uID09ICIxLjAiOwotfQotCi1YTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZp
ZXcqIGZyYW1lVmlldykKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkK
LSAgICAsIG1fdmlldyhmcmFtZVZpZXcpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fcGVu
ZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKLSAgICAsIG1fY3VycmVu
dE5vZGUoZG9jdW1lbnQpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQotICAgICwgbV9zYXdDU1Mo
ZmFsc2UpCi0gICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKLSAgICAsIG1fc2F3Rmlyc3RF
bGVtZW50KGZhbHNlKQotICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCi0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQotICAgICwgbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcGFyc2VyUGF1c2VkKGZh
bHNlKQotICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQotICAgICwgbV9maW5pc2hDYWxs
ZWQoZmFsc2UpCi0gICAgLCBtX2Vycm9yQ291bnQoMCkKLSAgICAsIG1fbGFzdEVycm9yUG9zaXRp
b24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BlbmRpbmdT
Y3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxv
d1JhbmdlUG9zaXRpb24oKSkKLSAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQotICAgICwg
bV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLX0KLQot
WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihm
cmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV9jb250ZXh0KDAp
Ci0gICAgLCBtX3BlbmRpbmdDYWxsYmFja3MoUGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKCkpCi0g
ICAgLCBtX2N1cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAg
ICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAg
LCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNl
KQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkK
LSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Bh
cnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAs
IG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xh
c3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAg
ICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0
cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi17
Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24g
dGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hp
bGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVt
ZW50KTsKLQotICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50
Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFzdCgpOyAhZWxl
bVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewotICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9PSB4bWxuc0F0b20pCi0gICAg
ICAgICAgICAgICAgICAgIG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuc2V0KGF0dHItPmxvY2FsTmFt
ZSgpLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBub3QgaW4gZG9jdW1lbnQgdHJlZSwgdGhl
cmUgbWF5IGJlIG5vIHhtbG5zIGF0dHJpYnV0ZTsganVzdCBkZWZhdWx0IHRvIHRoZSBwYXJlbnQn
cyBuYW1lc3BhY2UuCi0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFjZVVSSS5pc051bGwoKSAmJiAh
cGFyZW50RWxlbWVudC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VV
UkkgPSBwYXJlbnRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0KLQotWE1MUGFyc2VyQ29udGV4
dDo6flhNTFBhcnNlckNvbnRleHQoKQotewotICAgIGlmIChtX2NvbnRleHQtPm15RG9jKQotICAg
ICAgICB4bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAgIHhtbEZyZWVQYXJzZXJDdHh0
KG1fY29udGV4dCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIo
KQotewotICAgIC8vIFRoZSBYTUxEb2N1bWVudFBhcnNlciB3aWxsIGFsd2F5cyBiZSBkZXRhY2hl
ZCBiZWZvcmUgYmVpbmcgZGVzdHJveWVkLgotICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2su
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotCi0gICAgLy8gRklYTUU6
IG1fcGVuZGluZ1NjcmlwdCBoYW5kbGluZyBzaG91bGQgYmUgbW92ZWQgaW50byBYTUxEb2N1bWVu
dFBhcnNlci5jcHAhCi0gICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgbV9wZW5kaW5n
U2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmRvV3JpdGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKLXsKLSAgICBBU1NFUlQoIWlzRGV0
YWNoZWQoKSk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIGluaXRpYWxpemVQYXJzZXJD
b250ZXh0KCk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBsaWJ4bWwgY29udGV4dCBmcm9tIGRlbGV0
aW9uIGR1cmluZyBhIGNhbGxiYWNrCi0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNvbnRl
eHQgPSBtX2NvbnRleHQ7Ci0KLSAgICAvLyBsaWJYTUwgdGhyb3dzIGFuIGVycm9yIGlmIHlvdSB0
cnkgdG8gc3dpdGNoIHRoZSBlbmNvZGluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIGlmIChw
YXJzZVN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0
aGUgcGFyc2VyIHRvIGRldGFjaCBkdXJpbmcgeG1sUGFyc2VDaHVuawotICAgICAgICAvLyBrZWVw
IHRoaXMgYWxpdmUgdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBkb25lLgotICAgICAgICBSZWZQdHI8
WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgc3dpdGNoVG9VVEYx
Nihjb250ZXh0LT5jb250ZXh0KCkpOwotICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNj
b3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgICAgICB4bWxQYXJz
ZUNodW5rKGNvbnRleHQtPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
cGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgc2l6ZW9mKFVDaGFyKSAqIHBhcnNlU3RyaW5nLmxl
bmd0aCgpLCAwKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0ICh3aGljaCBtYXkgYmUgcnVuIHVu
ZGVyIHRoZSB4bWxQYXJzZUNodW5rIGNhbGxzdGFjaykgbWF5Ci0gICAgICAgIC8vIGNhdXNlIHRo
ZSBwYXJzZXIgdG8gYmUgc3RvcHBlZCBvciBkZXRhY2hlZC4KLSAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBoZXJlPyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291
cmNlPwotICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2Rl
cigpLT5zYXdFcnJvcigpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJv
ciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQotICAgICAgICBoYW5kbGVFcnJv
cihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGlu
ZSwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oc3RyaW5nKSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5n
KGNvbnN0IHhtbENoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSBB
dG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nKQotewotICAg
IHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHN0cmluZykpOwotfQotCi1zdHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgewotICAgIGNvbnN0
IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci19OwotdHlwZWRlZiBz
dHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgeG1sU0FYMk5hbWVzcGFjZTsKLQotc3RhdGljIGlubGlu
ZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0
IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfbmFtZXNwYWNlcywgRXhjZXB0aW9u
Q29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQotewotICAgIHhtbFNBWDJOYW1lc3BhY2UqIG5hbWVzcGFjZXMgPSByZWludGVycHJldF9jYXN0
PHhtbFNBWDJOYW1lc3BhY2UqPihsaWJ4bWxOYW1lc3BhY2VzKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG5iX25hbWVzcGFjZXM7IGkrKykgewotICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNw
YWNlUU5hbWUgPSB4bWxuc0F0b207Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkg
PSB0b0F0b21pY1N0cmluZyhuYW1lc3BhY2VzW2ldLnVyaSk7Ci0gICAgICAgIGlmIChuYW1lc3Bh
Y2VzW2ldLnByZWZpeCkKLSAgICAgICAgICAgIG5hbWVzcGFjZVFOYW1lID0gInhtbG5zOiIgKyB0
b1N0cmluZyhuYW1lc3BhY2VzW2ldLnByZWZpeCk7Ci0gICAgICAgIG5ld0VsZW1lbnQtPnNldEF0
dHJpYnV0ZU5TKFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VRTmFtZSwg
bmFtZXNwYWNlVVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykg
Ly8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLX0KLQotc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB7Ci0gICAgY29uc3QgeG1sQ2hhciog
bG9jYWxuYW1lOwotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFy
KiB1cmk7Ci0gICAgY29uc3QgeG1sQ2hhciogdmFsdWU7Ci0gICAgY29uc3QgeG1sQ2hhciogZW5k
OwotfTsKLXR5cGVkZWYgc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB4bWxTQVgyQXR0cmlidXRl
czsKLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQq
IG5ld0VsZW1lbnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzLCBpbnQgbmJfYXR0
cmlidXRlcywgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVz
ID0gcmVpbnRlcnByZXRfY2FzdDx4bWxTQVgyQXR0cmlidXRlcyo+KGxpYnhtbEF0dHJpYnV0ZXMp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRlczsgaSsrKSB7Ci0gICAgICAg
IGludCB2YWx1ZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlidXRlc1tpXS5lbmQgLSBh
dHRyaWJ1dGVzW2ldLnZhbHVlKTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJWYWx1ZSA9IHRv
QXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udmFsdWUsIHZhbHVlTGVuZ3RoKTsKLSAgICAgICAg
U3RyaW5nIGF0dHJQcmVmaXggPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnByZWZpeCk7Ci0gICAg
ICAgIEF0b21pY1N0cmluZyBhdHRyVVJJID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBBdG9taWNT
dHJpbmcoKSA6IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udXJpKTsKLSAgICAgICAgQXRv
bWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJp
bmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDogYXR0clByZWZpeCArICI6IiArIHRvU3RyaW5n
KGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKLQotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRy
aWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlwdGluZ1Blcm1p
c3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OnN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hh
ciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxO
YW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1s
Q2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5n
Q2FsbGJhY2tzLT5hcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKHhtbExvY2FsTmFtZSwgeG1s
UHJlZml4LCB4bWxVUkksIG5iX25hbWVzcGFjZXMsIGxpYnhtbE5hbWVzcGFjZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRy
aWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLy8gY2hlY2sgaWYgdGhlIERPQ1RZ
UEUgRGVjbGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudCBleGlzdHMKLSAgICBpZiAoIW1faGFz
RG9jVHlwZURlY2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIHsK
LSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwg
bGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0g
dG9BdG9taWNTdHJpbmcoeG1sTG9jYWxOYW1lKTsKLSAgICBBdG9taWNTdHJpbmcgdXJpID0gdG9B
dG9taWNTdHJpbmcoeG1sVVJJKTsKLSAgICBBdG9taWNTdHJpbmcgcHJlZml4ID0gdG9BdG9taWNT
dHJpbmcoeG1sUHJlZml4KTsKLQotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNO
dWxsKCkpIHsKLSAgICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkpCi0gICAgICAgICAgICB1cmkg
PSBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwLmdldChwcmVmaXgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVu
dCgpKSB7Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRN
TE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCi0gICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUg
dGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAotICAgICAgICAvLyBlbnN1
cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAn
aHRtbCcKLSAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcK
LSAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkp
IHsKLSAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBl
Y3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJpLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBib29sIGlzRmlyc3RFbGVtZW50
ID0gIW1fc2F3Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKLQot
ICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7Ci0gICAgUmVm
UHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1l
LCB0cnVlKTsKLSAgICBpZiAoIW5ld0VsZW1lbnQpIHsKLSAgICAgICAgc3RvcFBhcnNpbmcoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0KCksIGxpYnhtbE5hbWVzcGFj
ZXMsIG5iX25hbWVzcGFjZXMsIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGlmIChl
YykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sQXR0cmli
dXRlcywgbmJfYXR0cmlidXRlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBuZXdFbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgU2NyaXB0RWxl
bWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsK
LSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0g
dGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQu
Z2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAg
ICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50Lmdl
dCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcGFyc2luZ0Zy
YWdtZW50ICYmIGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2
YWlsYWJsZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQot
ewotICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFy
c2VyUGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRW5kRWxlbWVu
dE5TQ2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEphdmFTY3Jp
cHQgY2FuIGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2Vk
Ci0gICAgLy8gYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPFhNTERv
Y3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJy
ZW50Tm9kZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUo
ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2Rl
KCkgfHwgIW1fdmlldykgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVh
ZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8gUGFyc2luZyBjb250aW51ZXMg
aW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVt
ZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Nj
cmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAg
IHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEb24n
dCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93
KS4KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0
ID0gdHJ1ZTsKLQotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50
LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKLSAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBh
cmVkKSB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+
aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlw
ZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9z
Y3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklY
TUU6IFNjcmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuCi0gICAgICAgIC8v
IHRoZSBsaWJ4bWwyIGFuZCBRdCBYTUxEb2N1bWVudFBhcnNlciBpbXBsZW1lbnRhdGlvbnMuCi0K
LSAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0g
ICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxC
ZVBhcnNlckV4ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlw
dEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
ZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwot
Ci0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMg
YWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgotICAgICAgICAgICAg
aWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotCi0gICAgICAg
IC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgotICAgICAgICBpZiAo
aXNEZXRhY2hlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlcXVlc3Rp
bmdTY3JpcHQgPSBmYWxzZTsKLSAgICBwb3BDdXJyZW50Tm9kZSgpOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0g
ICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQ
YXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDaGFyYWN0ZXJzQ2Fs
bGJhY2socywgbGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9sZWFm
VGV4dE5vZGUpCi0gICAgICAgIGVudGVyVGV4dCgpOwotICAgIG1fYnVmZmVyZWRUZXh0LmFwcGVu
ZChzLCBsZW4pOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplcnJvcihFcnJvclR5cGUg
dHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQotewotICAgIGlmIChpc1N0
b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQ09NUElMRVIoTVNWQykgfHwgQ09NUElM
RVIoUlZDVCkgfHwgQ09NUElMRVIoTUlOR1cpCi0gICAgY2hhciBtWzEwMjRdOwotICAgIHZzbnBy
aW50ZihtLCBzaXplb2YobSkgLSAxLCBtZXNzYWdlLCBhcmdzKTsKLSNlbHNlCi0gICAgY2hhciog
bTsKLSAgICBpZiAodmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdzKSA9PSAtMSkKLSAgICAgICAg
cmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpCi0gICAgICAgIG1fcGVu
ZGluZ0NhbGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKLQotI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIUNP
TVBJTEVSKE1JTkdXKQotICAgIGZyZWUobSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29u
c3QgeG1sQ2hhciogZGF0YSkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewotICAgICAgICBtX3BlbmRpbmdDYWxsYmFj
a3MtPmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKHRhcmdldCwgZGF0YSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhh
bmRsZSBleGNlcHRpb25zCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oCi0gICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBlYyk7
Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwaS0+c2V0Q3JlYXRlZEJ5UGFy
c2VyKHRydWUpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQocGkuZ2V0KCkp
OwotICAgIGlmIChtX3ZpZXcgJiYgIXBpLT5hdHRhY2hlZCgpKQotICAgICAgICBwaS0+YXR0YWNo
KCk7Ci0KLSAgICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0KLSAgICBpZiAocGktPmlz
Q1NTKCkpCi0gICAgICAgIG1fc2F3Q1NTID0gdHJ1ZTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBt
X3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAg
ICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIWRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZURv
Y3VtZW50KCkpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewot
ICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kQ0RBVEFCbG9ja0Nh
bGxiYWNrKHMsIGxlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgp
OwotCi0gICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3Jl
YXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwotICAgIG1fY3VycmVudE5vZGUtPnBh
cnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUt
PmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpCi17Ci0gICAgaWYgKGlzU3Rv
cHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAg
ICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDb21tZW50Q2FsbGJhY2socyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgUmVmUHRyPENvbW1l
bnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwot
ICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlm
IChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFj
aCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KGNvbnN0IHht
bENoYXIqIHZlcnNpb24sIGNvbnN0IHhtbENoYXIqIGVuY29kaW5nLCBpbnQgc3RhbmRhbG9uZSkK
LXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlmICh2ZXJzaW9uKQotICAgICAg
ICBkb2N1bWVudCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZlcnNpb24pLCBlYyk7Ci0gICAg
ZG9jdW1lbnQoKS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25lID09IDEsIGVjKTsgLy8gcG9z
c2libGUgdmFsdWVzIGFyZSAwLCAxLCBhbmQgLTEKLSAgICBpZiAoZW5jb2RpbmcpCi0gICAgICAg
IGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7Ci19Ci0KLXZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSAgICBleGl0VGV4dCgpOwot
I2lmIEVOQUJMRShYSFRNTE1QKQotICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW50ZXJuYWxTdWJzZXQoY29u
c3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hh
ciogc3lzdGVtSUQpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5h
cHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkb2N1bWVudCgpKSB7Ci0jaWYgRU5B
QkxFKFhIVE1MTVApCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQp
OwotICAgICAgICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5hbWUpOwotICAgICAgICBpZiAo
ZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iCi0gICAgICAg
ICAgICB8fCBleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIp
IHsKLSAgICAgICAgICAgIGlmIChkdGROYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5h
bWUoKSkgewotICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NU
WVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVO
dW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwotCi0g
ICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSNl
bmRpZgotCi0gICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6
Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwg
dG9TdHJpbmcoc3lzdGVtSUQpKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIFhNTERvY3Vt
ZW50UGFyc2VyKiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0
UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8WE1MRG9jdW1lbnRQYXJzZXIqPihjdHh0LT5fcHJpdmF0ZSk7Ci19
Ci0KLS8vIFRoaXMgaXMgYSBoYWNrIGFyb3VuZCBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTkyMTkKLS8vIE90aGVyd2lzZSBsaWJ4bWwgc2VlbXMgdG8gY2FsbCBh
bGwgdGhlIFNBWCBjYWxsYmFja3MgdHdpY2UgZm9yIGFueSByZXBsYWNlZCBlbnRpdHkuCi1zdGF0
aWMgaW5saW5lIGJvb2wgaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyh2b2lkKiBjbG9zdXJlKQot
ewotI2lmIExJQlhNTF9WRVJTSU9OID49IDIwNjI3Ci0gICAgVU5VU0VEX1BBUkFNKGNsb3N1cmUp
OwotCi0gICAgLy8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gbGlieG1sIDIuNi4yNy4KLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx4bWxQYXJzZXJD
dHh0UHRyPihjbG9zdXJlKS0+bm9kZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzdGFydEVs
ZW1lbnROc0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1lLCBj
b25zdCB4bWxDaGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIqIHVyaSwgaW50IG5iX25hbWVzcGFj
ZXMsIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5i
X2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYg
KGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c3RhcnRFbGVtZW50TnMobG9jYWxuYW1lLCBwcmVmaXgs
IHVyaSwgbmJfbmFtZXNwYWNlcywgbmFtZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVs
dGVkLCBsaWJ4bWxBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFu
ZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciosIGNvbnN0
IHhtbENoYXIqKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVuZEVsZW1lbnRO
cygpOwotfQotCi1zdGF0aWMgdm9pZCBjaGFyYWN0ZXJzSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBj
b25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50
aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3Vy
ZSktPmNoYXJhY3RlcnMocywgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0
IHhtbENoYXIqIGRhdGEpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xv
c3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+cHJvY2Vz
c2luZ0luc3RydWN0aW9uKHRhcmdldCwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNkYXRhQmxv
Y2tIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0g
ICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2RhdGFCbG9jayhzLCBsZW4pOwotfQotCi1z
dGF0aWMgdm9pZCBjb21tZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBj
b21tZW50KQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNvbW1lbnQoY29tbWVu
dCk7Ci19Ci0KLVdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpCi1zdGF0aWMgdm9pZCB3YXJuaW5n
SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAg
dmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNl
cihjbG9zdXJlKS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Ondhcm5pbmcsIG1lc3NhZ2UsIGFy
Z3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykK
LXN0YXRpYyB2b2lkIGZhdGFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywg
bWVzc2FnZSk7Ci0gICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNl
cjo6ZmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FU
VFJJQlVURV9QUklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIG5vcm1hbEVycm9ySGFuZGxlcih2b2lk
KiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdz
OwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+
ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Om5vbkZhdGFsLCBtZXNzYWdlLCBhcmdzKTsKLSAgICB2
YV9lbmQoYXJncyk7Ci19Ci0KLS8vIFVzaW5nIGEgc3RhdGljIGVudGl0eSBhbmQgbWFya2luZyBp
dCBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkgaXMKLS8vIGEgaGFjayB0byBhdm9pZCBt
YWxsb2MvZnJlZS4gVXNpbmcgYSBnbG9iYWwgdmFyaWFibGUgbGlrZSB0aGlzIGNvdWxkIGNhdXNl
IHRyb3VibGUKLS8vIGlmIGxpYnhtbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdlcmUgdG8gY2hh
bmdlCi1zdGF0aWMgeG1sQ2hhciBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdFs1XSA9IHswLCAwLCAw
LCAwLCAwfTsKLQotc3RhdGljIHhtbEVudGl0eVB0ciBzaGFyZWRYSFRNTEVudGl0eSgpCi17Ci0g
ICAgc3RhdGljIHhtbEVudGl0eSBlbnRpdHk7Ci0gICAgaWYgKCFlbnRpdHkudHlwZSkgewotICAg
ICAgICBlbnRpdHkudHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAgICAgICAgZW50aXR5Lm9yaWcg
PSBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmNvbnRlbnQgPSBzaGFy
ZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmV0eXBlID0gWE1MX0lOVEVSTkFM
X1BSRURFRklORURfRU5USVRZOwotICAgIH0KLSAgICByZXR1cm4gJmVudGl0eTsKLX0KLQotc3Rh
dGljIHhtbEVudGl0eVB0ciBnZXRYSFRNTEVudGl0eShjb25zdCB4bWxDaGFyKiBuYW1lKQotewot
ICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihuYW1lKSk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJp
bmcgdmFsdWUgPSBTdHJpbmcoJmMsIDEpLnV0ZjgoKTsKLSAgICBBU1NFUlQodmFsdWUubGVuZ3Ro
KCkgPCA1KTsKLSAgICB4bWxFbnRpdHlQdHIgZW50aXR5ID0gc2hhcmVkWEhUTUxFbnRpdHkoKTsK
LSAgICBlbnRpdHktPmxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotICAgIGVudGl0eS0+bmFtZSA9
IG5hbWU7Ci0gICAgbWVtY3B5KHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0LCB2YWx1ZS5kYXRhKCks
IGVudGl0eS0+bGVuZ3RoICsgMSk7Ci0KLSAgICByZXR1cm4gZW50aXR5OwotfQotCi1zdGF0aWMg
eG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hh
ciogbmFtZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQ
YXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICB4bWxFbnRpdHlQdHIgZW50ID0geG1sR2V0UHJl
ZGVmaW5lZEVudGl0eShuYW1lKTsKLSAgICBpZiAoZW50KSB7Ci0gICAgICAgIGVudC0+ZXR5cGUg
PSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7Ci0gICAgICAgIHJldHVybiBlbnQ7Ci0g
ICAgfQotCi0gICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKLSAg
ICBpZiAoIWVudCAmJiAoZ2V0UGFyc2VyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKQotI2lm
IEVOQUJMRShYSFRNTE1QKQotICAgICAgICAgICAgICAgICB8fCBnZXRQYXJzZXIoY2xvc3VyZSkt
PmlzWEhUTUxNUERvY3VtZW50KCkKLSNlbmRpZgotICAgICAgICkpIHsKLSAgICAgICAgZW50ID0g
Z2V0WEhUTUxFbnRpdHkobmFtZSk7Ci0gICAgICAgIGlmIChlbnQpCi0gICAgICAgICAgICBlbnQt
PmV0eXBlID0gWE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwotICAgIH0KLQotICAgIHJldHVy
biBlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0RG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1
cmUpCi17Ci0gICAgeG1sUGFyc2VyQ3R4dCogY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0
eHQqPihjbG9zdXJlKTsKLSAgICBzd2l0Y2hUb1VURjE2KGN0eHQpOwotICAgIGdldFBhcnNlcihj
bG9zdXJlKS0+c3RhcnREb2N1bWVudChjdHh0LT52ZXJzaW9uLCBjdHh0LT5lbmNvZGluZywgY3R4
dC0+c3RhbmRhbG9uZSk7Ci0gICAgeG1sU0FYMlN0YXJ0RG9jdW1lbnQoY2xvc3VyZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVuZERvY3VtZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlKQotewotICAgIGdl
dFBhcnNlcihjbG9zdXJlKS0+ZW5kRG9jdW1lbnQoKTsKLSAgICB4bWxTQVgyRW5kRG9jdW1lbnQo
Y2xvc3VyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBj
bG9zdXJlLCBjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBj
b25zdCB4bWxDaGFyKiBzeXN0ZW1JRCkKLXsKLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmludGVy
bmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICB4bWxTQVgySW50ZXJu
YWxTdWJzZXQoY2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwotfQotCi1zdGF0
aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hh
ciosIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHhtbENoYXIqKQotewotICAgIFN0
cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwotICAgIGlmICgoZXh0SWQgPT0gIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikKLSAgICAgICAgfHwgKGV4dElk
ID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAi
LS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9
PSAiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9
PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKQotICAgICAgICB8
fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBT
VkcgMS4xLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRN
TCBNb2JpbGUgMS4wLy9FTiIpCi0gICAgICAgKQotICAgICAgICBnZXRQYXJzZXIoY2xvc3VyZSkt
PnNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRp
dGllcyBvciBub3QuCi19Ci0KLXN0YXRpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVy
KHZvaWQqLCBjb25zdCB4bWxDaGFyKiwgaW50KQotewotICAgIC8vIG5vdGhpbmcgdG8gZG8sIGJ1
dCB3ZSBuZWVkIHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVyCi0gICAgLy8gaHR0cDovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1Ci0gICAgLy8gaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MgotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJiBjaHVuaykKLXsK
LSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkp
OwotCi0gICAgc2F4LmVycm9yID0gbm9ybWFsRXJyb3JIYW5kbGVyOwotICAgIHNheC5mYXRhbEVy
cm9yID0gZmF0YWxFcnJvckhhbmRsZXI7Ci0gICAgc2F4LmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJz
SGFuZGxlcjsKLSAgICBzYXgucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlcjsKLSAgICBzYXguY2RhdGFCbG9jayA9IGNkYXRhQmxvY2tIYW5kbGVyOwot
ICAgIHNheC5jb21tZW50ID0gY29tbWVudEhhbmRsZXI7Ci0gICAgc2F4Lndhcm5pbmcgPSB3YXJu
aW5nSGFuZGxlcjsKLSAgICBzYXguc3RhcnRFbGVtZW50TnMgPSBzdGFydEVsZW1lbnROc0hhbmRs
ZXI7Ci0gICAgc2F4LmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4
LmdldEVudGl0eSA9IGdldEVudGl0eUhhbmRsZXI7Ci0gICAgc2F4LnN0YXJ0RG9jdW1lbnQgPSBz
dGFydERvY3VtZW50SGFuZGxlcjsKLSAgICBzYXguZW5kRG9jdW1lbnQgPSBlbmREb2N1bWVudEhh
bmRsZXI7Ci0gICAgc2F4LmludGVybmFsU3Vic2V0ID0gaW50ZXJuYWxTdWJzZXRIYW5kbGVyOwot
ICAgIHNheC5leHRlcm5hbFN1YnNldCA9IGV4dGVybmFsU3Vic2V0SGFuZGxlcjsKLSAgICBzYXgu
aWdub3JhYmxlV2hpdGVzcGFjZSA9IGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyOwotICAgIHNh
eC5lbnRpdHlEZWNsID0geG1sU0FYMkVudGl0eURlY2w7Ci0gICAgc2F4LmluaXRpYWxpemVkID0g
WE1MX1NBWDJfTUFHSUM7Ci0gICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOwotICAg
IG1fc2F3RXJyb3IgPSBmYWxzZTsKLSAgICBtX3Nhd0NTUyA9IGZhbHNlOwotICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gZmFsc2U7Ci0gICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKLQotICAg
IFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSk7Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2NvbnRleHQg
PSBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIoJnNheCwgdGhpcywgY2h1bmsp
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoIWNodW5rLmRhdGEoKSk7Ci0gICAgICAgIG1f
Y29udGV4dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCB0aGlz
KTsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKCkKLXsKLSAgICBp
ZiAoIWlzU3RvcHBlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAg
IC8vIFRlbGwgbGlieG1sIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpKTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGNvbnRleHQoKSwgMCwg
MCwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fY29udGV4dCA9IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBYTUxUcmVlVmlld2VyIHhtbFRy
ZWVWaWV3ZXIoZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCB4bWxWaWV3ZXJNb2RlID0gIW1fc2F3RXJy
b3IgJiYgIW1fc2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiB4bWxUcmVlVmlld2VyLmhh
c05vU3R5bGVJbmZvcm1hdGlvbigpOwotICAgIGlmICh4bWxWaWV3ZXJNb2RlKQotICAgICAgICB4
bWxUcmVlVmlld2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmlldygpOwotCi0gICAgaWYgKG1f
c2F3WFNMVHJhbnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9IHhtbERvY1B0ckZvclN0cmlu
Zyhkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGRvY3VtZW50
KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNmb3JtU291cmNlKGRvYykp
KTsKLQotICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUg
ZG9jdW1lbnQgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IFhTTCBzdHlsZXNoZWV0
cy4KLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJ
bW1lZGlhdGVseSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcodHJ1ZSk7Ci0KLSAg
ICAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LSNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0
cgotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJl
IHRvIHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9y
IG1lc3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KCZCT00pOwotCi0gICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShjYWNoZWRS
ZXNvdXJjZUxvYWRlciwgZXJyb3JGdW5jLCAwKTsKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0g
eG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFj
dGVycygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uu
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2
QkUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTTFRfUEFSU0Vf
T1BUSU9OUyk7Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLSNlbmRpZgotCi1pbnQgWE1MRG9j
dW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGUgaW1w
bGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91
bGQgcmV0dXJuIDAtYmFzZWQuCi0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5w
dXQtPmxpbmUgOiAxOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1
cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KLSAgICBy
ZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29sIDogMTsKLX0KLQotVGV4dFBv
c2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICB4
bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7Ci0g
ICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IHByb2JhYmx5IGNvbnRhaW5zIDEtYmFzZWQgbnVtYmVy
cywgYnV0IHdlIHRyZWF0IHRoZW0gYXMgMC1iYXNlZCwKLSAgICAvLyAgICAgICAgdG8gYmUgY29u
c2lzdGVudCB3aXRoIGZpeG1lJ3MgaW4gbGluZU51bWJlcigpIGFuZCBjb2x1bW5OdW1iZXIKLSAg
ICAvLyAgICAgICAgbWV0aG9kcy4KLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9C
YXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0gICAg
ICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0
LT5jb2wpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaGFzIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlv
biwgaW4gY29udHJhc3QgdG8gdGV4dFBvc2l0aW9uKCkgbWV0aG9kLgotLy8gSXQgc2hvdWxkIHJl
cGxhY2UgdGV4dFBvc2l0aW9uKCkuCi1UZXh0UG9zaXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0
ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250
ZXh0ID0gdGhpcy0+Y29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOwotICAgIHJldHVybiBUZXh0UG9zaXRp
b24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+
bGluZSksCi0gICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250
ZXh0LT5pbnB1dC0+Y29sKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJz
aW5nKCkKLXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBpZiAoY29u
dGV4dCgpKQotICAgICAgICB4bWxTdG9wUGFyc2VyKGNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQotewotICAgIEFTU0VSVCghaXNEZXRhY2hl
ZCgpKTsKLSAgICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQg
PSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwot
ICAgIHdoaWxlICghbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2tzLT5jYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayh0aGlzKTsKLQotICAg
ICAgICAvLyBBIGNhbGxiYWNrIHBhdXNlZCB0aGUgcGFyc2VyCi0gICAgICAgIGlmIChtX3BhcnNl
clBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCB3cml0
ZSBhbnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdT
cmM7Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAg
Ly8gRmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB3cml0ZSgpIGRpZG4n
dCByZXN1bHQKLSAgICAvLyBpbiBhbnkgZnVydGhlciBjYWxsYmFja3MgYmVpbmcgcXVldWVkLCBj
YWxsIGVuZCgpCi0gICAgaWYgKG1fZmluaXNoQ2FsbGVkICYmIG1fcGVuZGluZ0NhbGxiYWNrcy0+
aXNFbXB0eSgpKQotICAgICAgICBlbmQoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6
YXBwZW5kRnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBjaHVuaykKLXsKLSAgICBBU1NFUlQo
IW1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFyc2luZ0ZyYWdtZW50KTsKLQotICAgIENTdHJp
bmcgY2h1bmtBc1V0ZjggPSBjaHVuay51dGY4KCk7Ci0gICAgCi0gICAgLy8gbGlieG1sMiB0YWtl
cyBhbiBpbnQgZm9yIGEgbGVuZ3RoLCBhbmQgdGhlcmVmb3JlIGNhbid0IGhhbmRsZSBYTUwgY2h1
bmtzIGxhcmdlciB0aGFuIDIgR2lCLgotICAgIGlmIChjaHVua0FzVXRmOC5sZW5ndGgoKSA+IElO
VF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluaXRpYWxpemVQYXJzZXJDb250
ZXh0KGNodW5rQXNVdGY4KTsKLSAgICB4bWxQYXJzZUNvbnRlbnQoY29udGV4dCgpKTsKLSAgICBl
bmREb2N1bWVudCgpOyAvLyBDbG9zZSBhbnkgb3BlbiB0ZXh0IG5vZGVzLgotCi0gICAgLy8gRklY
TUU6IElmIHRoaXMgY29kZSBpcyBhY3R1YWxseSBuZWVkZWQsIGl0IHNob3VsZCBwcm9iYWJseSBt
b3ZlIHRvIGZpbmlzaCgpCi0gICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJRdCBoYXMgYSBzaW1pbGFy
IGNoZWNrIChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVu
ZE9mRG9jdW1lbnRFcnJvcikgaW4gZG9FbmQoKS4KLSAgICAvLyBDaGVjayBpZiBhbGwgdGhlIGNo
dW5rIGhhcyBiZWVuIHByb2Nlc3NlZC4KLSAgICBsb25nIGJ5dGVzUHJvY2Vzc2VkID0geG1sQnl0
ZUNvbnN1bWVkKGNvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVzUHJvY2Vzc2VkID09IC0xIHx8ICgo
dW5zaWduZWQgbG9uZylieXRlc1Byb2Nlc3NlZCkgIT0gY2h1bmtBc1V0ZjgubGVuZ3RoKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IEkgZG9uJ3QgYmVsaWV2ZSB3ZSBjYW4gaGl0IHRoaXMgY2FzZSB3
aXRob3V0IGFsc28gaGF2aW5nIHNlZW4gYW4gZXJyb3Igb3IgYSBudWxsIGJ5dGUuCi0gICAgICAg
IC8vIElmIHdlIGhpdCB0aGlzIEFTU0VSVCwgd2UndmUgZm91bmQgYSB0ZXN0IGNhc2Ugd2hpY2gg
ZGVtb25zdHJhdGVzIHRoZSBuZWVkIGZvciB0aGlzIGNvZGUuCi0gICAgICAgIEFTU0VSVChtX3Nh
d0Vycm9yIHx8IChieXRlc1Byb2Nlc3NlZCA+PSAwICYmICFjaHVua0FzVXRmOC5kYXRhKClbYnl0
ZXNQcm9jZXNzZWRdKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBO
byBlcnJvciBpZiB0aGUgY2h1bmsgaXMgd2VsbCBmb3JtZWQgb3IgaXQgaXMgbm90IGJ1dCB3ZSBo
YXZlIG5vIGVycm9yLgotICAgIHJldHVybiBjb250ZXh0KCktPndlbGxGb3JtZWQgfHwgIXhtbEN0
eHRHZXRMYXN0RXJyb3IoY29udGV4dCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsK
LQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9z
dXJlLCBjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIC8qeG1sUHJl
Zml4Ki8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHhtbENoYXIqIC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFjZXMqLywgY29uc3QgeG1sQ2hh
cioqIC8qbmFtZXNwYWNlcyovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVmYXVsdGVkKi8sIGNvbnN0IHht
bENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzKQotewotICAgIGlmIChzdHJjbXAocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJzIikgIT0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFy
c2VyQ3R4dFB0cj4oY2xvc3VyZSk7Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUgPSBz
dGF0aWNfY2FzdDxBdHRyaWJ1dGVQYXJzZVN0YXRlKj4oY3R4dC0+X3ByaXZhdGUpOwotCi0gICAg
c3RhdGUtPmdvdEF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0
dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0
cmlidXRlcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsK
LSAgICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxv
Y2FsbmFtZSk7Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IChpbnQpIChhdHRyaWJ1dGVzW2ld
LmVuZCAtIGF0dHJpYnV0ZXNbaV0udmFsdWUpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0g
dG9TdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgICAgICBTdHJp
bmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKLSAgICAgICAg
U3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gYXR0ckxvY2FsTmFtZSA6
IGF0dHJQcmVmaXggKyAiOiIgKyBhdHRyTG9jYWxOYW1lOwotCi0gICAgICAgIHN0YXRlLT5hdHRy
aWJ1dGVzLnNldChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7Ci0gICAgfQotfQotCi1IYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wm
IGF0dHJzT0spCi17Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKLSAgICBzdGF0ZS5n
b3RBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1z
ZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwotICAgIHNheC5zdGFydEVsZW1lbnROcyA9IGF0dHJp
YnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NB
WDJfTUFHSUM7Ci0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IHBhcnNlciA9IFhNTFBhcnNl
ckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCAmc3RhdGUpOwotICAgIFN0cmluZyBw
YXJzZVN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAiICsgc3RyaW5nICsg
IiAvPiI7Ci0gICAgeG1sUGFyc2VDaHVuayhwYXJzZXItPmNvbnRleHQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgcGFyc2VTdHJpbmcu
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAxKTsKLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0
cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdl
YmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtp
dC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1
ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUg
IkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgi
Ci0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5o
IgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5j
bHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5o
IgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW50aXR5
UmVzb2x2ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIHsKLSAgICB2aXJ0dWFs
IFFTdHJpbmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSk7Ci19
OwotCi1RU3RyaW5nIEVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eShjb25z
dCBRU3RyaW5nICZuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShuYW1l
LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKLSAgICByZXR1cm4gUVN0cmluZyhjKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNl
cjo6c3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICByZXR1
cm4gdmVyc2lvbiA9PSAiMS4wIjsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50
UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi0gICAgOiBT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0gICAgLCBtX3ZpZXcoZnJhbWVWaWV3
KQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGRvY3VtZW50
KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwg
bV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkK
LSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAg
ICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1f
cmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAg
ICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKLSAgICAsIG1fc2NyaXB0aW5nUGVy
bWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0gICAgbV9zdHJlYW0uc2V0RW50
aXR5UmVzb2x2ZXIobmV3IEVudGl0eVJlc29sdmVyKTsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBw
YXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAg
ICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fdmlldygwKQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2Rl
KGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNl
KQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVu
dChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRN
TE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlw
ZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkK
LSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZh
bHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0
KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5n
ZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3Jp
cHRpbmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCi17Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0g
ICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9y
PEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAg
ICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQotICAgICAgICBOb2RlKiBuID0g
cGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFy
YXRpb25zIG5hbWVzcGFjZXM7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNr
Lmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsK
LSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkp
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7
IGkrKykgewotICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1
dGVJdGVtKGkpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAieG1s
bnMiKQotICAgICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52
YWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09ICJ4bWxu
cyIpCi0gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYXBwZW5kKFFYbWxTdHJlYW1OYW1l
c3BhY2VEZWNsYXJhdGlvbihhdHRyLT5sb2NhbE5hbWUoKSwgYXR0ci0+dmFsdWUoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3RyZWFtLmFkZEV4dHJhTmFtZXNw
YWNlRGVjbGFyYXRpb25zKG5hbWVzcGFjZXMpOwotICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29s
dmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAvLyBJZiB0aGUgcGFyZW50IGVsZW1lbnQg
aXMgbm90IGluIGRvY3VtZW50IHRyZWUsIHRoZXJlIG1heSBiZSBubyB4bWxucyBhdHRyaWJ1dGU7
IGp1c3QgZGVmYXVsdCB0byB0aGUgcGFyZW50J3MgbmFtZXNwYWNlLgotICAgIGlmIChtX2RlZmF1
bHROYW1lc3BhY2VVUkkuaXNOdWxsKCkgJiYgIXBhcmVudEVsZW1lbnQtPmluRG9jdW1lbnQoKSkK
LSAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gcGFyZW50RWxlbWVudC0+bmFtZXNwYWNl
VVJJKCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewot
ICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0g
ICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIGRlbGV0ZSBt
X3N0cmVhbS5lbnRpdHlSZXNvbHZlcigpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpk
b1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCi17Ci0gICAgbV93cm90ZVRleHQgPSB0
cnVlOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNv
ZGVyKCktPnNhd0Vycm9yKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVy
cm9yLCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAgICAgIGhhbmRsZUVy
cm9yKGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFFTdHJpbmcgZGF0YShwYXJzZVN0cmlu
Zyk7Ci0gICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1h
eSBjYXVzZSB0aGUgcGFyc2VyIHRvIGRldGFjaCwKLSAgICAgICAgLy8ga2VlcCB0aGlzIGFsaXZl
IHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50
UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgIG1fc3RyZWFtLmFkZERhdGEoZGF0YSk7
Ci0gICAgICAgIHBhcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJikKLXsK
LSAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7Ci0gICAgbV9zYXdFcnJvciA9IGZh
bHNlOwotICAgIG1fc2F3Q1NTID0gZmFsc2U7Ci0gICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSBmYWxz
ZTsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpkb0VuZCgpCi17Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgaWYgKG1fc2F3WFNMVHJh
bnNmb3JtKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0
cihuZXcgVHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pKSk7Ci0g
ICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2MgdGhp
bmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCi0gICAgICAgIGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwotICAg
ICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKHRydWUpOwotICAgICAgICBEb2N1bWVudFBhcnNl
cjo6c3RvcFBhcnNpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX3N0cmVhbS5lcnJv
cigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcgotICAg
ICAgICB8fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50ICYmICFtX3Nhd1hTTFRy
YW5zZm9ybSAmJiAhbV9zYXdFcnJvcikpCi0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJp
bnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJl
cigpKTsKLX0KLQotaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zdHJlYW0ubGluZU51bWJlcigpOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVt
bk51bWJlcigpOwotfQotCi1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2Vk
TnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7Ci19Ci0KLS8vIFRoaXMgbWV0
aG9kIGluY29ycmVjdGx5IHJlaW50ZXJwcmV0cyB6ZXJvLWJhc2UgbGluZU51bWJlciBtZXRob2Qg
YXMgb25lLWJhc2VkIG51bWJlci4KLS8vIEZJWE1FOiBUaGlzIGVycm9yIGlzIGtlcHQgZm9yIGNv
bXBhdGliaWxpdHkuIFdlIHNob3VsZCBmaXggaXQgZXZlbnR1YWxseS4gCi1UZXh0UG9zaXRpb24x
IFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGxpbmVOdW1iZXIoKSksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1
bW5OdW1iZXIoKSkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygp
Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwotfQotCi12
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQobV9w
YXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKLQotICAgIC8vIEZp
cnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHBhcnNlKCk7Ci0gICAgaWYg
KG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBh
bnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7
Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8g
RmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBhcHBlbmQoKSBkaWRuJ3Qg
cmVzdWx0Ci0gICAgLy8gaW4gYW55IGZ1cnRoZXIgY2FsbGJhY2tzIGJlaW5nIHF1ZXVlZCwgY2Fs
bCBlbmQoKQotICAgIGlmIChtX2ZpbmlzaENhbGxlZCAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1f
cGVuZGluZ1NjcmlwdCkKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAgIEFT
U0VSVCghbV9zYXdGaXJzdEVsZW1lbnQpOwotICAgIGFwcGVuZChTdHJpbmcoIjxxeG1sc3RyZWFt
ZHVtbXllbGVtZW50PiIpKTsKLSAgICBhcHBlbmQoc291cmNlKTsKLSAgICBhcHBlbmQoU3RyaW5n
KCI8L3F4bWxzdHJlYW1kdW1teWVsZW1lbnQ+IikpOwotICAgIHJldHVybiAhaGFzRXJyb3IoKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJp
YnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7
Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0
YXJ0RWxlbWVudE5zSGFuZGxlcihBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSwgY29uc3QgUVht
bFN0cmVhbUF0dHJpYnV0ZXMmIGF0dHJzKQotewotICAgIGlmIChhdHRycy5jb3VudCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlLT5nb3RBdHRyaWJ1dGVzID0gdHJ1ZTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUmIGF0dHIgPSBhdHRyc1tpXTsKLSAgICAgICAgU3RyaW5n
IGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAg
ICAgPSBhdHRyLnZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5u
YW1lc3BhY2VVcmkoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxp
ZmllZE5hbWUoKTsKLSAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0
clZhbHVlKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykKLXsKLSAgICBBdHRyaWJ1
dGVQYXJzZVN0YXRlIHN0YXRlOwotICAgIHN0YXRlLmdvdEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQot
ICAgIFFYbWxTdHJlYW1SZWFkZXIgc3RyZWFtOwotICAgIFFTdHJpbmcgZHVtbXkgPSBRU3RyaW5n
KFFMYXRpbjFTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICUxIC8+IikpLmFy
ZyhzdHJpbmcpOwotICAgIHN0cmVhbS5hZGREYXRhKGR1bW15KTsKLSAgICB3aGlsZSAoIXN0cmVh
bS5hdEVuZCgpKSB7Ci0gICAgICAgIHN0cmVhbS5yZWFkTmV4dCgpOwotICAgICAgICBpZiAoc3Ry
ZWFtLmlzU3RhcnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXNTdGFydEVsZW1l
bnROc0hhbmRsZXIoJnN0YXRlLCBzdHJlYW0uYXR0cmlidXRlcygpKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUu
YXR0cmlidXRlczsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcHJlZml4RnJvbVFOYW1lKGNv
bnN0IFFTdHJpbmcmIHFOYW1lKQotewotICAgIGNvbnN0IGludCBvZmZzZXQgPSBxTmFtZS5pbmRl
eE9mKFFMYXRpbjFDaGFyKCc6JykpOwotICAgIGlmIChvZmZzZXQgPD0gMCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHFOYW1lLmxlZnQob2Zmc2V0
KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1l
bnQqIG5ld0VsZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMgJm5z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5zLmNvdW50KCk7ICsraSkgewotICAgICAgICBj
b25zdCBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gJmRlY2wgPSBuc1tpXTsKLSAgICAg
ICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGRlY2wubmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIFN0
cmluZyBuYW1lc3BhY2VRTmFtZSA9IGRlY2wucHJlZml4KCkuaXNFbXB0eSgpID8gU3RyaW5nKCJ4
bWxucyIpIDogU3RyaW5nKCJ4bWxuczoiKTsKLSAgICAgICAgbmFtZXNwYWNlUU5hbWUuYXBwZW5k
KGRlY2wucHJlZml4KCkpOwotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUygiaHR0
cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNlVVJJ
LCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9u
IHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1l
bnQsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzICZhdHRycywgRXhjZXB0aW9uQ29kZSYgZWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhdHRycy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUVhtbFN0cmVhbUF0
dHJpYnV0ZSAmYXR0ciA9IGF0dHJzW2ldOwotICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9
IGF0dHIubmFtZSgpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlICAgICA9IGF0dHIudmFsdWUo
KTsKLSAgICAgICAgU3RyaW5nIGF0dHJVUkkgICAgICAgPSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogU3RyaW5nKGF0dHIubmFtZXNwYWNlVXJpKCkpOwotICAgICAg
ICBTdHJpbmcgYXR0clFOYW1lICAgICA9IGF0dHIucXVhbGlmaWVkTmFtZSgpOwotICAgICAgICBu
ZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwg
ZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBz
ZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlKCkKLXsKLSAgICB3aGlsZSAoIWlzU3RvcHBlZCgpICYm
ICFtX3BhcnNlclBhdXNlZCAmJiAhbV9zdHJlYW0uYXRFbmQoKSkgewotICAgICAgICBtX3N0cmVh
bS5yZWFkTmV4dCgpOwotICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDogewotICAgICAgICAg
ICAgc3RhcnREb2N1bWVudCgpOwotICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDogewotICAgICAgICAgICAgZW5k
RG9jdW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0g
ICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSAmJiAhbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwg
IkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAg
ICAgICAgcGFyc2VTdGFydEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRWxlbWVudDogewotICAgICAgICAg
ICAgcGFyc2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKLSAgICAgICAgICAgIGlm
IChtX3N0cmVhbS5pc0NEQVRBKCkpIHsKLSAgICAgICAgICAgICAgICAvL2NkYXRhCi0gICAgICAg
ICAgICAgICAgcGFyc2VDZGF0YSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvL2NoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICBwYXJzZUNoYXJhY3RlcnMoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVhtbFN0cmVhbVJlYWRlcjo6Q29tbWVudDogewotICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1S
ZWFkZXI6OkRURDogewotICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFRE
IjsKLSAgICAgICAgICAgIHBhcnNlRHRkKCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAg
ICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5
UmVmZXJlbmNlOiB7Ci0gICAgICAgICAgICAvL3FEZWJ1ZygpPDwiLS0tLS0tLS0tLSBFTlRJVFkg
PSAiPDxtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKQotICAgICAgICAgICAgLy8gICAgICAgIDw8
IiwgdCA9ICI8PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKGlz
WEhUTUxEb2N1bWVudCgpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICAgICAgfHwg
aXNYSFRNTE1QRG9jdW1lbnQoKQotI2VuZGlmCi0gICAgICAgICAgICAgICApIHsKLSAgICAgICAg
ICAgICAgICBRU3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUoKS50b1N0cmluZygpOwotICAg
ICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHkudG9VdGY4KCku
Y29uc3REYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAg
ICAgICAgICAgICAgICAgIGVudGVyVGV4dCgpOwotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIoJmMsIDEpOwotICAgICAgICAg
ICAgICAgIC8vIHFEZWJ1ZygpPDwiIC0tLS0tLS0gYWRkaW5nIGVudGl0eSAiPDxzdHI7Ci0gICAg
ICAgICAgICAgICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEoc3RyLCBlYyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxT
dHJlYW1SZWFkZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjogewotICAgICAgICAgICAgcGFyc2VQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbS5lcnJvcigpICE9IFFY
bWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgewotICAgICAgICAg
ICAgICAgIEVycm9yVHlwZSB0eXBlID0gKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJl
YWRlcjo6Tm90V2VsbEZvcm1lZEVycm9yKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYXRhbCA6IHdhcm5pbmc7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwg
cVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoKQotewotICAgIGluaXRpYWxpemVQYXJz
ZXJDb250ZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KLSAgICBpZiAoIW1fcGFy
c2luZ0ZyYWdtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFhNTFN0YW5kYWxvbmUobV9z
dHJlYW0uaXNTdGFuZGFsb25lRG9jdW1lbnQoKSwgZWMpOwotCi0gICAgICAgIFFTdHJpbmdSZWYg
dmVyc2lvbiA9IG1fc3RyZWFtLmRvY3VtZW50VmVyc2lvbigpOwotICAgICAgICBpZiAoIXZlcnNp
b24uaXNFbXB0eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MVmVyc2lvbih2ZXJz
aW9uLCBlYyk7Ci0gICAgICAgIFFTdHJpbmdSZWYgZW5jb2RpbmcgPSBtX3N0cmVhbS5kb2N1bWVu
dEVuY29kaW5nKCk7Ci0gICAgICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIH0KLX0KLQotdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQotewotICAgIGlmICghbV9z
YXdGaXJzdEVsZW1lbnQgJiYgbV9wYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgLy8gc2tpcCBk
dW1teSBlbGVtZW50IGZvciBmcmFnbWVudHMKLSAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0
cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFN0
cmluZyBsb2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCk7Ci0gICAgU3RyaW5nIHVyaSAgICAgICA9
IG1fc3RyZWFtLm5hbWVzcGFjZVVyaSgpOwotICAgIFN0cmluZyBwcmVmaXggICAgPSBwcmVmaXhG
cm9tUU5hbWUobV9zdHJlYW0ucXVhbGlmaWVkTmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgaWYg
KG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewotICAgICAgICBRX0FTU0VSVChw
cmVmaXguaXNOdWxsKCkpOwotICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0g
ICAgfQotCi0gICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsK
LSAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1l
bnQocU5hbWUsIHRydWUpOwotICAgIGlmICghbmV3RWxlbWVudCkgewotICAgICAgICBzdG9wUGFy
c2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0g
ICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0gICAg
ICAgIC8vIEFzIHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAy
MC1BLnBkZiwKLSAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVs
ZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCi0gICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0
aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJwotICAgICAgICAv
LyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwotICAgICAgICBpZiAobG9j
YWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJv
b3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
Ukk7Ci0gICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgICAgICAg
ICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJlYW1OYW1lc3Bh
Y2VEZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nh
d0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhuZXdFbGVtZW50
LmdldCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVt
ZW50LmdldCgpLCBtX3N0cmVhbS5hdHRyaWJ1dGVzKCksIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Np
b24pOwotICAgIGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAg
ICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAg
IG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAg
cHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5l
d0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0j
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
SHRtbEVsZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2Vu
ZGlmCi0KLSAgICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxl
bWVudCgpCi17Ci0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBu
ID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAg
IGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2Vk
ICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgewotICAg
ICAgICBpZiAoIW1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3BD
dXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVt
ZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQu
Ci0gICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVu
J3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAg
cG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVs
ZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYg
KCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBkb24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0
YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0
KTsKLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotCi0gICAgYm9vbCBzdWNjZXNzZnVs
bHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBv
c2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwot
ICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAg
ICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxl
bWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkKLSAgICAgICAgICAgIGRvY3Vt
ZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0jZW5kaWYKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhl
Y3V0ZWQoKSkKLSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVy
bCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxl
bWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAgICAgICAgbV9wZW5kaW5nU2Ny
aXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Ci0gICAgICAgICAgICBtX3Njcmlw
dEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGll
bnQodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYg
c2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCi0g
ICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFy
c2luZygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7
Ci0gICAgfQotICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwotICAgIHBvcEN1cnJlbnRO
b2RlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycygpCi17
Ci0gICAgaWYgKCFtX2xlYWZUZXh0Tm9kZSkKLSAgICAgICAgZW50ZXJUZXh0KCk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEobV9zdHJl
YW0udGV4dCgpLCBlYyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vz
c2luZ0luc3RydWN0aW9uKCkKLXsKLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRs
ZSBleGNlcHRpb25zCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3Np
bmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oCi0gICAgICAgIG1fc3RyZWFtLnByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldCgpLAotICAg
ICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKCksIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGktPnNldENyZWF0ZWRC
eVBhcnNlcih0cnVlKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKHBpLmdl
dCgpKTsKLSAgICBpZiAobV92aWV3ICYmICFwaS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcGktPmF0
dGFjaCgpOwotCi0gICAgcGktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKHBp
LT5pc0NTUygpKQotICAgICAgICBtX3Nhd0NTUyA9IHRydWU7Ci0jaWYgRU5BQkxFKFhTTFQpCi0g
ICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7
Ci0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtICYmICFkb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudCgpKQotICAgICAgICBzdG9wUGFyc2luZygpOwotI2VuZGlmCi19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAg
ICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9j
dW1lbnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFk
ZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFj
aGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUNvbW1lbnQoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8
Q29tbWVudD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX3N0cmVhbS50
ZXh0KCkpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQo
KSk7Ci0gICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKLSAgICAgICAgbmV3
Tm9kZS0+YXR0YWNoKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50
KCkKLXsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9
IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9zdHJlYW0uaGFzRXJyb3IoKTsKLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQotewotICAgIFFTdHJpbmdSZWYgbmFtZSA9IG1fc3Ry
ZWFtLmR0ZE5hbWUoKTsKLSAgICBRU3RyaW5nUmVmIHB1YmxpY0lkID0gbV9zdHJlYW0uZHRkUHVi
bGljSWQoKTsKLSAgICBRU3RyaW5nUmVmIHN5c3RlbUlkID0gbV9zdHJlYW0uZHRkU3lzdGVtSWQo
KTsKLQotICAgIC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwgcHVibGljSWQgPDwgc3lzdGVt
SWQ7Ci0gICAgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRN
TCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpKQotICAgICAgICB8fCAocHVibGlj
SWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKSkK
LSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1M
IDEuMCBGcmFtZXNldC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJp
bmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkKLSAgICAgICAgfHwgKHB1Ymxp
Y0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAy
LjAvL0VOIikpCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0Mv
L0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSNpZiAh
RU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCi0jZW5kaWYKLSAgICAgICAp
Ci0gICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVw
bGFjZSBlbnRpdGllcyBvciBub3QuCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgZWxzZSBpZiAo
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMS8vRU4iKSkKLSAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewotICAgICAgICBpZiAo
QXRvbWljU3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewot
ICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRp
b24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUg
dHlwZSBpcyBjb3JyZWN0IHdpdGggdGhpcyBtZXRob2QKLSAgICAgICAgICAgIHNldElzWEhUTUxN
UERvY3VtZW50KHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJc1hIVE1MRG9j
dW1lbnQodHJ1ZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkK
LSAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGE0NzNlZDIzMDgyZjM3ZDM5M2E4ZDExZjFhZGExNWVjYzNjMzcyNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1l
bnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKLQotWE1MRG9j
dW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9h
ZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAs
IG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3IpCi0gICAgLCBtX29sZFN0cnVj
dHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQotICAgICwgbV9vbGRFcnJvckNvbnRl
eHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKLSNlbmRpZgotewotICAgIGN1cnJlbnRDYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwotfQotCi0jaWYgRU5BQkxFKFhT
TFQpCi1YTUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVu
YyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJv
ckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4dCkKLSAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICwgbV9vbGRHZW5lcmljRXJyb3JG
dW5jKHhtbEdlbmVyaWNFcnJvcikKLSAgICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxT
dHJ1Y3R1cmVkRXJyb3IpCi0gICAgLCBtX29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JD
b250ZXh0KQotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291
cmNlTG9hZGVyOwotICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQotICAgICAgICB4bWxTZXRHZW5l
cmljRXJyb3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgaWYgKHN0
cnVjdHVyZWRFcnJvckZ1bmMpCi0gICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJy
b3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKLX0KLSNlbmRpZgotCi1YTUxEb2N1bWVu
dFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgpCi17Ci0gICAgY3VycmVudENh
Y2hlZFJlc291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBt
X29sZEdlbmVyaWNFcnJvckZ1bmMpOwotICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9v
bGRFcnJvckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyk7Ci0jZW5kaWYKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDA0M2I0OGIxMWVjNWI4ODM2MGFlM2UxNzliNWQxZWUx
MmRmZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAotI2RlZmluZSBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgRU5B
QkxFKFhTTFQpCi0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSAgICBj
bGFzcyBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoWE1MRG9jdW1lbnRQYXJzZXJTY29wZSk7Ci0gICAgcHVibGljOgotICAgICAgICBYTUxEb2N1
bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
cik7Ci0gICAgICAgIH5YTUxEb2N1bWVudFBhcnNlclNjb3BlKCk7Ci0KLSAgICAgICAgc3RhdGlj
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSNp
ZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHhtbEdlbmVyaWNFcnJvckZ1bmMgZ2Vu
ZXJpY0Vycm9yRnVuYywgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzdHJ1Y3R1cmVkRXJyb3JGdW5j
ID0gMCwgdm9pZCogZXJyb3JDb250ZXh0ID0gMCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyOwot
Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvckZ1bmMgbV9vbGRHZW5l
cmljRXJyb3JGdW5jOwotICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIG1fb2xkU3RydWN0
dXJlZEVycm9yRnVuYzsKLSAgICAgICAgdm9pZCogbV9vbGRFcnJvckNvbnRleHQ7Ci0jZW5kaWYK
LSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYz
Njk2MzdiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
WE1MRG9jdW1lbnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgorI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKKyNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxl
bWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmVl
RGVwdGhMaW1pdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworY29uc3QgaW50IG1heEVycm9ycyA9IDI1OworCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpwdXNoQ3VycmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKK3sKKyAgICBBU1NFUlQobik7Cisg
ICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOworICAgIGlmIChuICE9IGRvY3VtZW50KCkpCisgICAg
ICAgIG4tPnJlZigpOworICAgIG1fY3VycmVudE5vZGVTdGFjay5hcHBlbmQobV9jdXJyZW50Tm9k
ZSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG47CisgICAgaWYgKG1fY3VycmVudE5vZGVTdGFjay5z
aXplKCkgPiBtYXhET01UcmVlRGVwdGgpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRXhj
ZXNzaXZlIG5vZGUgbmVzdGluZy4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30K
Kwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUoKQoreworICAgIGlmICgh
bV9jdXJyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
U3RhY2suc2l6ZSgpKTsKKworICAgIGlmIChtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCisg
ICAgICAgIG1fY3VycmVudE5vZGUtPmRlcmVmKCk7CisKKyAgICBtX2N1cnJlbnROb2RlID0gbV9j
dXJyZW50Tm9kZVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnROb2RlU3RhY2sucmVtb3ZlTGFz
dCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjbGVhckN1cnJlbnROb2RlU3RhY2so
KQoreworICAgIGlmIChtX2N1cnJlbnROb2RlICYmIG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQo
KSkKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKKyAgICBtX2N1cnJlbnROb2RlID0g
MDsKKyAgICBtX2xlYWZUZXh0Tm9kZSA9IDA7CisKKyAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNr
LnNpemUoKSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBt
X2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAtLWkpCisgICAgICAgICAgICBt
X2N1cnJlbnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2Rl
U3RhY2tbMF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IGRvY3VtZW50KCkpCisgICAgICAg
ICAgICBtX2N1cnJlbnROb2RlU3RhY2tbMF0tPmRlcmVmKCk7CisgICAgICAgIG1fY3VycmVudE5v
ZGVTdGFjay5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5z
ZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHMpCit7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gcy50b1N0cmluZygpOworCisgICAg
aWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9v
cmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmluZzsKKworICAgIGlmIChpc1N0
b3BwZWQoKSB8fCBtX3Nhd1hTTFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQocyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb1dyaXRlKHMudG9TdHJpbmcoKSk7CisKKyAgICAv
LyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBl
dmVudHMuCisgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMo
KTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIG0sIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQorewor
ICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKSkpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0aW9u
MSBwb3NpdGlvbikKK3sKKyAgICBpZiAodHlwZSA9PSBmYXRhbCB8fCAobV9lcnJvckNvdW50IDwg
bWF4RXJyb3JzICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9saW5lICE9IHBvc2l0aW9uLm1fbGlu
ZSAmJiBtX2xhc3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9IHBvc2l0aW9uLm1fY29sdW1uKSkg
eworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ugd2FybmluZzoKKyAg
ICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gIndhcm5pbmcgb24gbGluZSAiICsgU3Ry
aW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4g
IiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjog
IiArIG07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZhdGFsOgor
ICAgICAgICAgICAgY2FzZSBub25GYXRhbDoKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZXMgKz0gImVycm9yIG9uIGxpbmUgIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fbGluZS5v
bmVCYXNlZEludCgpKSArICIgYXQgY29sdW1uICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5t
X2NvbHVtbi5vbmVCYXNlZEludCgpKSArICI6ICIgKyBtOworICAgICAgICB9CisKKyAgICAgICAg
bV9sYXN0RXJyb3JQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICArK21fZXJyb3JDb3VudDsK
KyAgICB9CisKKyAgICBpZiAodHlwZSAhPSB3YXJuaW5nKQorICAgICAgICBtX3Nhd0Vycm9yID0g
dHJ1ZTsKKworICAgIGlmICh0eXBlID09IGZhdGFsKQorICAgICAgICBzdG9wUGFyc2luZygpOwor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQoKQoreworI2lmICFVU0UoUVhN
TFNUUkVBTSkKKyAgICBBU1NFUlQobV9idWZmZXJlZFRleHQuc2l6ZSgpID09IDApOworI2VuZGlm
CisgICAgQVNTRVJUKCFtX2xlYWZUZXh0Tm9kZSk7CisgICAgbV9sZWFmVGV4dE5vZGUgPSBUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgIiIpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG1fbGVhZlRleHROb2RlLmdldCgpKTsKK30KKworI2lmICFVU0UoUVhNTFNUUkVBTSkKK3N0
YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90
IHNpemUpIAoreyAKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsgCit9CisjZW5kaWYKKworCit2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpleGl0VGV4dCgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fbGVhZlRleHROb2RlKQorICAgICAgICByZXR1cm47CisK
KyNpZiAhVVNFKFFYTUxTVFJFQU0pCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbV9s
ZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEodG9TdHJpbmcobV9idWZmZXJlZFRleHQuZGF0YSgpLCBt
X2J1ZmZlcmVkVGV4dC5zaXplKCkpLCBlYyk7CisgICAgVmVjdG9yPHhtbENoYXI+IGVtcHR5Owor
ICAgIG1fYnVmZmVyZWRUZXh0LnN3YXAoZW1wdHkpOworI2VuZGlmCisKKyAgICBpZiAobV92aWV3
ICYmICFtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbV9sZWFmVGV4dE5vZGUt
PmF0dGFjaCgpOworCisgICAgbV9sZWFmVGV4dE5vZGUgPSAwOworfQorCit2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpkZXRhY2goKQoreworICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOworICAg
IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OmVuZCgpCit7CisgICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyIHdpbGwg
ZG8gYmFkIHRoaW5ncyB0byB0aGUgZG9jdW1lbnQgaWYgZG9FbmQoKSBpcyBjYWxsZWQuCisgICAg
Ly8gSSBkb24ndCBiZWxpZXZlIFhNTERvY3VtZW50UGFyc2VyUXQgbmVlZHMgZG9FbmQgY2FsbGVk
IGluIHRoZSBmcmFnbWVudCBjYXNlLgorICAgIEFTU0VSVCghbV9wYXJzaW5nRnJhZ21lbnQpOwor
CisgICAgZG9FbmQoKTsKKworICAgIC8vIGRvRW5kKCkgY291bGQgcHJvY2VzcyBhIHNjcmlwdCB0
YWcsIHRodXMgcGF1c2luZyBwYXJzaW5nLgorICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fc2F3RXJyb3IpCisgICAgICAgIGluc2VydEVycm9yTWVz
c2FnZUJsb2NrKCk7CisgICAgZWxzZSB7CisgICAgICAgIGV4aXRUZXh0KCk7CisgICAgICAgIGRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwor
ICAgIH0KKworICAgIGlmIChpc1BhcnNpbmcoKSkKKyAgICAgICAgcHJlcGFyZVRvU3RvcFBhcnNp
bmcoKTsKKyAgICBkb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERvY3VtZW50OjpJbnRlcmFjdGl2
ZSk7CisgICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNo
ZWRQYXJzaW5nKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCit7Cisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fcGFyc2VyU3RvcHBlZCkgaGVyZSwgc2lu
Y2UgaXQgZG9lcyBub3QKKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIGFueSBtZXRob2RzIG9u
IERvY3VtZW50UGFyc2VyIG9uY2UgaXQncyBiZWVuIHN0b3BwZWQuCisgICAgLy8gSG93ZXZlciwg
RnJhbWVMb2FkZXI6OnN0b3AgY2FsbHMgRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCB1bmNvbmRpdGlv
bmFsbHkuCisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpCisgICAgICAgIG1fZmluaXNoQ2FsbGVk
ID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50
UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQoreworICAgIHJldHVybiBtX2ZpbmlzaENhbGxlZDsK
K30KKworc3RhdGljIGlubGluZSBSZWZQdHI8RWxlbWVudD4gY3JlYXRlWEhUTUxQYXJzZXJFcnJv
ckhlYWRlcihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZXMpCit7Cisg
ICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInBhcnNlcmVycm9yIiwgeGh0bWxOYW1lc3BhY2VVUkkpLCBm
YWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImRpc3Bs
YXk6IGJsb2NrOyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJweCBzb2xpZCAjYzc3OyBwYWRk
aW5nOiAwIDFlbSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91bmQtY29sb3I6ICNmZGQ7IGNv
bG9yOiBibGFjayIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7CisgICAgcmVwb3J0
RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKKyAgICBoMy0+YXBwZW5kQ2hpbGQo
ZG9jLT5jcmVhdGVUZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXJy
b3JzOiIpLCBlYyk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZml4ZWQgPSBkb2MtPmNyZWF0ZUVs
ZW1lbnQoZGl2VGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZml4
ZWQuZ2V0KCksIGVjKTsKKyAgICBmaXhlZC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImZvbnQt
ZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIpOworICAgIGZpeGVkLT5hcHBlbmRDaGls
ZChkb2MtPmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpLCBlYyk7CisKKyAgICBoMyA9IGRv
Yy0+Y3JlYXRlRWxlbWVudChoM1RhZywgZmFsc2UpOworICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVu
ZENoaWxkKGgzLmdldCgpLCBlYyk7CisgICAgaDMtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4
dE5vZGUoIkJlbG93IGlzIGEgcmVuZGVyaW5nIG9mIHRoZSBwYWdlIHVwIHRvIHRoZSBmaXJzdCBl
cnJvci4iKSwgZWMpOworCisgICAgcmV0dXJuIHJlcG9ydEVsZW1lbnQ7Cit9CisKK3ZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKCkKK3sKKyNpZiBVU0UoUVhN
TFNUUkVBTSkKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKyNl
bmRpZgorICAgIC8vIE9uZSBvciBtb3JlIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBv
ZiB0aGUgY29kZS4gRGlzcGxheSBhbiBlcnJvciBibG9jayB0byB0aGUgdXNlciBhYm92ZQorICAg
IC8vIHRoZSBub3JtYWwgY29udGVudCAodGhlIERPTSB0cmVlIGlzIGNyZWF0ZWQgbWFudWFsbHkg
YW5kIGluY2x1ZGVzIGxpbmUvY29sIGluZm8gcmVnYXJkaW5nCisgICAgLy8gd2hlcmUgdGhlIGVy
cm9ycyBhcmUgbG9jYXRlZCkKKworICAgIC8vIENyZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMt
PmRvY3VtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3VtZW50RWxlbWVudCA9IGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgeworICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dChodG1sVGFnLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxl
bWVudCwgZWMpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENo
aWxkKGJvZHksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKKyAg
ICB9CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQtPm5hbWVz
cGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpIHsKKyAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywg
ZmFsc2UpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVF
bGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxk
KGJvZHksIGVjKTsKKyAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBl
Yyk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudC5nZXQoKSwgZWMp
OworICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgIH0KKyNlbmRpZgor
ICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJv
ckhlYWRlcihkb2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKKyAgICBkb2N1bWVudEVsZW1lbnQt
Pmluc2VydEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVsZW1lbnQtPmZpcnN0Q2hpbGQo
KSwgZWMpOworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChkb2N1bWVudC0+dHJhbnNmb3JtU291
cmNlRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gZG9j
dW1lbnQtPmNyZWF0ZUVsZW1lbnQocFRhZywgZmFsc2UpOworICAgICAgICBwYXJhZ3JhcGgtPnNl
dEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIik7CisgICAgICAgIHBh
cmFncmFwaC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3Vt
ZW50IHdhcyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRyYW5zZm9ybWF0aW9uLiBU
aGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20gdGhlIHRyYW5zZm9ybWVk
IHJlc3VsdC4iKSwgZWMpOworICAgICAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChwYXJh
Z3JhcGgucmVsZWFzZSgpLCBlYyk7CisgICAgfQorI2VuZGlmCisgICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQoreworICAgIEFTU0VSVF9VTlVT
RUQodW51c2VkUmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1fcGVuZGluZ1NjcmlwdCk7Cisg
ICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDApOworCisgICAgU2Ny
aXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgYm9v
bCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CisgICAg
Ym9vbCB3YXNDYW5jZWxlZCA9IG1fcGVuZGluZ1NjcmlwdC0+d2FzQ2FuY2VsZWQoKTsKKworICAg
IG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fcGVuZGluZ1Njcmlw
dCA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZSA9IG1fc2NyaXB0RWxlbWVudDsKKyAgICBt
X3NjcmlwdEVsZW1lbnQgPSAwOworCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9
IHRvU2NyaXB0RWxlbWVudChlLmdldCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisK
KyAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhpcyBwYXJzZXIsIG1ha2Ugc3VyZSBpdCdz
IGtlcHQgYWxpdmUgZXZlbiBpZiBkZXRhY2hlZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJz
ZXI+IHByb3RlY3QodGhpcyk7CisgICAgCisgICAgaWYgKGVycm9yT2NjdXJyZWQpCisgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIGVsc2UgaWYgKCF3YXND
YW5jZWxlZCkgeworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNv
ZGUpOworICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaExvYWRFdmVudCgpOworICAgIH0K
KworICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICBpZiAoIWlzRGV0YWNoZWQoKSAmJiAh
bV9yZXF1ZXN0aW5nU2NyaXB0KQorICAgICAgICByZXN1bWVQYXJzaW5nKCk7Cit9CisKK2Jvb2wg
WE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BlbmRpbmdTY3JpcHQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNl
UGFyc2luZygpCit7CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhcnNlclBhdXNlZCA9IHRydWU7Cit9CisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGlmICghY2h1bmsubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
aW1wbGVtZW50IHRoZSBIVE1MNSBYTUwgRnJhZ21lbnQgcGFyc2luZyBhbGdvcml0aG06CisgICAg
Ly8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0
aXBhZ2UvdGhlLXhodG1sLXN5bnRheC5odG1sI3htbC1mcmFnbWVudC1wYXJzaW5nLWFsZ29yaXRo
bQorICAgIC8vIEZvciBub3cgd2UgaGF2ZSBhIGhhY2sgZm9yIHNjcmlwdC9zdHlsZSBpbm5lckhU
TUwgc3VwcG9ydDoKKyAgICBpZiAoY29udGV4dEVsZW1lbnQgJiYgKGNvbnRleHRFbGVtZW50LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGNvbnRleHRFbGVtZW50LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpKSB7CisgICAgICAgIGZyYWdtZW50LT5wYXJz
ZXJBZGRDaGlsZChmcmFnbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUoY2h1bmspKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFhNTERvY3VtZW50UGFy
c2VyPiBwYXJzZXIgPSBYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKGZyYWdtZW50LCBjb250ZXh0
RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgYm9vbCB3ZWxsRm9ybWVkID0gcGFy
c2VyLT5hcHBlbmRGcmFnbWVudFNvdXJjZShjaHVuayk7CisgICAgLy8gRG8gbm90IGNhbGwgZmlu
aXNoKCkuICBDdXJyZW50IGZpbmlzaCgpIGFuZCBkb0VuZCgpIGltcGxlbWVudGF0aW9ucyB0b3Vj
aCB0aGUgbWFpbiBEb2N1bWVudC9sb2FkZXIKKyAgICAvLyBhbmQgY2FuIGNhdXNlIGNyYXNoZXMg
aW4gdGhlIGZyYWdtZW50IGNhc2UuCisgICAgcGFyc2VyLT5kZXRhY2goKTsgLy8gQWxsb3dzIH5E
b2N1bWVudFBhcnNlciB0byBhc3NlcnQgaXQgd2FzIGRldGFjaGVkIGJlZm9yZSBkZXN0cnVjdGlv
bi4KKyAgICByZXR1cm4gd2VsbEZvcm1lZDsgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSdzIHdl
bGxGb3JtZWQgaXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2VsbEZvcm1lZCgpLgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjZGQyNWM1NWRjMDM1YjhmMzJhNzQxNzVhNDZkOTg5
ZWViMjc1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBYTUxEb2N1bWVu
dFBhcnNlcl9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKKworI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisj
aWYgVVNFKFFYTUxTVFJFQU0pCisjaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBD
YWNoZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIERvY3VtZW50
RnJhZ21lbnQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZVZp
ZXc7CitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOworY2xhc3MgVGV4dDsKKworI2lmICFVU0UoUVhN
TFNUUkVBTSkKKyAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8
WE1MUGFyc2VyQ29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIs
IHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5k
bGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgICAgIH5YTUxQYXJzZXJDb250ZXh0KCk7Cisg
ICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4bWxQYXJzZXJD
dHh0UHRyIGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7CisgICAg
fTsKKyNlbmRpZgorCisgICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBG
cmFtZVZpZXcqIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gcGVybWlzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlzc2lvbikpOwor
ICAgICAgICB9CisKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7CisKKyAgICAgICAgLy8g
RXhwb3NlZCBmb3IgY2FsbGJhY2tzOgorICAgICAgICBlbnVtIEVycm9yVHlwZSB7IHdhcm5pbmcs
IG5vbkZhdGFsLCBmYXRhbCB9OworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwg
Y29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwor
ICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
VGV4dFBvc2l0aW9uMSk7CisKKyAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlz
WEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9CisgICAgICAgIGJvb2wg
aXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9
CisjZW5kaWYKKworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29u
c3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2Fu
IHdlIHJlbW92ZSBpdD8KKyAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7
IHJldHVybiAhbV9zYXdFcnJvcjsgfQorCisgICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0
aW9uKCkgY29uc3Q7CisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQo
KSBjb25zdDsKKworICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3Qg
U3RyaW5nJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBYTUxEb2N1bWVudFBhcnNlcihEb2N1
bWVudCosIEZyYW1lVmlldyogPSAwKTsKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1l
bnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworCisg
ICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2Vy
dChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGVuZChj
b25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
dG9wUGFyc2luZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgICAgIHZp
cnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigp
IGNvbnN0OworCisgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAgICAg
dm9pZCBlbmQoKTsKKworICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOworICAgICAgICB2b2lk
IHJlc3VtZVBhcnNpbmcoKTsKKworICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNv
bnN0IFN0cmluZyYpOworCisjaWYgVVNFKFFYTUxTVFJFQU0pCitwcml2YXRlOgorICAgICAgICB2
b2lkIHBhcnNlKCk7CisgICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOworICAgICAgICB2b2lk
IHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7Cisg
ICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAgIHZv
aWQgcGFyc2VDb21tZW50KCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyAgICAgICAg
dm9pZCBwYXJzZUR0ZCgpOworICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CisjZWxzZQor
cHVibGljOgorICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCisgICAgICAgIHZv
aWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdU
Rl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5zKGNv
bnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25z
dCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywg
aW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOworICAg
ICAgICB2b2lkIGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lkIGNoYXJhY3RlcnMoY29uc3Qg
eG1sQ2hhciogcywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9u
KGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7CisgICAgICAgIHZv
aWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKKyAgICAgICAgdm9pZCBj
b21tZW50KGNvbnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lkIHN0YXJ0RG9jdW1lbnQoY29u
c3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFs
b25lKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBj
b25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCk7CisgICAg
ICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5n
KCkpOworCisgICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKKyAg
ICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5v
ZGVTdGFjaygpOworCisgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKKwor
ICAgICAgICB2b2lkIGVudGVyVGV4dCgpOworICAgICAgICB2b2lkIGV4aXRUZXh0KCk7CisKKyAg
ICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRvRW5kKCk7
CisKKyAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7CisKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2lu
YWxTb3VyY2VGb3JUcmFuc2Zvcm07CisKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVht
bFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKKyAgICAgICAgYm9vbCBtX3dyb3RlVGV4dDsKKyNlbHNl
CisgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKKyAgICAgICAgUmVmUHRyPFhNTFBh
cnNlckNvbnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+
IG1fcGVuZGluZ0NhbGxiYWNrczsKKyAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1fYnVmZmVyZWRU
ZXh0OworI2VuZGlmCisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5vZGU7CisgICAg
ICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOworCisgICAgICAg
IFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKworICAgICAgICBib29sIG1fc2F3RXJyb3I7
CisgICAgICAgIGJvb2wgbV9zYXdDU1M7CisgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07
CisgICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1hIVE1M
RG9jdW1lbnQ7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBE
b2N1bWVudDsKKyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgor
CisgICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CisgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5n
U2NyaXB0OworICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOworCisgICAgICAgIGludCBtX2Vy
cm9yQ291bnQ7CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKKworICAgICAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKKyAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG1fc2NyaXB0RWxlbWVudDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0
UG9zaXRpb247CisKKyAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKworICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKKyAg
ICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VNYXA7CisgICAg
ICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CisgICAgICAgIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CisgICAgfTsKKworI2lmIEVOQUJM
RShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKKyNlbmRpZgorCitIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCYg
YXR0cnNPSyk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3Vt
ZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYzOWZiNGVjN2RlZTA3MGE4MzUx
NWFlMGM0ZjQxMGY2YjcyODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC0wLDAgKzEsMTUxOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSA8cG1rQHBvc3QuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgorCisjaW5j
bHVkZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVk
ZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIu
aCIKKyNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNj
cmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNs
dWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIgor
I2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJu
YWxzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFhTTFQp
CisjaW5jbHVkZSAiWE1MVHJlZVZpZXdlci5oIgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgor
I2VuZGlmCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVu
dC5oIgorI2VuZGlmCisKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQZW5kaW5nQ2FsbGJhY2tzKTsKK3B1YmxpYzoKKyAgICB+UGVuZGluZ0NhbGxiYWNrcygpIHsg
fQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdDYWxsYmFja3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soY29uc3QgeG1sQ2hh
ciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIq
IHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywg
aW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBPd25QdHI8UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRQdHIobmV3IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrKTsKKworICAgICAgICBjYWxs
YmFjay0+eG1sTG9jYWxOYW1lID0geG1sU3RyZHVwKHhtbExvY2FsTmFtZSk7CisgICAgICAgIGNh
bGxiYWNrLT54bWxQcmVmaXggPSB4bWxTdHJkdXAoeG1sUHJlZml4KTsKKyAgICAgICAgY2FsbGJh
Y2stPnhtbFVSSSA9IHhtbFN0cmR1cCh4bWxVUkkpOworICAgICAgICBjYWxsYmFjay0+bmJfbmFt
ZXNwYWNlcyA9IG5iX25hbWVzcGFjZXM7CisgICAgICAgIGNhbGxiYWNrLT5uYW1lc3BhY2VzID0g
c3RhdGljX2Nhc3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6ZW9mKHhtbENoYXIqKSAqIG5iX25h
bWVzcGFjZXMgKiAyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNl
cyAqIDIgOyBpKyspCisgICAgICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlc1tpXSA9IHhtbFN0
cmR1cChuYW1lc3BhY2VzW2ldKTsKKyAgICAgICAgY2FsbGJhY2stPm5iX2F0dHJpYnV0ZXMgPSBu
Yl9hdHRyaWJ1dGVzOworICAgICAgICBjYWxsYmFjay0+bmJfZGVmYXVsdGVkID0gbmJfZGVmYXVs
dGVkOworICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHhtbENoYXIq
Kj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9hdHRyaWJ1dGVzICogNSkpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAgICAg
ICAgLy8gRWFjaCBhdHRyaWJ1dGUgaGFzIDUgZWxlbWVudHMgaW4gdGhlIGFycmF5OgorICAgICAg
ICAgICAgLy8gbmFtZSwgcHJlZml4LCB1cmksIHZhbHVlIGFuZCBhbiBlbmQgcG9pbnRlci4KKwor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyBqXSA9IHhtbFN0cmR1cChhdHRyaWJ1dGVzW2kg
KiA1ICsgal0pOworCisgICAgICAgICAgICBpbnQgbGVuID0gYXR0cmlidXRlc1tpICogNSArIDRd
IC0gYXR0cmlidXRlc1tpICogNSArIDNdOworCisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmli
dXRlc1tpICogNSArIDNdID0geG1sU3RybmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgM10sIGxlbik7
CisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICogNSArIDRdID0gY2FsbGJhY2st
PmF0dHJpYnV0ZXNbaSAqIDUgKyAzXSArIGxlbjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2Fs
bGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBw
ZW5kRW5kRWxlbWVudE5TQ2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFja3MuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2spKTsKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQg
bGVuKQorICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2spOworCisgICAg
ICAgIGNhbGxiYWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOworICAgICAgICBjYWxsYmFjay0+
bGVuID0gbGVuOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNl
KCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJh
Y2soY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjaz4gY2FsbGJh
Y2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKTsK
KworICAgICAgICBjYWxsYmFjay0+dGFyZ2V0ID0geG1sU3RyZHVwKHRhcmdldCk7CisgICAgICAg
IGNhbGxiYWNrLT5kYXRhID0geG1sU3RyZHVwKGRhdGEpOworCisgICAgICAgIG1fY2FsbGJhY2tz
LmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ0RB
VEFCbG9ja0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCisgICAgeworICAgICAg
ICBPd25QdHI8UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihu
ZXcgUGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk7CisKKyAgICAgICAgY2FsbGJhY2stPnMgPSB4
bWxTdHJuZHVwKHMsIGxlbik7CisgICAgICAgIGNhbGxiYWNrLT5sZW4gPSBsZW47CisKKyAgICAg
ICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmRDb21tZW50Q2FsbGJhY2soY29uc3QgeG1sQ2hhciogcykKKyAgICB7CisgICAg
ICAgIE93blB0cjxQZW5kaW5nQ29tbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5l
dyBQZW5kaW5nQ29tbWVudENhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0
cmR1cChzKTsKKworICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2soY29uc3Qg
eG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciog
c3lzdGVtSUQpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0ludGVybmFsU3Vic2V0Q2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxi
YWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKKyAgICAg
ICAgY2FsbGJhY2stPmV4dGVybmFsSUQgPSB4bWxTdHJkdXAoZXh0ZXJuYWxJRCk7CisgICAgICAg
IGNhbGxiYWNrLT5zeXN0ZW1JRCA9IHhtbFN0cmR1cChzeXN0ZW1JRCk7CisKKyAgICAgICAgbV9j
YWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRFcnJvckNhbGxiYWNrKFhNTERvY3VtZW50UGFyc2VyOjpFcnJvclR5cGUgdHlwZSwgY29u
c3QgeG1sQ2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCisg
ICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0Vycm9yQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRQdHIobmV3IFBlbmRpbmdFcnJvckNhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bWVz
c2FnZSA9IHhtbFN0cmR1cChtZXNzYWdlKTsKKyAgICAgICAgY2FsbGJhY2stPnR5cGUgPSB0eXBl
OworICAgICAgICBjYWxsYmFjay0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGNh
bGxiYWNrLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisKKyAgICAgICAgbV9jYWxsYmFj
a3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsQW5k
UmVtb3ZlRmlyc3RDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtl
Rmlyc3QoKTsKKyAgICAgICAgY2FsbGJhY2stPmNhbGwocGFyc2VyKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5pc0VtcHR5KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBQZW5kaW5nQ2FsbGJhY2tzKCkgeyB9CisKKyAgICBzdHJ1Y3QgUGVuZGlu
Z0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NhbGxiYWNrKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpID0gMDsKKyAg
ICB9OworCisgICAgc3RydWN0IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrIDogcHVibGlj
IFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdTdGFydEVsZW1lbnRO
U0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJlZSh4bWxMb2NhbE5hbWUp
OworICAgICAgICAgICAgeG1sRnJlZSh4bWxQcmVmaXgpOworICAgICAgICAgICAgeG1sRnJlZSh4
bWxVUkkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9uYW1lc3BhY2VzICog
MjsgaSsrKQorICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZXNwYWNlc1tpXSk7CisgICAgICAg
ICAgICB4bWxGcmVlKG5hbWVzcGFjZXMpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuYl9hdHRyaWJ1dGVzOyBpKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCA0OyBqKyspCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlc1tpICogNSAr
IGpdKTsKKyAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXJ0RWxlbWVudE5zKHhtbExvY2FsTmFtZSwgeG1s
UHJlZml4LCB4bWxVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5i
X25hbWVzcGFjZXMsIGNvbnN0X2Nhc3Q8Y29uc3QgeG1sQ2hhcioqPihuYW1lc3BhY2VzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfYXR0cmlidXRlcywgbmJfZGVm
YXVsdGVkLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4oYXR0cmlidXRlcykpOworICAgICAg
ICB9CisKKyAgICAgICAgeG1sQ2hhciogeG1sTG9jYWxOYW1lOworICAgICAgICB4bWxDaGFyKiB4
bWxQcmVmaXg7CisgICAgICAgIHhtbENoYXIqIHhtbFVSSTsKKyAgICAgICAgaW50IG5iX25hbWVz
cGFjZXM7CisgICAgICAgIHhtbENoYXIqKiBuYW1lc3BhY2VzOworICAgICAgICBpbnQgbmJfYXR0
cmlidXRlczsKKyAgICAgICAgaW50IG5iX2RlZmF1bHRlZDsKKyAgICAgICAgeG1sQ2hhcioqIGF0
dHJpYnV0ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJh
Y2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwo
WE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2Vy
LT5lbmRFbGVtZW50TnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgUGVuZGlu
Z0NoYXJhY3RlcnNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgeG1sRnJlZShzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+
Y2hhcmFjdGVycyhzLCBsZW4pOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAg
ICAgICAgaW50IGxlbjsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25DYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0
dWFsIH5QZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soKQorICAgICAgICB7Cisg
ICAgICAgICAgICB4bWxGcmVlKHRhcmdldCk7CisgICAgICAgICAgICB4bWxGcmVlKGRhdGEpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIq
IHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5wcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24odGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHRhcmdl
dDsKKyAgICAgICAgeG1sQ2hhciogZGF0YTsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdD
REFUQUJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmly
dHVhbCB+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHhtbEZyZWUocyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxE
b2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZXItPmNk
YXRhQmxvY2socywgbGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHM7CisgICAg
ICAgIGludCBsZW47CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nQ29tbWVudENhbGxiYWNr
IDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdDb21t
ZW50Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxGcmVlKHMpOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5jb21tZW50KHMpOworICAgICAgICB9
CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdJbnRl
cm5hbFN1YnNldENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZp
cnR1YWwgflBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgeG1sRnJlZShuYW1lKTsKKyAgICAgICAgICAgIHhtbEZyZWUoZXh0ZXJuYWxJRCk7Cisg
ICAgICAgICAgICB4bWxGcmVlKHN5c3RlbUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBhcnNlci0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQp
OworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogbmFtZTsKKyAgICAgICAgeG1sQ2hhciog
ZXh0ZXJuYWxJRDsKKyAgICAgICAgeG1sQ2hhciogc3lzdGVtSUQ7CisgICAgfTsKKworICAgIHN0
cnVjdCBQZW5kaW5nRXJyb3JDYWxsYmFjazogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAg
ICAgIHZpcnR1YWwgflBlbmRpbmdFcnJvckNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgeG1sRnJlZShtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBj
YWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBh
cnNlci0+aGFuZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSks
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBYTUxEb2N1
bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIHhtbENoYXIqIG1lc3NhZ2U7Cisg
ICAgICAgIGludCBsaW5lTnVtYmVyOworICAgICAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIH07
CisKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiA+IG1fY2FsbGJhY2tzOworfTsK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbnQgZ2xvYmFs
RGVzY3JpcHRvciA9IDA7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBsaWJ4bWxMb2FkZXJUaHJl
YWQgPSAwOworCitzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKK3sKKyAgICAvLyBP
bmx5IG1hdGNoIGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0
aGluIFhNTERvY3VtZW50UGFyc2VyIHRvIGF2b2lkCisgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBj
bGllbnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCisgICAgcmV0dXJuIFhNTERvY3VtZW50UGFy
c2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkg
PT0gbGlieG1sTG9hZGVyVGhyZWFkOworfQorCitjbGFzcyBPZmZzZXRCdWZmZXIgeworcHVibGlj
OgorICAgIE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiks
IG1fY3VycmVudE9mZnNldCgwKSB7IH0KKworICAgIGludCByZWFkT3V0Qnl0ZXMoY2hhciogb3V0
cHV0QnVmZmVyLCB1bnNpZ25lZCBhc2tlZFRvUmVhZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVzTGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVudE9mZnNldDsKKyAgICAgICAg
dW5zaWduZWQgbGVuVG9Db3B5ID0gbWluKGFza2VkVG9SZWFkLCBieXRlc0xlZnQpOworICAgICAg
ICBpZiAobGVuVG9Db3B5KSB7CisgICAgICAgICAgICBtZW1jcHkob3V0cHV0QnVmZmVyLCBtX2J1
ZmZlci5kYXRhKCkgKyBtX2N1cnJlbnRPZmZzZXQsIGxlblRvQ29weSk7CisgICAgICAgICAgICBt
X2N1cnJlbnRPZmZzZXQgKz0gbGVuVG9Db3B5OworICAgICAgICB9CisgICAgICAgIHJldHVybiBs
ZW5Ub0NvcHk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRPZmZzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBzd2l0Y2hU
b1VURjE2KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKK3sKKyAgICAvLyBIYWNrIGFyb3VuZCBsaWJ4
bWwyJ3MgbGFjayBvZiBlbmNvZGluZyBvdmVyaWRlIHN1cHBvcnQgYnkgbWFudWFsbHkKKyAgICAv
LyByZXNldHRpbmcgdGhlIGVuY29kaW5nIHRvIFVURi0xNiBiZWZvcmUgZXZlcnkgY2h1bmsuICBP
dGhlcndpc2UgbGlieG1sCisgICAgLy8gd2lsbCBkZXRlY3QgPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0iPGVuY29kaW5nIG5hbWU+Ij8+IGJsb2NrcworICAgIC8vIGFuZCBzd2l0Y2ggZW5j
b2RpbmdzLCBjYXVzaW5nIHRoZSBwYXJzZSB0byBmYWlsLgorICAgIGNvbnN0IFVDaGFyIEJPTSA9
IDB4RkVGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOworICAgIHhtbFN3aXRjaEVuY29k
aW5nKGN0eHQsIEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxF
IDogWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRSk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFs
bG93RXh0ZXJuYWxMb2FkKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5n
ID0gdXJsLnN0cmluZygpOworCisgICAgLy8gT24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGxpYnht
bCBhc2tzIGZvciB0aGlzIFVSTCwgdGhlCisgICAgLy8gIlhNTF9YTUxfREVGQVVMVF9DQVRBTE9H
Iiwgb24gaW5pdGlhbGl6YXRpb24uCisgICAgaWYgKHVybFN0cmluZyA9PSAiZmlsZTovLy9ldGMv
eG1sL2NhdGFsb2ciKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbiBXaW5kb3dz
LCBsaWJ4bWwgY29tcHV0ZXMgYSBVUkwgcmVsYXRpdmUgdG8gd2hlcmUgaXRzIERMTCByZXNpZGVz
LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTovLy8iLCBmYWxzZSkgJiYgdXJs
U3RyaW5nLmVuZHNXaXRoKCIvZXRjL2NhdGFsb2ciLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBEVEQuICBUaGVyZSBpc24ndCBtdWNoIHBv
aW50IGluIGhhbW1lcmluZyB3d3cudzNjLm9yZworICAgIC8vIGJ5IHJlcXVlc3RpbmcgdGhpcyBV
UkwgZm9yIGV2ZXJ5IFhIVE1MIGRvY3VtZW50LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0
aCgiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFNpbWlsYXJseSwgdGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiByZXF1
ZXN0aW5nIHRoZSBTVkcgRFRELgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDov
L3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHIiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgbGlieG1sIGRvZXNuJ3QgZ2l2ZSB1cyBhIGxvdCBvZiBjb250ZXh0IGZv
ciBkZWNpZGluZyB3aGV0aGVyIHRvCisgICAgLy8gYWxsb3cgdGhpcyByZXF1ZXN0LiAgSW4gdGhl
IHdvcnN0IGNhc2UsIHRoaXMgbG9hZCBjb3VsZCBiZSBmb3IgYW4KKyAgICAvLyBleHRlcm5hbCBl
bnRpdHkgYW5kIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgY291bGQgc2ltcGx5IHJlYWQgdGhlCisg
ICAgLy8gcmV0cmlldmVkIGNvbnRlbnQuICBJZiB3ZSBoYWQgbW9yZSBjb250ZXh0LCB3ZSBjb3Vs
ZCBwb3RlbnRpYWxseSBhbGxvdworICAgIC8vIHRoZSBwYXJzZXIgdG8gbG9hZCBhIERURC4gIEFz
IHRoaW5ncyBzdGFuZCwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlCisgICAgLy8gcm91dGUgYW5k
IGFsbG93IHNhbWUtb3JpZ2luIHJlcXVlc3RzIG9ubHkuCisgICAgaWYgKCFYTUxEb2N1bWVudFBh
cnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAgICBYTUxEb2N1bWVudFBhcnNl
clNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVz
c2FnZSh1cmwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCit7CisgICAg
QVNTRVJUKFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRl
cik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQpOwor
CisgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOworCisgICAgaWYgKCFzaG91bGRBbGxvd0V4dGVy
bmFsTG9hZCh1cmwpKQorICAgICAgICByZXR1cm4gJmdsb2JhbERlc2NyaXB0b3I7CisKKyAgICBS
ZXNvdXJjZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CisKKworICAgIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVu
dENhY2hlZFJlc291cmNlTG9hZGVyOworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNj
b3BlKDApOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUgdGhlIG9yaWdpbmFs
IGdsb2JhbCBlcnJvciBoYW5kbGVyIGFzIHdlbGwuCisKKyAgICAgICAgaWYgKGNhY2hlZFJlc291
cmNlTG9hZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZy
YW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9y
ZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CisKKyAgICAvLyBX
ZSBoYXZlIHRvIGNoZWNrIHRoZSBVUkwgYWdhaW4gYWZ0ZXIgdGhlIGxvYWQgdG8gY2F0Y2ggcmVk
aXJlY3RzLgorICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTYzPi4KKyAgICBpZiAoIXNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKHJlc3BvbnNlLnVy
bCgpKSkKKyAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOworCisgICAgcmV0dXJuIG5l
dyBPZmZzZXRCdWZmZXIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZEZ1bmModm9pZCogY29u
dGV4dCwgY2hhciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIC8vIERvIDAtYnl0ZSByZWFkcyBp
biBjYXNlIG9mIGEgbnVsbCBkZXNjcmlwdG9yCisgICAgaWYgKGNvbnRleHQgPT0gJmdsb2JhbERl
c2NyaXB0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgT2Zmc2V0QnVmZmVyKiBkYXRhID0g
c3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7CisgICAgcmV0dXJuIGRhdGEtPnJl
YWRPdXRCeXRlcyhidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQq
LCBjb25zdCBjaGFyKiwgaW50KQoreworICAgIC8vIEFsd2F5cyBqdXN0IGRvIDAtYnl0ZSB3cml0
ZXMKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZUZ1bmModm9pZCogY29udGV4
dCkKK3sKKyAgICBpZiAoY29udGV4dCAhPSAmZ2xvYmFsRGVzY3JpcHRvcikgeworICAgICAgICBP
ZmZzZXRCdWZmZXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxPZmZzZXRCdWZmZXIqPihjb250ZXh0KTsK
KyAgICAgICAgZGVsZXRlIGRhdGE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWYgRU5B
QkxFKFhTTFQpCitzdGF0aWMgdm9pZCBlcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4p
Cit7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlzcGxheSBlcnJvciBtZXNz
YWdlcyBzb21ld2hlcmUuCit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgZGlkSW5pdCA9IGZhbHNl
OworCitQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0
ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAg
ICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5j
LCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1
bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExvYWRl
clRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7CisgICAg
fQorCisgICAgeG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4
dChoYW5kbGVycywgMCwgMCwgMCwgMCk7CisgICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRh
OworICAgIHBhcnNlci0+cmVwbGFjZUVudGl0aWVzID0gdHJ1ZTsKKyAgICBzd2l0Y2hUb1VURjE2
KHBhcnNlcik7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFy
c2VyKSk7Cit9CisKKworLy8gQ2h1bmsgc2hvdWxkIGJlIGVuY29kZWQgaW4gVVRGLTgKK1Bhc3NS
ZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFy
c2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3Ry
aW5nJiBjaHVuaykKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNl
cigpOworICAgICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1
bmMsIHJlYWRGdW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxi
YWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAg
IGxpYnhtbExvYWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9
IHRydWU7CisgICAgfQorCisgICAgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSBjaGVja3MgdGhh
dCB0aGUgbGVuZ3RoIGRvZXNuJ3Qgb3ZlcmZsb3cgYW4gaW50LgorICAgIHhtbFBhcnNlckN0eHRQ
dHIgcGFyc2VyID0geG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dChjaHVuay5kYXRhKCksIGNodW5r
Lmxlbmd0aCgpKTsKKworICAgIGlmICghcGFyc2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IC8vIENvcHkgdGhlIHNheCBoYW5kbGVyCisgICAgbWVtY3B5KHBhcnNlci0+c2F4LCBoYW5kbGVy
cywgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKworICAgIC8vIFNldCBwYXJzZXIgb3B0aW9ucy4K
KyAgICAvLyBYTUxfUEFSU0VfTk9ESUNUOiBkZWZhdWx0IGRpY3Rpb25hcnkgb3B0aW9uLgorICAg
IC8vIFhNTF9QQVJTRV9OT0VOVDogZm9yY2UgZW50aXRpZXMgc3Vic3RpdHV0aW9ucy4KKyAgICB4
bWxDdHh0VXNlT3B0aW9ucyhwYXJzZXIsIFhNTF9QQVJTRV9OT0RJQ1QgfCBYTUxfUEFSU0VfTk9F
TlQpOworCisgICAgLy8gSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24KKyAgICBwYXJzZXItPnNheDIg
PSAxOworICAgIHBhcnNlci0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsgLy8gV2UgYXJl
IHBhcnNpbmcgYSBDT05URU5UCisgICAgcGFyc2VyLT5kZXB0aCA9IDA7CisgICAgcGFyc2VyLT5z
dHJfeG1sID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIEJBRF9DQVNUICJ4bWwiLCAzKTsK
KyAgICBwYXJzZXItPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURf
Q0FTVCAieG1sbnMiLCA1KTsKKyAgICBwYXJzZXItPnN0cl94bWxfbnMgPSB4bWxEaWN0TG9va3Vw
KHBhcnNlci0+ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsKKyAgICBwYXJzZXItPl9wcml2
YXRlID0gdXNlckRhdGE7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRl
eHQocGFyc2VyKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcm
IHZlcnNpb24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3Vt
ZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmll
dyogZnJhbWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQor
ICAgICwgbV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV9wZW5k
aW5nQ2FsbGJhY2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgpKQorICAgICwgbV9jdXJyZW50
Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhm
YWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVs
ZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFs
c2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxl
ZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlv
bihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1Nj
cmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworfQorCitY
TUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZy
YWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV92aWV3KDApCisgICAgLCBtX2NvbnRleHQoMCkK
KyAgICAsIG1fcGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKKyAg
ICAsIG1fY3VycmVudE5vZGUoZnJhZ21lbnQpCisgICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQorICAg
ICwgbV9zYXdDU1MoZmFsc2UpCisgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKKyAgICAs
IG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQorICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2Up
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQor
ICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcGFy
c2VyUGF1c2VkKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQorICAgICwg
bV9maW5pc2hDYWxsZWQoZmFsc2UpCisgICAgLCBtX2Vycm9yQ291bnQoMCkKKyAgICAsIG1fbGFz
dEVycm9yUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAg
LCBtX3BlbmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRy
dWUpCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKK3sK
KyAgICBmcmFnbWVudC0+cmVmKCk7CisKKyAgICAvLyBBZGQgbmFtZXNwYWNlcyBiYXNlZCBvbiB0
aGUgcGFyZW50IG5vZGUKKyAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1TdGFjazsKKyAgICB3aGls
ZSAocGFyZW50RWxlbWVudCkgeworICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1l
bnQpOworCisgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRO
b2RlKCk7CisgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bik7CisgICAgfQorCisgICAgaWYgKGVsZW1TdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVt
U3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChO
YW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0geG1sbnNBdG9tKQorICAgICAg
ICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9wcmVmaXhUb05hbWVzcGFjZU1hcC5zZXQoYXR0ci0+bG9jYWxOYW1l
KCksIGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVy
ZSBtYXkgYmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdz
IG5hbWVzcGFjZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFw
YXJlbnRFbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVS
SSA9IHBhcmVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxQYXJzZXJDb250ZXh0
Ojp+WE1MUGFyc2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29udGV4dC0+bXlEb2MpCisgICAg
ICAgIHhtbEZyZWVEb2MobV9jb250ZXh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQo
bV9jb250ZXh0KTsKK30KKworWE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1bWVudFBhcnNlcigp
Cit7CisgICAgLy8gVGhlIFhNTERvY3VtZW50UGFyc2VyIHdpbGwgYWx3YXlzIGJlIGRldGFjaGVk
IGJlZm9yZSBiZWluZyBkZXN0cm95ZWQuCisgICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CisKKyAgICAvLyBGSVhNRTog
bV9wZW5kaW5nU2NyaXB0IGhhbmRsaW5nIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFhNTERvY3VtZW50
UGFyc2VyLmNwcCEKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdT
Y3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNEZXRh
Y2hlZCgpKTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgaW5pdGlhbGl6ZVBhcnNlckNv
bnRleHQoKTsKKworICAgIC8vIFByb3RlY3QgdGhlIGxpYnhtbCBjb250ZXh0IGZyb20gZGVsZXRp
b24gZHVyaW5nIGEgY2FsbGJhY2sKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY29udGV4
dCA9IG1fY29udGV4dDsKKworICAgIC8vIGxpYlhNTCB0aHJvd3MgYW4gZXJyb3IgaWYgeW91IHRy
eSB0byBzd2l0Y2ggdGhlIGVuY29kaW5nIGZvciBhbiBlbXB0eSBzdHJpbmcuCisgICAgaWYgKHBh
cnNlU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGNhdXNlIHRo
ZSBwYXJzZXIgdG8gZGV0YWNoIGR1cmluZyB4bWxQYXJzZUNodW5rCisgICAgICAgIC8vIGtlZXAg
dGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxY
TUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBzd2l0Y2hUb1VURjE2
KGNvbnRleHQtPmNvbnRleHQoKSk7CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2Nv
cGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgICAgIHhtbFBhcnNl
Q2h1bmsoY29udGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihw
YXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIpICogcGFyc2VTdHJpbmcubGVu
Z3RoKCksIDApOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgKHdoaWNoIG1heSBiZSBydW4gdW5k
ZXIgdGhlIHhtbFBhcnNlQ2h1bmsgY2FsbHN0YWNrKSBtYXkKKyAgICAgICAgLy8gY2F1c2UgdGhl
IHBhcnNlciB0byBiZSBzdG9wcGVkIG9yIGRldGFjaGVkLgorICAgICAgICBpZiAoaXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBpcyB0
aGlzIGhlcmU/ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nlc3MgdGhlIHBhc3NlZCBzb3Vy
Y2U/CisgICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVy
KCktPnNhd0Vycm9yKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9y
LCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCisgICAgICAgIGhhbmRsZUVycm9y
KGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5saW5l
LCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzdHJpbmcpLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgeG1sQ2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5l
IEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcsIHNpemVf
dCBzaXplKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIEF0
b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcpCit7CisgICAg
cmV0dXJuIEF0b21pY1N0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oc3RyaW5nKSk7Cit9CisKK3N0cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB7CisgICAgY29uc3Qg
eG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKK307Cit0eXBlZGVmIHN0
cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB4bWxTQVgyTmFtZXNwYWNlOworCitzdGF0aWMgaW5saW5l
IHZvaWQgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMoRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3Qg
eG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1lc3BhY2VzLCBFeGNlcHRpb25D
b2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24p
Cit7CisgICAgeG1sU0FYMk5hbWVzcGFjZSogbmFtZXNwYWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
eG1sU0FYMk5hbWVzcGFjZSo+KGxpYnhtbE5hbWVzcGFjZXMpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbmJfbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3Bh
Y2VRTmFtZSA9IHhtbG5zQXRvbTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IHRvQXRvbWljU3RyaW5nKG5hbWVzcGFjZXNbaV0udXJpKTsKKyAgICAgICAgaWYgKG5hbWVzcGFj
ZXNbaV0ucHJlZml4KQorICAgICAgICAgICAgbmFtZXNwYWNlUU5hbWUgPSAieG1sbnM6IiArIHRv
U3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0
cmlidXRlTlMoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5hbWVzcGFjZVFOYW1lLCBu
YW1lc3BhY2VVUkksIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAv
LyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHsKKyAgICBjb25zdCB4bWxDaGFyKiBs
b2NhbG5hbWU7CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIq
IHVyaTsKKyAgICBjb25zdCB4bWxDaGFyKiB2YWx1ZTsKKyAgICBjb25zdCB4bWxDaGFyKiBlbmQ7
Cit9OwordHlwZWRlZiBzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHhtbFNBWDJBdHRyaWJ1dGVz
OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCog
bmV3RWxlbWVudCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMsIGludCBuYl9hdHRy
aWJ1dGVzLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMg
PSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKKyAgICAgICAg
aW50IHZhbHVlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0
dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICBBdG9taWNTdHJpbmcgYXR0clZhbHVlID0gdG9B
dG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOworICAgICAgICBT
dHJpbmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIGF0dHJVUkkgPSBhdHRyUHJlZml4LmlzRW1wdHkoKSA/IEF0b21pY1N0
cmluZygpIDogdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS51cmkpOworICAgICAgICBBdG9t
aWNTdHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyB0b0F0b21pY1N0cmlu
ZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSkgOiBhdHRyUHJlZml4ICsgIjoiICsgdG9TdHJpbmco
YXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJp
YnV0ZU5TKGF0dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYywgc2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
c3RhcnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFy
KiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcioqIGxpYnhtbE5h
bWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4bWxD
aGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdD
YWxsYmFja3MtPmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soeG1sTG9jYWxOYW1lLCB4bWxQ
cmVmaXgsIHhtbFVSSSwgbmJfbmFtZXNwYWNlcywgbGlieG1sTmFtZXNwYWNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJp
YnV0ZXMsIG5iX2RlZmF1bHRlZCwgbGlieG1sQXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQ
RSBEZWNsYXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cworICAgIGlmICghbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgewor
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBs
aW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgZXhpdFRleHQoKTsKKworICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSB0
b0F0b21pY1N0cmluZyh4bWxMb2NhbE5hbWUpOworICAgIEF0b21pY1N0cmluZyB1cmkgPSB0b0F0
b21pY1N0cmluZyh4bWxVUkkpOworICAgIEF0b21pY1N0cmluZyBwcmVmaXggPSB0b0F0b21pY1N0
cmluZyh4bWxQcmVmaXgpOworCisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051
bGwoKSkgeworICAgICAgICBpZiAoIXByZWZpeC5pc051bGwoKSkKKyAgICAgICAgICAgIHVyaSA9
IG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuZ2V0KHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICB9CisKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50
KCkpIHsKKyAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcuMSBvZiBPTUEtV0FQLVhIVE1M
TVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0
aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCisgICAgICAgIC8vIGVuc3Vy
ZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdo
dG1sJworICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwor
ICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkg
eworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVj
dHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1cmkuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6
eGh0bWxOYW1lc3BhY2VVUkk7CisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VV
Ukk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQg
PSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisg
ICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBSZWZQ
dHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUs
IHRydWUpOworICAgIGlmICghbmV3RWxlbWVudCkgeworICAgICAgICBzdG9wUGFyc2luZygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sTmFtZXNwYWNl
cywgbmJfbmFtZXNwYWNlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgpLCBsaWJ4bWxBdHRyaWJ1
dGVzLCBuYl9hdHRyaWJ1dGVzLCBlYywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG5ld0VsZW1lbnQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTY3JpcHRFbGVt
ZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwor
ICAgIGlmIChzY3JpcHRFbGVtZW50KQorICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSB0
ZXh0UG9zaXRpb25PbmVCYXNlZCgpOworCisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hp
bGQobmV3RWxlbWVudC5nZXQoKSk7CisKKyAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5n
ZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRh
ZykpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KG5ld0VsZW1lbnQuZ2V0
KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisjZW5kaWYKKworICAgIGlmICghbV9wYXJzaW5nRnJh
Z21lbnQgJiYgaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCit7
CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJz
ZXJQYXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFbmRFbGVtZW50
TlNDYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSmF2YVNjcmlw
dCBjYW4gZGV0YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhpcyBpcyBub3QgcmVsZWFzZWQK
KyAgICAvLyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8WE1MRG9j
dW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IG4gPSBtX2N1cnJlbnROb2RlOworICAgIG4tPmZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpOworCisgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQgJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSkpKSB7CisgICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG4tPnJlbW92ZShl
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUo
KSB8fCAhbV92aWV3KSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4uZ2V0KCkpOworCisgICAgLy8gVGhlIGVsZW1lbnQncyBwYXJlbnQgbWF5IGhhdmUgYWxyZWFk
eSBiZWVuIHJlbW92ZWQgZnJvbSBkb2N1bWVudC4KKyAgICAvLyBQYXJzaW5nIGNvbnRpbnVlcyBp
biB0aGlzIGNhc2UsIGJ1dCBzY3JpcHRzIGFyZW4ndCBleGVjdXRlZC4KKyAgICBpZiAoIWVsZW1l
bnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2Ny
aXB0RWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQpIHsKKyAgICAgICAg
cG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0
IGxvYWQgZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cp
LgorICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQg
PSB0cnVlOworCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQt
PnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxv
d0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFy
ZWQpIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5p
c1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBl
QXR0cmlidXRlKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQodHJ1ZSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhN
RTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgLy8g
dGhlIGxpYnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKKyAg
ICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJl
UGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0
RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBl
bGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisK
KyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBh
bHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBp
ZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICAgICAg
Ly8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCisgICAgICAgIGlmIChp
c0RldGFjaGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVxdWVzdGlu
Z1NjcmlwdCA9IGZhbHNlOworICAgIHBvcEN1cnJlbnROb2RlKCk7Cit9CisKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAg
ICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBh
dXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENoYXJhY3RlcnNDYWxs
YmFjayhzLCBsZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xlYWZU
ZXh0Tm9kZSkKKyAgICAgICAgZW50ZXJUZXh0KCk7CisgICAgbV9idWZmZXJlZFRleHQuYXBwZW5k
KHMsIGxlbik7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKEVycm9yVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgaWYgKGlzU3Rv
cHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxF
UihSVkNUKSB8fCBDT01QSUxFUihNSU5HVykKKyAgICBjaGFyIG1bMTAyNF07CisgICAgdnNucHJp
bnRmKG0sIHNpemVvZihtKSAtIDEsIG1lc3NhZ2UsIGFyZ3MpOworI2Vsc2UKKyAgICBjaGFyKiBt
OworICAgIGlmICh2YXNwcmludGYoJm0sIG1lc3NhZ2UsIGFyZ3MpID09IC0xKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgbV9wZW5k
aW5nQ2FsbGJhY2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgeG1sQ2hhcio+KG0pLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICBl
bHNlCisgICAgICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVt
YmVyKCkpOworCisjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhQ09N
UElMRVIoTUlOR1cpCisgICAgZnJlZShtKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25z
dCB4bWxDaGFyKiBkYXRhKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNr
cy0+YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2sodGFyZ2V0LCBkYXRhKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICAvLyAjIyMgaGFu
ZGxlIGV4Y2VwdGlvbnMKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uPiBwaSA9IGRvY3VtZW50KCktPmNyZWF0ZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbigKKyAgICAgICAgdG9TdHJpbmcodGFyZ2V0KSwgdG9TdHJpbmcoZGF0YSksIGVjKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5zZXRDcmVhdGVkQnlQYXJz
ZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChwaS5nZXQoKSk7
CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAgIHBpLT5hdHRhY2go
KTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlmIChwaS0+aXND
U1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShYU0xUKQorICAgIG1f
c2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOworICAg
IGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7Cisg
ICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQ
YXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDREFUQUJsb2NrQ2Fs
bGJhY2socywgbGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7
CisKKyAgICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVh
dGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAgbV9jdXJyZW50Tm9kZS0+cGFy
c2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+
YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbW1lbnQoY29uc3QgeG1sQ2hhciogcykKK3sKKyAgICBpZiAoaXNTdG9w
cGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAg
ICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENvbW1lbnRDYWxsYmFjayhzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29tbWVu
dD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7Cisg
ICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYg
KG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNo
KCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgeG1s
Q2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKQor
eworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKHZlcnNpb24pCisgICAgICAg
IGRvY3VtZW50KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVyc2lvbiksIGVjKTsKKyAgICBk
b2N1bWVudCgpLT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUgPT0gMSwgZWMpOyAvLyBwb3Nz
aWJsZSB2YWx1ZXMgYXJlIDAsIDEsIGFuZCAtMQorICAgIGlmIChlbmNvZGluZykKKyAgICAgICAg
ZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcodG9TdHJpbmcoZW5jb2RpbmcpKTsKK30KKwordm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7Cisj
aWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsK
KyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25z
dCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFy
KiBzeXN0ZW1JRCkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFw
cGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2sobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50KCkpIHsKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7
CisgICAgICAgIFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CisgICAgICAgIGlmIChl
eHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIKKyAgICAgICAg
ICAgIHx8IGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikg
eworICAgICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFt
ZSgpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZ
UEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51
bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAg
ICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0
b1N0cmluZyhzeXN0ZW1JRCkpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgWE1MRG9jdW1l
bnRQYXJzZXIqIGdldFBhcnNlcih2b2lkKiBjbG9zdXJlKQoreworICAgIHhtbFBhcnNlckN0eHRQ
dHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxYTUxEb2N1bWVudFBhcnNlcio+KGN0eHQtPl9wcml2YXRlKTsKK30K
KworLy8gVGhpcyBpcyBhIGhhY2sgYXJvdW5kIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTIxOQorLy8gT3RoZXJ3aXNlIGxpYnhtbCBzZWVtcyB0byBjYWxsIGFs
bCB0aGUgU0FYIGNhbGxiYWNrcyB0d2ljZSBmb3IgYW55IHJlcGxhY2VkIGVudGl0eS4KK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKHZvaWQqIGNsb3N1cmUpCit7
CisjaWYgTElCWE1MX1ZFUlNJT04gPj0gMjA2MjcKKyAgICBVTlVTRURfUEFSQU0oY2xvc3VyZSk7
CisKKyAgICAvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBsaWJ4bWwgMi42LjI3LgorICAg
IHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHhtbFBhcnNlckN0
eHRQdHI+KGNsb3N1cmUpLT5ub2RlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0RWxl
bWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWUsIGNv
bnN0IHhtbENoYXIqIHByZWZpeCwgY29uc3QgeG1sQ2hhciogdXJpLCBpbnQgbmJfbmFtZXNwYWNl
cywgY29uc3QgeG1sQ2hhcioqIG5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJf
ZGVmYXVsdGVkLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAo
aGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhsb2NhbG5hbWUsIHByZWZpeCwg
dXJpLCBuYl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0
ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZCBlbmRFbGVtZW50TnNIYW5k
bGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4bWxDaGFyKiwgY29uc3Qg
eG1sQ2hhciopCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZW5kRWxlbWVudE5z
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYXJhY3RlcnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNv
bnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRp
dHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJl
KS0+Y2hhcmFjdGVycyhzLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3Qg
eG1sQ2hhciogZGF0YSkKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9z
dXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5wcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgY2RhdGFCbG9j
a0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAg
ICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5jZGF0YUJsb2NrKHMsIGxlbik7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIGNv
bW1lbnQpCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y29tbWVudChjb21tZW50
KTsKK30KKworV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKK3N0YXRpYyB2b2lkIHdhcm5pbmdI
YW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2
YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2Vy
KGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6d2FybmluZywgbWVzc2FnZSwgYXJn
cyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKQor
c3RhdGljIHZvaWQgZmF0YWxFcnJvckhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBt
ZXNzYWdlKTsKKyAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVycm9yKFhNTERvY3VtZW50UGFyc2Vy
OjpmYXRhbCwgbWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRU
UklCVVRFX1BSSU5URigyLCAzKQorc3RhdGljIHZvaWQgbm9ybWFsRXJyb3JIYW5kbGVyKHZvaWQq
IGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5l
cnJvcihYTUxEb2N1bWVudFBhcnNlcjo6bm9uRmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOworICAgIHZh
X2VuZChhcmdzKTsKK30KKworLy8gVXNpbmcgYSBzdGF0aWMgZW50aXR5IGFuZCBtYXJraW5nIGl0
IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSBpcworLy8gYSBoYWNrIHRvIGF2b2lkIG1h
bGxvYy9mcmVlLiBVc2luZyBhIGdsb2JhbCB2YXJpYWJsZSBsaWtlIHRoaXMgY291bGQgY2F1c2Ug
dHJvdWJsZQorLy8gaWYgbGlieG1sIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2VyZSB0byBjaGFu
Z2UKK3N0YXRpYyB4bWxDaGFyIHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0WzVdID0gezAsIDAsIDAs
IDAsIDB9OworCitzdGF0aWMgeG1sRW50aXR5UHRyIHNoYXJlZFhIVE1MRW50aXR5KCkKK3sKKyAg
ICBzdGF0aWMgeG1sRW50aXR5IGVudGl0eTsKKyAgICBpZiAoIWVudGl0eS50eXBlKSB7CisgICAg
ICAgIGVudGl0eS50eXBlID0gWE1MX0VOVElUWV9ERUNMOworICAgICAgICBlbnRpdHkub3JpZyA9
IHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuY29udGVudCA9IHNoYXJl
ZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuZXR5cGUgPSBYTUxfSU5URVJOQUxf
UFJFREVGSU5FRF9FTlRJVFk7CisgICAgfQorICAgIHJldHVybiAmZW50aXR5OworfQorCitzdGF0
aWMgeG1sRW50aXR5UHRyIGdldFhIVE1MRW50aXR5KGNvbnN0IHhtbENoYXIqIG5hbWUpCit7Cisg
ICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KG5hbWUpKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmlu
ZyB2YWx1ZSA9IFN0cmluZygmYywgMSkudXRmOCgpOworICAgIEFTU0VSVCh2YWx1ZS5sZW5ndGgo
KSA8IDUpOworICAgIHhtbEVudGl0eVB0ciBlbnRpdHkgPSBzaGFyZWRYSFRNTEVudGl0eSgpOwor
ICAgIGVudGl0eS0+bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgZW50aXR5LT5uYW1lID0g
bmFtZTsKKyAgICBtZW1jcHkoc2hhcmVkWEhUTUxFbnRpdHlSZXN1bHQsIHZhbHVlLmRhdGEoKSwg
ZW50aXR5LT5sZW5ndGggKyAxKTsKKworICAgIHJldHVybiBlbnRpdHk7Cit9CisKK3N0YXRpYyB4
bWxFbnRpdHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFy
KiBuYW1lKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBh
cnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHhtbEVudGl0eVB0ciBlbnQgPSB4bWxHZXRQcmVk
ZWZpbmVkRW50aXR5KG5hbWUpOworICAgIGlmIChlbnQpIHsKKyAgICAgICAgZW50LT5ldHlwZSA9
IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWTsKKyAgICAgICAgcmV0dXJuIGVudDsKKyAg
ICB9CisKKyAgICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOworICAg
IGlmICghZW50ICYmIChnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICAgICAgIHx8IGdldFBhcnNlcihjbG9zdXJlKS0+
aXNYSFRNTE1QRG9jdW1lbnQoKQorI2VuZGlmCisgICAgICAgKSkgeworICAgICAgICBlbnQgPSBn
ZXRYSFRNTEVudGl0eShuYW1lKTsKKyAgICAgICAgaWYgKGVudCkKKyAgICAgICAgICAgIGVudC0+
ZXR5cGUgPSBYTUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk7CisgICAgfQorCisgICAgcmV0dXJu
IGVudDsKK30KKworc3RhdGljIHZvaWQgc3RhcnREb2N1bWVudEhhbmRsZXIodm9pZCogY2xvc3Vy
ZSkKK3sKKyAgICB4bWxQYXJzZXJDdHh0KiBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4
dCo+KGNsb3N1cmUpOworICAgIHN3aXRjaFRvVVRGMTYoY3R4dCk7CisgICAgZ2V0UGFyc2VyKGNs
b3N1cmUpLT5zdGFydERvY3VtZW50KGN0eHQtPnZlcnNpb24sIGN0eHQtPmVuY29kaW5nLCBjdHh0
LT5zdGFuZGFsb25lKTsKKyAgICB4bWxTQVgyU3RhcnREb2N1bWVudChjbG9zdXJlKTsKK30KKwor
c3RhdGljIHZvaWQgZW5kRG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCit7CisgICAgZ2V0
UGFyc2VyKGNsb3N1cmUpLT5lbmREb2N1bWVudCgpOworICAgIHhtbFNBWDJFbmREb2N1bWVudChj
bG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIGNs
b3N1cmUsIGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNv
bnN0IHhtbENoYXIqIHN5c3RlbUlEKQoreworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+aW50ZXJu
YWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgIHhtbFNBWDJJbnRlcm5h
bFN1YnNldChjbG9zdXJlLCBuYW1lLCBleHRlcm5hbElELCBzeXN0ZW1JRCk7Cit9CisKK3N0YXRp
YyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFy
KiwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1sQ2hhciopCit7CisgICAgU3Ry
aW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJZCk7CisgICAgaWYgKChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQorICAgICAgICB8fCAoZXh0SWQg
PT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09
ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09
ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCisgICAgICAgIHx8
IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNW
RyAxLjEvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjAvL0VOIikKKyAgICAgICApCisgICAgICAgIGdldFBhcnNlcihjbG9zdXJlKS0+
c2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0
aWVzIG9yIG5vdC4KK30KKworc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIo
dm9pZCosIGNvbnN0IHhtbENoYXIqLCBpbnQpCit7CisgICAgLy8gbm90aGluZyB0byBkbywgYnV0
IHdlIG5lZWQgdGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIKKyAgICAvLyBodHRwOi8vYnVn
emlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUKKyAgICAvLyBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyCit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IENTdHJpbmcmIGNodW5rKQorewor
ICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7
CisKKyAgICBzYXguZXJyb3IgPSBub3JtYWxFcnJvckhhbmRsZXI7CisgICAgc2F4LmZhdGFsRXJy
b3IgPSBmYXRhbEVycm9ySGFuZGxlcjsKKyAgICBzYXguY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNI
YW5kbGVyOworICAgIHNheC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyOworICAgIHNheC5jZGF0YUJsb2NrID0gY2RhdGFCbG9ja0hhbmRsZXI7Cisg
ICAgc2F4LmNvbW1lbnQgPSBjb21tZW50SGFuZGxlcjsKKyAgICBzYXgud2FybmluZyA9IHdhcm5p
bmdIYW5kbGVyOworICAgIHNheC5zdGFydEVsZW1lbnROcyA9IHN0YXJ0RWxlbWVudE5zSGFuZGxl
cjsKKyAgICBzYXguZW5kRWxlbWVudE5zID0gZW5kRWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXgu
Z2V0RW50aXR5ID0gZ2V0RW50aXR5SGFuZGxlcjsKKyAgICBzYXguc3RhcnREb2N1bWVudCA9IHN0
YXJ0RG9jdW1lbnRIYW5kbGVyOworICAgIHNheC5lbmREb2N1bWVudCA9IGVuZERvY3VtZW50SGFu
ZGxlcjsKKyAgICBzYXguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5hbFN1YnNldEhhbmRsZXI7Cisg
ICAgc2F4LmV4dGVybmFsU3Vic2V0ID0gZXh0ZXJuYWxTdWJzZXRIYW5kbGVyOworICAgIHNheC5p
Z25vcmFibGVXaGl0ZXNwYWNlID0gaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXI7CisgICAgc2F4
LmVudGl0eURlY2wgPSB4bWxTQVgyRW50aXR5RGVjbDsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBY
TUxfU0FYMl9NQUdJQzsKKyAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7CisgICAg
bV9zYXdFcnJvciA9IGZhbHNlOworICAgIG1fc2F3Q1NTID0gZmFsc2U7CisgICAgbV9zYXdYU0xU
cmFuc2Zvcm0gPSBmYWxzZTsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOworCisgICAg
WE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpKTsKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fY29udGV4dCA9
IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcigmc2F4LCB0aGlzLCBjaHVuayk7
CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghY2h1bmsuZGF0YSgpKTsKKyAgICAgICAgbV9j
b250ZXh0ID0gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsIHRoaXMp
OworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworICAgIGlm
ICghaXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAg
Ly8gVGVsbCBsaWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCkpOworICAgICAgICAgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29udGV4dCgpLCAwLCAw
LCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKworI2lmIEVOQUJMRShYU0xUKQorICAgIFhNTFRyZWVWaWV3ZXIgeG1sVHJl
ZVZpZXdlcihkb2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdlck1vZGUgPSAhbV9zYXdFcnJv
ciAmJiAhbV9zYXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmIHhtbFRyZWVWaWV3ZXIuaGFz
Tm9TdHlsZUluZm9ybWF0aW9uKCk7CisgICAgaWYgKHhtbFZpZXdlck1vZGUpCisgICAgICAgIHht
bFRyZWVWaWV3ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KCk7CisKKyAgICBpZiAobV9z
YXdYU0xUcmFuc2Zvcm0pIHsKKyAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5n
KGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JU
cmFuc2Zvcm0sIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgZG9jdW1lbnQo
KS0+c2V0VHJhbnNmb3JtU291cmNlKGFkb3B0UHRyKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSkp
OworCisgICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBk
b2N1bWVudCB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hlZXRz
LgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUlt
bWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKworICAg
ICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKKyAgICB9CisjZW5kaWYKK30KKwor
I2lmIEVOQUJMRShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRy
CisgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMgc28gdGhhdCBhIGZhaWx1cmUg
dG8gcGFyc2UgdGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgorICAgIC8vIGdvb2QgZXJyb3Ig
bWVzc2FnZXMuCisgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgQk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oJkJPTSk7CisKKyAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGNhY2hlZFJl
c291cmNlTG9hZGVyLCBlcnJvckZ1bmMsIDApOworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4
bWxSZWFkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNvdXJjZS5jaGFyYWN0
ZXJzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsLmxhdGluMSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZC
RSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNMVF9QQVJTRV9P
UFRJT05TKTsKKyAgICByZXR1cm4gc291cmNlRG9jOworfQorI2VuZGlmCisKK2ludCBYTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZSBpbXBs
ZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3Vs
ZCByZXR1cm4gMC1iYXNlZC4KKyAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1
dC0+bGluZSA6IDE7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVy
bnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgorICAgIHJl
dHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxOworfQorCitUZXh0UG9z
aXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHht
bFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAg
ICAvLyBGSVhNRTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJz
LCBidXQgd2UgdHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25z
aXN0ZW50IHdpdGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAg
IC8vICAgICAgICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAg
ICAgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQt
PmNvbCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9u
LCBpbiBjb250cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVw
bGFjZSB0ZXh0UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRl
eHRQb3NpdGlvbk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRl
eHQgPSB0aGlzLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
VGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlv
bjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5s
aW5lKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRl
eHQtPmlucHV0LT5jb2wpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNp
bmcoKQoreworICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOworICAgIGlmIChjb250
ZXh0KCkpCisgICAgICAgIHhtbFN0b3BQYXJzZXIoY29udGV4dCgpKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNTRVJUKCFpc0RldGFjaGVk
KCkpOworICAgIEFTU0VSVChtX3BhcnNlclBhdXNlZCk7CisKKyAgICBtX3BhcnNlclBhdXNlZCA9
IGZhbHNlOworCisgICAgLy8gRmlyc3QsIGV4ZWN1dGUgYW55IHBlbmRpbmcgY2FsbGJhY2tzCisg
ICAgd2hpbGUgKCFtX3BlbmRpbmdDYWxsYmFja3MtPmlzRW1wdHkoKSkgeworICAgICAgICBtX3Bl
bmRpbmdDYWxsYmFja3MtPmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKHRoaXMpOworCisgICAg
ICAgIC8vIEEgY2FsbGJhY2sgcGF1c2VkIHRoZSBwYXJzZXIKKyAgICAgICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZW4sIHdyaXRl
IGFueSBwZW5kaW5nIGRhdGEKKyAgICBTZWdtZW50ZWRTdHJpbmcgcmVzdCA9IG1fcGVuZGluZ1Ny
YzsKKyAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBhcHBlbmQocmVzdCk7CisKKyAgICAv
LyBGaW5hbGx5LCBpZiBmaW5pc2goKSBoYXMgYmVlbiBjYWxsZWQgYW5kIHdyaXRlKCkgZGlkbid0
IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1ZWQsIGNh
bGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgbV9wZW5kaW5nQ2FsbGJhY2tzLT5p
c0VtcHR5KCkpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjph
cHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIGNodW5rKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0KTsKKyAgICBBU1NFUlQobV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAgQ1N0cmlu
ZyBjaHVua0FzVXRmOCA9IGNodW5rLnV0ZjgoKTsKKyAgICAKKyAgICAvLyBsaWJ4bWwyIHRha2Vz
IGFuIGludCBmb3IgYSBsZW5ndGgsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgaGFuZGxlIFhNTCBjaHVu
a3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisgICAgaWYgKGNodW5rQXNVdGY4Lmxlbmd0aCgpID4gSU5U
X01BWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRl
eHQoY2h1bmtBc1V0ZjgpOworICAgIHhtbFBhcnNlQ29udGVudChjb250ZXh0KCkpOworICAgIGVu
ZERvY3VtZW50KCk7IC8vIENsb3NlIGFueSBvcGVuIHRleHQgbm9kZXMuCisKKyAgICAvLyBGSVhN
RTogSWYgdGhpcyBjb2RlIGlzIGFjdHVhbGx5IG5lZWRlZCwgaXQgc2hvdWxkIHByb2JhYmx5IG1v
dmUgdG8gZmluaXNoKCkKKyAgICAvLyBYTUxEb2N1bWVudFBhcnNlclF0IGhhcyBhIHNpbWlsYXIg
Y2hlY2sgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5k
T2ZEb2N1bWVudEVycm9yKSBpbiBkb0VuZCgpLgorICAgIC8vIENoZWNrIGlmIGFsbCB0aGUgY2h1
bmsgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICAgIGxvbmcgYnl0ZXNQcm9jZXNzZWQgPSB4bWxCeXRl
Q29uc3VtZWQoY29udGV4dCgpKTsKKyAgICBpZiAoYnl0ZXNQcm9jZXNzZWQgPT0gLTEgfHwgKCh1
bnNpZ25lZCBsb25nKWJ5dGVzUHJvY2Vzc2VkKSAhPSBjaHVua0FzVXRmOC5sZW5ndGgoKSkgewor
ICAgICAgICAvLyBGSVhNRTogSSBkb24ndCBiZWxpZXZlIHdlIGNhbiBoaXQgdGhpcyBjYXNlIHdp
dGhvdXQgYWxzbyBoYXZpbmcgc2VlbiBhbiBlcnJvciBvciBhIG51bGwgYnl0ZS4KKyAgICAgICAg
Ly8gSWYgd2UgaGl0IHRoaXMgQVNTRVJULCB3ZSd2ZSBmb3VuZCBhIHRlc3QgY2FzZSB3aGljaCBk
ZW1vbnN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgY29kZS4KKyAgICAgICAgQVNTRVJUKG1fc2F3
RXJyb3IgfHwgKGJ5dGVzUHJvY2Vzc2VkID49IDAgJiYgIWNodW5rQXNVdGY4LmRhdGEoKVtieXRl
c1Byb2Nlc3NlZF0pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5v
IGVycm9yIGlmIHRoZSBjaHVuayBpcyB3ZWxsIGZvcm1lZCBvciBpdCBpcyBub3QgYnV0IHdlIGhh
dmUgbm8gZXJyb3IuCisgICAgcmV0dXJuIGNvbnRleHQoKS0+d2VsbEZvcm1lZCB8fCAheG1sQ3R4
dEdldExhc3RFcnJvcihjb250ZXh0KCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0ZSB7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICBib29sIGdvdEF0dHJpYnV0ZXM7Cit9Owor
CitzdGF0aWMgdm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1
cmUsIGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogLyp4bWxQcmVm
aXgqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
eG1sQ2hhciogLyp4bWxVUkkqLywgaW50IC8qbmJfbmFtZXNwYWNlcyovLCBjb25zdCB4bWxDaGFy
KiogLypuYW1lc3BhY2VzKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgLypuYl9kZWZhdWx0ZWQqLywgY29uc3QgeG1s
Q2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKHN0cmNtcChyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPih4bWxMb2NhbE5hbWUpLCAiYXR0cnMiKSAhPSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJz
ZXJDdHh0UHRyPihjbG9zdXJlKTsKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSA9IHN0
YXRpY19jYXN0PEF0dHJpYnV0ZVBhcnNlU3RhdGUqPihjdHh0LT5fcHJpdmF0ZSk7CisKKyAgICBz
dGF0ZS0+Z290QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICB4bWxTQVgyQXR0cmlidXRlcyogYXR0
cmlidXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMkF0dHJpYnV0ZXMqPihsaWJ4bWxBdHRy
aWJ1dGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgewor
ICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9j
YWxuYW1lKTsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gKGludCkgKGF0dHJpYnV0ZXNbaV0u
ZW5kIC0gYXR0cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgPSB0
b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgIFN0cmlu
ZyBhdHRyUHJlZml4ID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5wcmVmaXgpOworICAgICAgICBT
dHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBhdHRyTG9jYWxOYW1lIDog
YXR0clByZWZpeCArICI6IiArIGF0dHJMb2NhbE5hbWU7CisKKyAgICAgICAgc3RhdGUtPmF0dHJp
YnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYg
YXR0cnNPSykKK3sKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLmdv
dEF0dHJpYnV0ZXMgPSBmYWxzZTsKKworICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNl
dCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisgICAgc2F4LnN0YXJ0RWxlbWVudE5zID0gYXR0cmli
dXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FY
Ml9NQUdJQzsKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gcGFyc2VyID0gWE1MUGFyc2Vy
Q29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0ZSk7CisgICAgU3RyaW5nIHBh
cnNlU3RyaW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICIgKyBzdHJpbmcgKyAi
IC8+IjsKKyAgICB4bWxQYXJzZUNodW5rKHBhcnNlci0+Y29udGV4dCgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBwYXJzZVN0cmluZy5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDEpOworICAgIGF0dHJzT0sgPSBzdGF0ZS5nb3RBdHRy
aWJ1dGVzOworICAgIHJldHVybiBzdGF0ZS5hdHRyaWJ1dGVzOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApA
QCAtMCwwICsxLDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTERvY3VtZW50UGFy
c2VyLmgiCisKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDYWNoZWRTY3Jp
cHQuaCIKKyNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRN
TEVudGl0eVBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2NyaXB0
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFhIVE1M
TVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQu
aCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEVudGl0eVJlc29sdmVyIDogcHVibGljIFFYbWxTdHJlYW1FbnRpdHlSZXNvbHZl
ciB7CisgICAgdmlydHVhbCBRU3RyaW5nIHJlc29sdmVVbmRlY2xhcmVkRW50aXR5KGNvbnN0IFFT
dHJpbmcgJm5hbWUpOworfTsKKworUVN0cmluZyBFbnRpdHlSZXNvbHZlcjo6cmVzb2x2ZVVuZGVj
bGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSkKK3sKKyAgICBVQ2hhciBjID0gZGVjb2Rl
TmFtZWRFbnRpdHkobmFtZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgcmV0dXJuIFFTdHJp
bmcoYyk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wg
WE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNp
b24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFy
c2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJh
bWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwg
bV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJy
ZW50Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NT
UyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJz
dEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQo
ZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENh
bGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3Np
dGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGlu
Z1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJl
bG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAg
LCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworICAg
IG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Cit9CisKK1hN
TERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRWxlbWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
IHBlcm1pc3Npb24pCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRv
Y3VtZW50KCkpCisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAg
ICwgbV9jdXJyZW50Tm9kZShmcmFnbWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAg
LCBtX3Nhd0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwg
bV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisg
ICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJz
ZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0
RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAs
IG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1
ZSkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQoreworICAgIGZyYWdt
ZW50LT5yZWYoKTsKKworICAgIC8vIEFkZCBuYW1lc3BhY2VzIGJhc2VkIG9uIHRoZSBwYXJlbnQg
bm9kZQorICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNrOworICAgIHdoaWxlIChwYXJlbnRF
bGVtZW50KSB7CisgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFyZW50RWxlbWVudCk7CisKKyAg
ICAgICAgTm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYg
KCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICB9CisKKyAgICBp
ZiAoZWxlbVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVhtbFN0cmVh
bU5hbWVzcGFjZURlY2xhcmF0aW9ucyBuYW1lc3BhY2VzOworICAgIGZvciAoRWxlbWVudCogZWxl
bWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2su
cmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVu
dC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIg
PSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9j
YWxOYW1lKCkgPT0gInhtbG5zIikKKyAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNw
YWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5w
cmVmaXgoKSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFwcGVu
ZChRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24oYXR0ci0+bG9jYWxOYW1lKCksIGF0dHIt
PnZhbHVlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX3N0cmVh
bS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9ucyhuYW1lc3BhY2VzKTsKKyAgICBtX3N0cmVh
bS5zZXRFbnRpdHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2ZXIpOworCisgICAgLy8gSWYgdGhl
IHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8g
eG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4K
KyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50
LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVudEVs
ZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3Vt
ZW50UGFyc2VyKCkKK3sKKyAgICBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKKyAgICBpZiAobV9w
ZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlz
KTsKKyAgICBkZWxldGUgbV9zdHJlYW0uZW50aXR5UmVzb2x2ZXIoKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAg
IG1fd3JvdGVUZXh0ID0gdHJ1ZTsKKworICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYg
ZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CisgICAgICAgIC8vIElmIHRoZSBk
ZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQor
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRU3RyaW5n
IGRhdGEocGFyc2VTdHJpbmcpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gSmF2YVNjcmlwdCBtYXkgY2F1c2UgdGhlIHBhcnNlciB0byBkZXRhY2gsCisgICAgICAgIC8v
IGtlZXAgdGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJl
ZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBtX3N0cmVh
bS5hZGREYXRhKGRhdGEpOworICAgICAgICBwYXJzZSgpOworICAgIH0KKworICAgIHJldHVybjsK
K30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29u
c3QgQ1N0cmluZyYpCit7CisgICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOworICAg
IG1fc2F3RXJyb3IgPSBmYWxzZTsKKyAgICBtX3Nhd0NTUyA9IGZhbHNlOworICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworI2lmIEVOQUJMRShYU0xUKQorICAg
IGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zv
cm1Tb3VyY2UoYWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZShtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtKSkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8g
TWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRz
LgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUlt
bWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKyAgICAg
ICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBp
ZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRv
Y3VtZW50RXJyb3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVu
dCAmJiAhbV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fc2F3RXJyb3IpKQorICAgICAgICBoYW5kbGVF
cnJvcihmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51
bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmxpbmVOdW1iZXIoKTsKK30KKwor
aW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKK30KKworVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVu
dFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9u
MChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lTnVtYmVyKCkpLCBX
VEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOwor
fQorCisvLyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVycHJldHMgemVyby1iYXNlIGxp
bmVOdW1iZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisvLyBGSVhNRTogVGhpcyBlcnJv
ciBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQgZml4IGl0IGV2ZW50dWFsbHku
IAorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQo
KSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6
OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6c3RvcFBhcnNpbmcoKQoreworICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6c3RvcFBh
cnNpbmcoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7
CisgICAgQVNTRVJUKG1fcGFyc2VyUGF1c2VkKTsKKworICAgIG1fcGFyc2VyUGF1c2VkID0gZmFs
c2U7CisKKyAgICAvLyBGaXJzdCwgZXhlY3V0ZSBhbnkgcGVuZGluZyBjYWxsYmFja3MKKyAgICBw
YXJzZSgpOworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gVGhlbiwgd3JpdGUgYW55IHBlbmRpbmcgZGF0YQorICAgIFNlZ21lbnRlZFN0cmluZyByZXN0
ID0gbV9wZW5kaW5nU3JjOworICAgIG1fcGVuZGluZ1NyYy5jbGVhcigpOworICAgIGFwcGVuZChy
ZXN0KTsKKworICAgIC8vIEZpbmFsbHksIGlmIGZpbmlzaCgpIGhhcyBiZWVuIGNhbGxlZCBhbmQg
YXBwZW5kKCkgZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBi
ZWluZyBxdWV1ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgIW1fcGFy
c2VyUGF1c2VkICYmICFtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgIGVuZCgpOworfQorCitib29s
IFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZSkKK3sKKyAgICBBU1NFUlQoIW1fc2F3Rmlyc3RFbGVtZW50KTsKKyAgICBhcHBlbmQoU3Ry
aW5nKCI8cXhtbHN0cmVhbWR1bW15ZWxlbWVudD4iKSk7CisgICAgYXBwZW5kKHNvdXJjZSk7Cisg
ICAgYXBwZW5kKFN0cmluZygiPC9xeG1sc3RyZWFtZHVtbXllbGVtZW50PiIpKTsKKyAgICByZXR1
cm4gIWhhc0Vycm9yKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3N0cnVjdCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBhdHRyaWJ1dGVzOworICAgIGJvb2wgZ290QXR0cmlidXRlczsKK307CisKK3N0YXRpYyB2
b2lkIGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoQXR0cmlidXRlUGFyc2VTdGF0ZSog
c3RhdGUsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzJiBhdHRycykKK3sKKyAgICBpZiAoYXR0
cnMuY291bnQoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0ZS0+Z290QXR0cmli
dXRlcyA9IHRydWU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7IGkr
KykgeworICAgICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlJiBhdHRyID0gYXR0cnNbaV07
CisgICAgICAgIFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0
cmluZyBhdHRyVmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVS
SSAgICAgICA9IGF0dHIubmFtZXNwYWNlVXJpKCk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUg
ICAgID0gYXR0ci5xdWFsaWZpZWROYW1lKCk7CisgICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNl
dChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7CisgICAgfQorfQorCitIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0sp
Cit7CisgICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5nb3RBdHRyaWJ1
dGVzID0gZmFsc2U7CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyIHN0cmVhbTsKKyAgICBRU3RyaW5n
IGR1bW15ID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/Pjxh
dHRycyAlMSAvPiIpKS5hcmcoc3RyaW5nKTsKKyAgICBzdHJlYW0uYWRkRGF0YShkdW1teSk7Cisg
ICAgd2hpbGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBzdHJlYW0ucmVhZE5leHQoKTsK
KyAgICAgICAgaWYgKHN0cmVhbS5pc1N0YXJ0RWxlbWVudCgpKSB7CisgICAgICAgICAgICBhdHRy
aWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKCZzdGF0ZSwgc3RyZWFtLmF0dHJpYnV0ZXMoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYXR0cnNPSyA9IHN0YXRlLmdvdEF0dHJpYnV0ZXM7Cisg
ICAgcmV0dXJuIHN0YXRlLmF0dHJpYnV0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHBy
ZWZpeEZyb21RTmFtZShjb25zdCBRU3RyaW5nJiBxTmFtZSkKK3sKKyAgICBjb25zdCBpbnQgb2Zm
c2V0ID0gcU5hbWUuaW5kZXhPZihRTGF0aW4xQ2hhcignOicpKTsKKyAgICBpZiAob2Zmc2V0IDw9
IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBx
TmFtZS5sZWZ0KG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50
TmFtZXNwYWNlcyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtTmFtZXNwYWNl
RGVjbGFyYXRpb25zICZucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlw
dGluZ1Blcm1pc3Npb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBucy5jb3VudCgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9uICZkZWNs
ID0gbnNbaV07CisgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkZWNsLm5hbWVzcGFjZVVy
aSgpOworICAgICAgICBTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSBkZWNsLnByZWZpeCgpLmlzRW1w
dHkoKSA/IFN0cmluZygieG1sbnMiKSA6IFN0cmluZygieG1sbnM6Iik7CisgICAgICAgIG5hbWVz
cGFjZVFOYW1lLmFwcGVuZChkZWNsLnByZWZpeCgpKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0
QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgbmFtZXNwYWNlUU5h
bWUsIG5hbWVzcGFjZVVSSSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBpZiAo
ZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhF
bGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlcyAmYXR0cnMsIEV4
Y2VwdGlvbkNvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAgICAgICAgU3RyaW5n
IGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAg
ICAgPSBhdHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5u
YW1lc3BhY2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhhdHRyLm5hbWVzcGFj
ZVVyaSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5h
bWUoKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVSSSwgYXR0clFO
YW1lLCBhdHRyVmFsdWUsIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVj
KSAvLyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSgpCit7CisgICAgd2hpbGUg
KCFpc1N0b3BwZWQoKSAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fc3RyZWFtLmF0RW5kKCkpIHsK
KyAgICAgICAgbV9zdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChtX3N0cmVhbS50
b2tlblR5cGUoKSkgeworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1l
bnQ6IHsKKyAgICAgICAgICAgIHN0YXJ0RG9jdW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6IHsK
KyAgICAgICAgICAgIGVuZERvY3VtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3Vt
ZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaGFu
ZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1l
bnQ6IHsKKyAgICAgICAgICAgIHBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJzOiB7
CisgICAgICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAg
Ly9jZGF0YQorICAgICAgICAgICAgICAgIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgcGFyc2VD
aGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAg
IHBhcnNlQ29tbWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKKyAgICAgICAgICAgIC8vcURlYnVnKCk8PCIt
LS0tLS0tLS0tLS0tIERURCI7CisgICAgICAgICAgICBwYXJzZUR0ZCgpOworI2lmIEVOQUJMRShY
SFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSB0cnVlOworI2Vu
ZGlmCisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJl
YW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogeworICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0t
LS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCkKKyAgICAgICAg
ICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0KCkudG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAg
ICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgorICAgICAgICAgICAg
ICAgKSB7CisgICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBtX3N0cmVhbS5uYW1lKCku
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHko
ZW50aXR5LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGVh
ZlRleHROb2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRlclRleHQoKTsKKyAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZj
LCAxKTsKKyAgICAgICAgICAgICAgICAvLyBxRGVidWcoKTw8IiAtLS0tLS0tIGFkZGluZyBlbnRp
dHkgIjw8c3RyOworICAgICAgICAgICAgICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRhKHN0
ciwgZWMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IHsKKyAg
ICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpZiAobV9zdHJl
YW0uZXJyb3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJy
b3IpIHsKKyAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigp
ID09IFFYbWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAgICAgICAgICAgIGhh
bmRsZUVycm9yKHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVO
dW1iZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KCkKK3sKKyAg
ICBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
CisgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRY
TUxTdGFuZGFsb25lKG1fc3RyZWFtLmlzU3RhbmRhbG9uZURvY3VtZW50KCksIGVjKTsKKworICAg
ICAgICBRU3RyaW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1bWVudFZlcnNpb24oKTsKKyAg
ICAgICAgaWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNl
dFhNTFZlcnNpb24odmVyc2lvbiwgZWMpOworICAgICAgICBRU3RyaW5nUmVmIGVuY29kaW5nID0g
bV9zdHJlYW0uZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKGVuY29kaW5nKTsK
KyAgICB9Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkK
K3sKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIG1fcGFyc2luZ0ZyYWdtZW50KSB7Cisg
ICAgICAgIC8vIHNraXAgZHVtbXkgZWxlbWVudCBmb3IgZnJhZ21lbnRzCisgICAgICAgIG1fc2F3
Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRU
ZXh0KCk7CisKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJlYW0ubmFtZSgpOworICAgIFN0
cmluZyB1cmkgICAgICAgPSBtX3N0cmVhbS5uYW1lc3BhY2VVcmkoKTsKKyAgICBTdHJpbmcgcHJl
Zml4ICAgID0gcHJlZml4RnJvbVFOYW1lKG1fc3RyZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmlu
ZygpKTsKKworICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsKKyAg
ICAgICAgUV9BU1NFUlQocHJlZml4LmlzTnVsbCgpKTsKKyAgICAgICAgdXJpID0gbV9kZWZhdWx0
TmFtZXNwYWNlVVJJOworICAgIH0KKworICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBs
b2NhbE5hbWUsIHVyaSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKKyAgICBpZiAoIW5ld0VsZW1lbnQpIHsK
KyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9j
dW1lbnQoKSkgeworICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRN
TE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUg
dGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAorICAgICAgICAvLyBlbnN1
cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAn
aHRtbCcKKyAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcK
KyAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkp
IHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBl
Y3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJOworICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOworICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihR
WG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFt
ZXNwYWNlVVJJKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJz
dEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0
cnVlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxlbWVudE5hbWVz
cGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0ubmFtZXNwYWNlRGVjbGFyYXRpb25zKCks
IGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGlmIChlYykgeworICAgICAgICBzdG9w
UGFyc2luZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlRWxlbWVudEF0
dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0uYXR0cmlidXRlcygpLCBlYywgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmco
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVs
ZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHNjcmlw
dEVsZW1lbnQpCisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9u
ZUJhc2VkKCk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50
LmdldCgpKTsKKworICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKKyAgICBp
ZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50
LT5hdHRhY2goKTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAg
aWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkKKyAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5nZXQoKSktPmluc2VydGVk
QnlQYXJzZXIoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNw
YXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZUVuZEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8
Q29udGFpbmVyTm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CisgICAgbi0+ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCk7CisKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2Ny
aXB0aW5nTm90QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAgICAgICAgcG9wQ3VycmVudE5v
ZGUoKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbi0+cmVtb3ZlKGVjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpIHx8
ICFtX3ZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSk7CisK
KyAgICAvLyBUaGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3Zl
ZCBmcm9tIGRvY3VtZW50LgorICAgIC8vIFBhcnNpbmcgY29udGludWVzIGluIHRoaXMgY2FzZSwg
YnV0IHNjcmlwdHMgYXJlbid0IGV4ZWN1dGVkLgorICAgIGlmICghZWxlbWVudC0+aW5Eb2N1bWVu
dCgpKSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGVs
ZW1lbnQpOworICAgIGlmICghc2NyaXB0RWxlbWVudCkgeworICAgICAgICBwb3BDdXJyZW50Tm9k
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5h
bCBzY3JpcHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKKyAgICBBU1NFUlQo
IW1fcGVuZGluZ1NjcmlwdCk7CisgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKKworICAg
IGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0
KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5U
eXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3Vw
cG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisg
ICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRy
dWUpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJl
YWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVj
dXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgp
LCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVs
c2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAg
ICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGlu
Z1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3Jp
cHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgp
IGV4ZWN1dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAg
ICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Nj
cmlwdEVsZW1lbnQgPSAwOworICAgIH0KKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsK
KyAgICBwb3BDdXJyZW50Tm9kZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZUNoYXJhY3RlcnMoKQoreworICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCisgICAgICAgIGVudGVy
VGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fbGVhZlRleHROb2RlLT5h
cHBlbmREYXRhKG1fc3RyZWFtLnRleHQoKSwgZWMpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCit7CisgICAgZXhpdFRleHQoKTsKKwor
ICAgIC8vICMjIyBoYW5kbGUgZXhjZXB0aW9ucworICAgIGludCBleGNlcHRpb24gPSAwOworICAg
IFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gZG9jdW1lbnQoKS0+Y3JlYXRlUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKAorICAgICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25UYXJnZXQoKSwKKyAgICAgICAgbV9zdHJlYW0ucHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YSgp
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IHBpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJz
ZXJBZGRDaGlsZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkp
CisgICAgICAgIHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KTsKKworICAgIGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lm
IEVOQUJMRShYU0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50
ICYmIHBpLT5pc1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQo
KS0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNl
bmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNkYXRhKCkKK3sKKyAgICBl
eGl0VGV4dCgpOworCisgICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2Vj
dGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIG1fc3RyZWFtLnRleHQoKSk7CisKKyAgICBtX2N1cnJl
bnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdOb2RlLmdldCgpKTsKKyAgICBpZiAobV92aWV3ICYm
ICFuZXdOb2RlLT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KCkKK3sKKyAgICBleGl0VGV4dCgp
OworCisgICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKKworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG5ld05vZGUuZ2V0KCkpOworICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVk
KCkpCisgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjplbmREb2N1bWVudCgpCit7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NU
eXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFhNTERvY3VtZW50UGFy
c2VyOjpoYXNFcnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmhhc0Vycm9yKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKK3sKKyAgICBRU3RyaW5n
UmVmIG5hbWUgPSBtX3N0cmVhbS5kdGROYW1lKCk7CisgICAgUVN0cmluZ1JlZiBwdWJsaWNJZCA9
IG1fc3RyZWFtLmR0ZFB1YmxpY0lkKCk7CisgICAgUVN0cmluZ1JlZiBzeXN0ZW1JZCA9IG1fc3Ry
ZWFtLmR0ZFN5c3RlbUlkKCk7CisKKyAgICAvL3FEZWJ1ZygpIDw8IGR0ZCA8PCBuYW1lIDw8IHB1
YmxpY0lkIDw8IHN5c3RlbUlkOworICAgIGlmICgocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKSkKKyAgICAgICAgfHwgKHB1
YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKSkKKyAg
ICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEu
MCBTdHJpY3QvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJ
ZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCisg
ICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAx
LjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAx
LjEvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCAocHVibGljSWQgPT0g
UUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKQor
I2VuZGlmCisgICAgICAgKQorICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNv
bnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8v
RFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAgfHwgKHB1YmxpY0lkID09
IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkp
IHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcu
bG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBE
T0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxp
bmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIC8vIGNo
ZWNrIGlmIHRoZSBNSU1FIHR5cGUgaXMgY29ycmVjdCB3aXRoIHRoaXMgbWV0aG9kCisgICAgICAg
ICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOworICAgIH0KKyNlbmRpZgorICAgIGlmICghbV9w
YXJzaW5nRnJhZ21lbnQpCisgICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwor
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTQ3M2VkMjMwODJmMzdkMzkzYThkMTFmMWFkYTE1
ZWNjM2MzNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENh
Y2hlZFJlc291cmNlTG9hZGVyID0gMDsKKworWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9j
dW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpCisgICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJj
ZUxvYWRlcikKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4
bWxHZW5lcmljRXJyb3IpCisgICAgLCBtX29sZFN0cnVjdHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0
dXJlZEVycm9yKQorICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4
dCkKKyNlbmRpZgoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJl
c291cmNlTG9hZGVyOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitYTUxEb2N1bWVudFBhcnNlclNj
b3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxT
dHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4
dCkKKyAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVudENhY2hlZFJlc291cmNl
TG9hZGVyKQorICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdlbmVyaWNFcnJvcikKKyAg
ICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCisgICAgLCBt
X29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQoreworICAgIGN1cnJlbnRD
YWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGlmIChnZW5l
cmljRXJyb3JGdW5jKQorICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQ29udGV4
dCwgZ2VuZXJpY0Vycm9yRnVuYyk7CisgICAgaWYgKHN0cnVjdHVyZWRFcnJvckZ1bmMpCisgICAg
ICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJy
b3JGdW5jKTsKK30KKyNlbmRpZgorCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1l
bnRQYXJzZXJTY29wZSgpCit7CisgICAgY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gbV9v
bGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICB4bWxTZXRHZW5l
cmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVyaWNFcnJvckZ1bmMpOwor
ICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNvbnRleHQsIG1fb2xkU3Ry
dWN0dXJlZEVycm9yRnVuYyk7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDQwNDNi
NDhiMTFlYzViODgzNjBhZTNlMTc5YjVkMWVlMTJkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgWE1MRG9jdW1lbnRQYXJzZXJTY29wZV9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2Vy
U2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBFTkFCTEUoWFNM
VCkKKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworICAgIGNsYXNzIFhN
TERvY3VtZW50UGFyc2VyU2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYTUxE
b2N1bWVudFBhcnNlclNjb3BlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAg
ICAgICAgflhNTERvY3VtZW50UGFyc2VyU2NvcGUoKTsKKworICAgICAgICBzdGF0aWMgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworI2lmIEVOQUJM
RShYU0xUKQorICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJy
b3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMgPSAwLCB2
b2lkKiBlcnJvckNvbnRleHQgPSAwKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisKKyNpZiBF
TkFCTEUoWFNMVCkKKyAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBtX29sZEdlbmVyaWNFcnJv
ckZ1bmM7CisgICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgbV9vbGRTdHJ1Y3R1cmVkRXJy
b3JGdW5jOworICAgICAgICB2b2lkKiBtX29sZEVycm9yQ29udGV4dDsKKyNlbmRpZgorICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2Vy
U2NvcGVfaAo=
</data>
<flag name="review"
          id="93848"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="93906"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99492</attachid>
            <date>2011-07-01 11:34:21 -0700</date>
            <delta_ts>2011-07-01 13:09:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>movexml.patch</filename>
            <type>text/plain</type>
            <size>256109</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmYwOTliMmU2ZTU1ODI3OTc4YjZjZWY4NTNlZDdjNjYw
ZTBiN2JiNC4uMTNlNzg2OGNlYTVlZmViMGI4MjlkYjc0ZWQyNjY4ODE2YzRmYjk3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTYyLDYgKzYyLDcgQEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS93ZWJzb2NrZXRzIgogICAgICIke1dFQkNPUkVf
RElSfS93b3JrZXJzIgogICAgICIke1dFQkNPUkVfRElSfS94bWwiCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3htbC9wYXJzZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfSIKICAgICAiJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzIgogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vQVBJIgpAQCAtNjA2LDkgKzYwNyw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBk
b20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcAogICAg
IGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2VyLmNw
cAotICAgIGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCi0gICAgZG9tL1hNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAKIApAQCAtMTM4OCw2ICsxMzg2LDEwIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
ICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKICAgICB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCiAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKKworICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXIuY3BwCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwCisgICAgeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcAogKQogCiBTRVQo
V2ViQ29yZV9DU1NfUFJPUEVSVFlfTkFNRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MTkzNTIyNWRmYmRjMTI1
ZmVhZDhjYmUzMGFjODRhNmI3YjlhZDU4Li5kZGYyNjc1NDg1ODYxMjVjNWJhMjczMWMzNTdkNzNm
NmZlMThmMTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc2IEBACisyMDExLTA3LTAxICBKZWZm
cmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KKworICAgICAgICBNb3ZlIFhNTERvY3VtZW50UGFyc2VyIHRvIG5ldyBmb2xkZXIgeG1s
L3BhcnNlci8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzNjY2CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnByaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9u
LnZzcHJvcHM6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJz
LmNtZDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6cHVzaEN1cnJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6Y2xlYXJDdXJyZW50Tm9kZVN0YWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVu
dGVyVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6ZXhpdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNlUGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KToK
KyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpYTUxQYXJzZXJDb250ZXh0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBh
cnNlckNvbnRleHQ6OlhNTFBhcnNlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6c2V0SXNYSFRNTERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjppc1hIVE1MRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnNldElzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjppc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6d2VsbEZvcm1lZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6Y29udGV4dCk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6flBlbmRpbmdDYWxs
YmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kRW5kRWxl
bWVudE5TQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBw
ZW5kQ2hhcmFjdGVyc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFj
a3M6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdDYWxsYmFja3M6OmFwcGVuZENEQVRBQmxvY2tDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRDb21tZW50Q2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBwZW5kSW50ZXJuYWxTdWJzZXRDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRFcnJvckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmNhbGxBbmRSZW1v
dmVGaXJzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6Omlz
RW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NhbGxi
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nQ2FsbGJh
Y2s6On5QZW5kaW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNr
czo6UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s6On5QZW5kaW5nU3RhcnRFbGVtZW50TlND
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nU3Rh
cnRFbGVtZW50TlNDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2Fs
bGJhY2tzOjpQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjazo6flBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNr
czo6UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s6On5Q
ZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrOjpj
YWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDREFUQUJs
b2NrQ2FsbGJhY2s6On5QZW5kaW5nQ0RBVEFCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdDYWxsYmFja3M6OlBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s6OmNhbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6UGVuZGluZ0NvbW1lbnRDYWxsYmFj
azo6flBlbmRpbmdDb21tZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0Nh
bGxiYWNrczo6UGVuZGluZ0NvbW1lbnRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZW5kaW5nQ2FsbGJhY2tzOjpQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjazo6flBlbmRp
bmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdDYWxs
YmFja3M6OlBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hdGNoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRCdWZmZXI6Ok9mZnNl
dEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRCdWZmZXI6OnJlYWRPdXRCeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpzd2l0Y2hUb1VURjE2KToKKyAgICAgICAgKFdlYkNvcmU6OnNo
b3VsZEFsbG93RXh0ZXJuYWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5GdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlYWRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlRnVuYyk6
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1Bh
cnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQ
YXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1M
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1l
bnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MUGFyc2VyQ29udGV4dDo6flhNTFBhcnNl
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1
bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp0b0F0
b21pY1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVFbGVtZW50QXR0cmlidXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6Y2RhdGFCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNl
cjo6Y29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmludGVybmFsU3Vic2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpoYWNr
QXJvdW5kTGliWE1MRW50aXR5QnVnKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0RWxlbWVudE5z
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjplbmRFbGVtZW50TnNIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNoYXJhY3RlcnNIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nl
c3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2RhdGFCbG9ja0hh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29tbWVudEhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6d2FybmluZ0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmF0YWxFcnJvckhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNoYXJlZFhIVE1MRW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFhIVE1MRW50
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEVudGl0eUhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c3RhcnREb2N1bWVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kRG9jdW1l
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVybmFsU3Vic2V0SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpleHRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6aWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjp4bWxEb2NQdHJG
b3JTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW50aXR5UmVzb2x2ZXI6OnJl
c29sdmVVbmRlY2xhcmVkRW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpzdXBwb3J0c1hNTFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1l
bnRQYXJzZXI6OmRvV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50
UGFyc2VyOjpkb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGlu
ZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbk9uZUJh
c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kRnJhZ21lbnRTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
Zml4RnJvbVFOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUVsZW1lbnROYW1lc3BhY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6c3RhcnREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjplbmREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6aGFzRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OnBhcnNlRHRkKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1l
bnRQYXJzZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlclNjb3Bl
Ojp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSk6CisKIDIwMTEtMDYtMjggIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDU3ODY5NjFmNjg5MGM1ODg2MDRhOTQ1MTlmYjAxZWJmYjM2
NmE0YTMuLmU0YjgzYWY3MTM3YTRmNGVjYWQzNGNlZDU0ZDVhZDEyNmE2YTVmOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC04Myw2ICs4Myw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMgXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3htbCBcCisJ
LUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlciBcCiAJLUkkKHRvcF9idWlsZGRp
cikvV2ViQ29yZS9iaW5kaW5ncy9qcyBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZSBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzIwYmNmMTY0ZmI5YmExODBhYmE1YjUxYTA1MGQ3
YmIzNGQ4OTAyNS4uNTkxMDgwYzVlOTQwNDFhZDUzODhmYTcxZGExZWJkOWJjMjkyOTc4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMzI0LDExICsxMzI0LDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1l
bnRQYXJzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBc
Ci0JU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwIFwKQEAgLTM3OTEsNiArMzc4NiwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuaCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL05hdGl2ZVhQ
YXRoTlNSZXNvbHZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApp
bmRleCBlMzNhYmNlNzZmMGIwMWU0MTcwMDliZmNmOGMxODA3ZjU4ZThkZGUzLi40ZDZlZTRlOWM5
Nzc0MWQ5NGVjMzc5ZTJmNzQyZWI4NzMxMjk5YWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cApAQCAtMjE5LDYgKzIxOSw3IEBACiAgICAgICAnLi4vd2Vic29ja2V0cycs
CiAgICAgICAnLi4vd29ya2VycycsCiAgICAgICAnLi4veG1sJywKKyAgICAgICcuLi94bWwvcGFy
c2VyJywKICAgICBdLAogCiAgICAgJ2JpbmRpbmdzX2lkbF9maWxlcyc6IFsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2FmODhhZjZkOWYwNGVjM2VkLi5iNjc0ZDI2
Y2Y1NjQwNjVjZWRjNmJiNGIwYTA1MDdkYzIyZmQxNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01
NTgsNyArNTU4LDYgQEAKICAgICAgICAgICAgICdkb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuaCcs
CiAgICAgICAgICAgICAnZG9tL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgnLAogICAgICAg
ICAgICAgJ2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oJywKLSAgICAgICAgICAgICdkb20vWE1MRG9j
dW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENv
bW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCcsCkBAIC0yNjM3LDEx
ICsyNjM2LDYgQEAKICAgICAgICAgICAgICdkb20vV2hlZWxFdmVudC5oJywKICAgICAgICAgICAg
ICdkb20vV2luZG93RXZlbnRDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1dpbmRvd0V2
ZW50Q29udGV4dC5oJywKLSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwJywK
LSAgICAgICAgICAgICdkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCcsCi0gICAgICAg
ICAgICAnZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwJywKLSAgICAgICAgICAgICdkb20vWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5jcHAnLAotICAgICAgICAgICAgJ2RvbS9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAnZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5j
cHAnLApAQCAtNjEyNyw2ICs2MTIxLDEyIEBACiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwJywKKyAgICAg
ICAgICAgICd4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcCcsCisgICAgICAgICAgICAn
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oJywKKyAgICAgICAgICAgICd4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAnLAorICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oJywKICAgICAgICAgICAgICd4bWwvRE9NUGFyc2VyLmNwcCcsCiAgICAg
ICAgICAgICAneG1sL0RPTVBhcnNlci5oJywKICAgICAgICAgICAgICd4bWwvTmF0aXZlWFBhdGhO
U1Jlc29sdmVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDhjZTFjNzBmMGY1MDU5YzI0MGRkM2M3
YjkwMzQ0ZDg4NmE2ZmY4Y2QuLjc5MDBmYzA3NzFlMzYwMWRhMTNiNzZlYzM0YzI1ZTVhYmZmNGM2
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0xMTgsNiArMTE4LDcgQEAgV0VCQ09SRV9JTkNMVURFUEFU
SCA9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS93ZWJzb2NrZXRzIFwKICAgICAkJFNPVVJD
RV9ESVIvV2ViQ29yZS93b3JrZXJzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS94bWwgXAor
ICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3htbC9wYXJzZXIgXAogICAgICQkV0VCQ09SRV9JTkNM
VURFUEFUSAogCiBXRUJDT1JFX0lOQ0xVREVQQVRIID0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBiYzEw
NmY2NGU5M2Q4YWYwZjBkOThhYjVmY2RiMWYwNTY2YjAxMTg3Li43ZTRmNDE4MTM3N2I0Y2I3Yjk0
YTUzNDdhMWVkODI2N2UxNzI4ZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTY0LDcgKzU2NCw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIFwKICAgICBk
b20vV2hlZWxFdmVudC5jcHAgXAogICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwIFwKLSAg
ICBkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3Bw
IFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXApAQCAtMTE5Niw3
ICsxMTk1LDggQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAg
ICAgeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAgICAgeG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCi0gICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCisg
ICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyLmNwcCAKIAogSEVBREVSUyArPSBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmggXApAQCAtMTU0Nyw3ICsxNTQ3LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
ZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmggXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZl
bnQuaCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCi0gICAgZG9tL1hNTERvY3VtZW50UGFyc2Vy
LmggXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
IFwKQEAgLTI0OTEsNiArMjQ5MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHdvcmtlcnMvV29ya2Vy
UnVuTG9vcC5oIFwKICAgICB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oIFwKICAgICB3b3Jr
ZXJzL1dvcmtlclRocmVhZC5oIFwKKyAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgg
XAogICAgIHhtbC9ET01QYXJzZXIuaCBcCiAgICAgeG1sL05hdGl2ZVhQYXRoTlNSZXNvbHZlci5o
IFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3QuaCBcCkBAIC0yNTkxLDcgKzI1OTEsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAKIAogIWNvbnRhaW5zKERFRklO
RVMsIFdURl9VU0VfTElCWE1MMj0xKSB7Ci0gICAgU09VUkNFUyArPSBkb20vWE1MRG9jdW1lbnRQ
YXJzZXJRdC5jcHAKKyAgICBTT1VSQ0VTICs9IHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MSkg
ewpAQCAtMzEwMiw4ICszMTAyLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkg
ewogICAgICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuY3BwIFwKICAgICAgICAgICAgIHhtbC9Y
U0xUVW5pY29kZVNvcnQuY3BwIFwKICAgICAgICAgICAgIHhtbC9YTUxUcmVlVmlld2VyLmNwcCBc
Ci0gICAgICAgICAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCi0gICAgICAg
ICAgICBkb20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKyAgICAgICAgICAgIHhtbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBcCisgICAgICAgICAgICB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwCiAKICAgICAgICAgICAgIEhFQURFUlMgKz0gXAog
ICAgICAgICAgICAgICAgIHhtbC9YU0xJbXBvcnRSdWxlLmggXApAQCAtMzExMSw3ICszMTExLDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkgewogICAgICAgICAgICAgICAgIHht
bC9YU0xJbXBvcnRSdWxlLmggXAogICAgICAgICAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQu
aCBcCiAgICAgICAgICAgICAgICAgeG1sL1hNTFRyZWVWaWV3ZXIuaCBcCi0gICAgICAgICAgICAg
ICAgZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorICAgICAgICAgICAgICAgIHhtbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oCiAKICAgICB9IGVsc2UgewogICAgICAgICBTT1VS
Q0VTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNmIzMjgyNzI1MzM4NDY3ZWI0MzFmMWIwM2FiNTI2ZjJjY2QyOWI4Ni4uODlmNmE2NTEy
OTE1NzA2NmZiNmUzOTQyZTViNzdjYjBhYjhlZjQ2MyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyMzEzLDYgKzQyMzEzLDEyNiBAQAogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRVbmljb2RlU29ydC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KKwkJCTxGaWx0ZXIKKwkJCQlOYW1lPSJwYXJzZXIiCisJCQkJPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxEb2N1bWVudFBhcnNlci5jcHAiCisJCQkJ
CT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAor
CQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFy
c2VyXFhNTERvY3VtZW50UGFyc2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlx4bWxccGFyc2VyXFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIgorCQkJCQk+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4K
IAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9ImRvbSIKQEAgLTQ5MTI5LDEyMiArNDky
NDksNiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdpbmRvd0V2ZW50Q29udGV4dC5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1M
RG9jdW1lbnRQYXJzZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJ
TmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCIKLQkJCQk+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8
RmlsdGVyCiAJCQlOYW1lPSJ3b3JrZXJzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzCmluZGV4IGRhNmUyMWZhZWQwODkwZGZlMjkz
NDQ5MWQ0NGNjMWM3YTM1MDVhYzkuLmU5NWI4N2MzOWVlOTJlNmVhZmE1ODlhYzA3M2NiYTZkYzli
MzFjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVD
b21tb24udnNwcm9wcworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
Q29tbW9uLnZzcHJvcHMKQEAgLTcsNyArNyw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJv
amVjdERpcikuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGJyaWRnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGNzcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cZmlsZWFwaSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cmVuZGVyaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcbWF0aG1sJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHJlbmRlcmluZ1xzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJp
bmRpbmdzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xnZW5lcmljJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqcyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cYmluZGluZ3NcanNcc3BlY2lhbGl6YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGRvbSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGhpc3RvcnkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0
bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxodG1sXHBhcnNlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRt
bFxzaGFkb3cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cbG9hZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcYXBwY2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbG9hZGVyXGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxs
b2FkZXJcaWNvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbWF0aG1sJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxub3RpZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxhbmltYXRpb24m
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG1vY2smcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHBsYXRmb3JtXHNxbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrXHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxn
cmFwaGljc1xjYSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
ZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmls
dGVyc1xhcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXG9w
ZW50eXBlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFu
c2Zvcm1zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0JnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0XHRyYW5zY29kZXImcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ceG1sJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcV2Vi
Q29yZVxEZXJpdmVkU291cmNlcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2lucyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2luc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHN2Z1xhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xn
cmFwaGljcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXHByb3BlcnRpZXMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHRlc3RpbmcmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
c3RvcmFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd2Vic29ja2V0cyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cd29ya2VycyZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVk
ZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEph
dmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRl
XHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndh
cmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxzcWxpdGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcemxpYiZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1
ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxhY2Nlc3NpYmlsaXR5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3Np
YmlsaXR5XHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxicmlkZ2VcYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJp
ZGdlXGpzYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cY3NzJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxlZGl0aW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxmaWxlYXBpJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHJlbmRlcmluZ1xtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRl
cmluZ1xzdHlsZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN2ZyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGJpbmRpbmdzXGdlbmVyaWMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdz
XGpzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqc1xzcGVjaWFsaXphdGlv
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxkb21cZGVmYXVsdCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caGlzdG9yeSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
aHRtbFxjYW52YXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxccGFyc2VyJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXHNoYWRvdyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5caW5zcGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXImcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRl
clxhcmNoaXZlXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcY2FjaGUmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxpY29uJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxtYXRobWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG5vdGlmaWNhdGlvbnMm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBhZ2VcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRl
eHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGll
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVz
dGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3Jp
cHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRz
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1b3Q7IgogCQlQcmVwcm9j
ZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVfM0RfUkVOREVSSU5HO1dFQkNPUkVf
Q09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBpbGVk
SGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZCBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKaW5kZXggY2E0ZDhm
MDRmMzYyMTA1ZTU3MmYxNzYxYTY0NTFkZDViMDZlYmRiZC4uZGFkNWFkZjM5MmI2YTdkNzQ3ZTk4
MTY3MWJmMzI5M2EzOWU4OWZmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCkBAIC02Niw2ICs2Niw3IEBAIHhj
b3B5IC95IC9kICIlUHJvamVjdERpciUuLlxyZW5kZXJpbmdcc3R5bGVcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccmVuZGVy
aW5nXHN2Z1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4
Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZWRpdGluZ1wqLmgiICIlQ09ORklHVVJBVElPTkJV
SUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cZG9t
XCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKK3hjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlx4bWxccGFyc2VyXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERE
SVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlx4bWxcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2Qg
IiVQcm9qZWN0RGlyJS4uXHN2Z1xhbmltYXRpb25cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJ
UiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXHN2Z1xwcm9w
ZXJ0aWVzXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBiNzk0MWYwZWI4NGVmZGY3NjA5NDFmZDRiZjk2MDczZGU3MGU1ZDQxLi45MTc1ZmRjMjk4NWE4
NjFmZDAwZGIwNzI0YTBlOWM2ZDM5ZmQ5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw2ICs0OCwxMSBAQAogCQkwMDE0
NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYyODgxMDNDRDFERTAwMEIy
MERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAxNDYyOEIxMDNDRDFERTAw
MEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNj
ZXNzRW50cnkuaCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250
ZW50VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDAwM0YxRkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDBCOTMxODcxM0JBOERC
MzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlci5jcHAgKi87IH07CisJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBY
TUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmgg
Ki87IH07CisJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAg
Ki87IH07CisJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAw
QjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLzsg
fTsKKwkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTg2
MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJCTA1
MkJGQ0U5MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYx
NTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VC
MTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4
RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGlt
ZVN0YW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NUZENjlERjEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzAsNyArMTQzNSw2IEBACiAJ
CTUyMUQ0NkY4MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjcxMUFFQzlCMTAwNTE0NjEzIC8q
IEtpbGxSaW5nLmggKi87IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CiAJCTUz
MjVFNEQ4MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjVFNEQ2MTNBNkM4OEIwMDQwNEEzNiAv
KiBDU1NGbGV4VmFsdWUuaCAqLzsgfTsKLQkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9
OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1OTA1QURCRjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZp
ZXdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
OTA1QURCRDEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgKi87IH07CkBAIC0x
NDgyLDggKzE0ODYsNiBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVv
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0
RjIzMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyODEz
MURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVz
RGF0YS5jcHAgKi87IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYy
NzEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwotCQk1RDE1RTNBQjBGOUU2
QUMxMDA5RTBFM0YgLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0Yg
LyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07Ci0JCTVEMTVFM0FDMEY5RTZBQzEw
MDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDE1RTNBQTBGOUU2QUMxMDA5RTBFM0YgLyogWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5oICovOyB9OwogCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEg
LyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MzkyRDM0MTMyNkFEMDEwMDA0M0QzNSAvKiBIVE1MQ29udmVydGVyLm1tICov
OyB9OwogCQk1RDg3NEYxMzBEMTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNw
cCAqLzsgfTsKIAkJNUQ4N0JCODMxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ4
N0JCODIxMUUzRUQ4NjAwNzAyQjZGIC8qIEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwICovOyB9OwpA
QCAtMzA0Myw3ICszMDQ1LDYgQEAKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlB
QkMgLyogVGV4dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJj
ZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1
cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBT
ZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJD
IC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzA2Niw3ICszMDY3
LDYgQEAKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkw
MDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0
UmVzb3VyY2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8q
IFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07Ci0JCTkzRjE5QUJD
MDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0Eg
LyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQk5M0YxOUFENTA4MjQ1RTU5MDAxRTlB
QkMgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFz
VGV4dC5jcHAgKi87IH07CiAJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2Vw
dGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovOyB9OwogCQk5
M0YxOUFFNjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjJCMjRGMDU2QkYxNUYw
MEQyQjc3MSAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwICovOyB9OwpAQCAtNjQwNyw2ICs2NDA3
LDExIEBACiAJCTAwMTQ2Mjg4MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5BY2Nlc3NFbnRy
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBC
MjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPcmlnaW5BY2Nlc3NFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
MDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVu
dFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTgyMTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwQjkzMTg1MTNC
QTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1M
RG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBY
TUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1
MkJGQ0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNw
cDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNs
aWVudE1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1l
U3RhbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY5LDcgKzc5NzQsNiBAQAogCQk1MjFE
NDZGNzExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMy
NUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzI1RTRENjEzQTZDODhCMDA0MDRBMzYgLyogQ1NTRmxleFZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZsZXhWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVh
bGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTkwNUFEQkQxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MVHJlZVZpZXdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI2LDggKzgwMzAsNiBAQAogCQk1
QTU3NEYyMzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUE1NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHls
ZS9RdW90ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcx
MzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUXVvdGVzRGF0YS5oOyBwYXRoID0gc3R5bGUvUXVvdGVzRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNUQxNUUzQUEwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDRCOEM1MjExRTUyQzhCMDBCQkI2MkYg
LyogV2ViQ29yZS5leHAuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29yZS5leHAuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAv
KiBXZWJDb3JlRXhwb3J0RmlsZUdlbmVyYXRvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZUV4cG9ydEZpbGVHZW5lcmF0b3I7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVEODdCQjgyMTFFM0VEODYwMDcwMkI2RiAv
KiBFeHBvcnRGaWxlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEV4cG9ydEZpbGVHZW5lcmF0b3IuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9FeHBvcnRGaWxlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKQEAgLTEyMzEzLDggKzEyMzE1LDYgQEAKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYz
NUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMw
MkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA0MDJERTQ0NzYw
MTg2MzVDQSAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERv
Y3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMzBBMDJERTQ0NzYw
MTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU1QjNENzkx
MjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjU1QjNEN0ExMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5w
dXRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUZXh0SW5wdXRU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzRDdCMTI1MUYxMkQwMDNF
RjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQnV0dG9uSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyNzAwLDYgKzEyNzAwLDE4IEBACiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwQjkzMTgwMTNC
QTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTAwQjkzMTgxMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi8sCisJCQkJMDBCOTMxODIxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyLmggKi8sCisJCQkJMDBCOTMxODMxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHAgKi8sCisJCQkJMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhN
TERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovLAorCQkJCTAwQjkzMTg2MTNCQTg2N0YwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHBhcnNl
cjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTAzNDc2OERGRkYzOEE1MDQx
MURCOUM4QiAvKiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xODk2Nyw2ICsxODk3OSw3IEBACiAJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRF
QSAvKiB4bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8sCiAJCQkJMUFDRTUzRTEwQThE
MThFNzAwMjI5NDdEIC8qIERPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzRTIwQThEMThFNzAw
MjI5NDdEIC8qIERPTVBhcnNlci5oICovLAogCQkJCTFBQ0U1M0UzMEE4RDE4RTcwMDIyOTQ3RCAv
KiBET01QYXJzZXIuaWRsICovLApAQCAtMTk4MTYsMTEgKzE5ODI5LDYgQEAKIAkJCQk5M0VFQzFG
NzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8sCiAJCQkJNDEyM0U1NjgxMjdC
MzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEyM0U1Njcx
MjdCMzA0MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5oICovLAotCQkJCUY1MjNEMzA5
MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJRjUyM0Qz
MEEwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCi0JCQkJNTRDNTBG
N0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCi0J
CQkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
ICovLAotCQkJCTVEMTVFM0FBMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxEb2N1bWVudFBhcnNlclNj
b3BlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRvbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yMzAzMiw4ICsyMzA0MCw4IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgx
IC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MRG9jdW1lbnRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTVEMTVFM0FDMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEI5MzE4ODEzQkE4REJB
MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwQjkz
MThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNjBEOUM5MEQyQTI5RTUwMEI5OTE4RiAvKiBYTUxIdHRwUmVx
dWVzdEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENBMjAwRDE2
REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTc5Niw5ICsyNTgwNCw5IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5
RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIFhN
TERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU0QzUwRjdCMEU4MDFERjMw
MDk4MzJBMCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNUQxNUUzQUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMDBCOTMxODcxM0JBOERCMzAwMzVBOTQ4IC8qIFhNTERvY3Vt
ZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAwQjkzMTg5MTNCQThEQkMwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDBC
OTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYz
Njk2MzdiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vp
bmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgot
Ci0jaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0j
aW5jbHVkZSAiQ29tbWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJJbWFnZUxvYWRlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVF
bGVtZW50LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1jb25zdCBpbnQgbWF4RXJy
b3JzID0gMjU7Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZShDb250
YWluZXJOb2RlKiBuKQotewotICAgIEFTU0VSVChuKTsKLSAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZSk7Ci0gICAgaWYgKG4gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbi0+cmVmKCk7Ci0gICAgbV9j
dXJyZW50Tm9kZVN0YWNrLmFwcGVuZChtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnROb2Rl
ID0gbjsKLSAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSA+IG1heERPTVRyZWVEZXB0
aCkKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFeGNlc3NpdmUgbm9kZSBuZXN0aW5nLiIs
IGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwb3BDdXJyZW50Tm9kZSgpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnROb2RlKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5zaXplKCkpOwotCi0gICAg
aWYgKG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+
ZGVyZWYoKTsKLQotICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlU3RhY2subGFzdCgp
OwotICAgIG1fY3VycmVudE5vZGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLXZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCi17Ci0gICAgaWYgKG1fY3VycmVu
dE5vZGUgJiYgbV9jdXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQotICAgICAgICBtX2N1cnJlbnRO
b2RlLT5kZXJlZigpOwotICAgIG1fY3VycmVudE5vZGUgPSAwOwotICAgIG1fbGVhZlRleHROb2Rl
ID0gMDsKLQotICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpKSB7IC8vIEFib3J0ZWQg
cGFyc2luZy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fY3VycmVudE5vZGVTdGFjay5zaXpl
KCkgLSAxOyBpICE9IDA7IC0taSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFja1tpXS0+
ZGVyZWYoKTsKLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFja1swXSAmJiBtX2N1cnJlbnRO
b2RlU3RhY2tbMF0gIT0gZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGVTdGFj
a1swXS0+ZGVyZWYoKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrLmNsZWFyKCk7Ci0gICAg
fQotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcykKLXsKLSAgICBTdHJpbmcg
cGFyc2VTdHJpbmcgPSBzLnRvU3RyaW5nKCk7Ci0KLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0g
fHwgIW1fc2F3Rmlyc3RFbGVtZW50KQotICAgICAgICBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtICs9IHBhcnNlU3RyaW5nOwotCi0gICAgaWYgKGlzU3RvcHBlZCgpIHx8IG1fc2F3WFNMVHJh
bnNmb3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAg
ICAgICAgbV9wZW5kaW5nU3JjLmFwcGVuZChzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvV3JpdGUocy50b1N0cmluZygpKTsKLQotICAgIC8vIEFmdGVyIHBhcnNpbmcsIGdvIGFo
ZWFkIGFuZCBkaXNwYXRjaCBpbWFnZSBiZWZvcmVsb2FkIGV2ZW50cy4KLSAgICBJbWFnZUxvYWRl
cjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwotfQotCi12b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgaGFuZGxlRXJyb3IodHlwZSwg
bSwgVGV4dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGlu
ZU51bWJlciksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1i
ZXIpKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKEVycm9yVHlw
ZSB0eXBlLCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKQotewotICAgIGlm
ICh0eXBlID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJy
b3JQb3NpdGlvbi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9yUG9zaXRp
b24ubV9jb2x1bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlcyArPSAid2FybmluZyBvbiBsaW5lICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5t
X2xpbmUub25lQmFzZWRJbnQoKSkgKyAiIGF0IGNvbHVtbiAiICsgU3RyaW5nOjpudW1iZXIocG9z
aXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSkgKyAiOiAiICsgbTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZmF0YWw6Ci0gICAgICAgICAgICBjYXNlIG5vbkZh
dGFsOgotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSAiZXJyb3Igb24gbGluZSAi
ICsgU3RyaW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBj
b2x1bW4gIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkp
ICsgIjogIiArIG07Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xhc3RFcnJvclBvc2l0aW9uID0g
cG9zaXRpb247Ci0gICAgICAgICsrbV9lcnJvckNvdW50OwotICAgIH0KLQotICAgIGlmICh0eXBl
ICE9IHdhcm5pbmcpCi0gICAgICAgIG1fc2F3RXJyb3IgPSB0cnVlOwotCi0gICAgaWYgKHR5cGUg
PT0gZmF0YWwpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmVudGVyVGV4dCgpCi17Ci0jaWYgIVVTRShRWE1MU1RSRUFNKQotICAgIEFTU0VSVCht
X2J1ZmZlcmVkVGV4dC5zaXplKCkgPT0gMCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoIW1fbGVhZlRl
eHROb2RlKTsKLSAgICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCAi
Iik7Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobV9sZWFmVGV4dE5vZGUuZ2V0
KCkpOwotfQotCi0jaWYgIVVTRShRWE1MU1RSRUFNKQotc3RhdGljIGlubGluZSBTdHJpbmcgdG9T
dHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkgCi17IAotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyks
IHNpemUpOyAKLX0KLSNlbmRpZgotCi0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0
KCkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9sZWFmVGV4dE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2xlYWZUZXh0Tm9kZS0+YXBwZW5kRGF0
YSh0b1N0cmluZyhtX2J1ZmZlcmVkVGV4dC5kYXRhKCksIG1fYnVmZmVyZWRUZXh0LnNpemUoKSks
IGVjKTsKLSAgICBWZWN0b3I8eG1sQ2hhcj4gZW1wdHk7Ci0gICAgbV9idWZmZXJlZFRleHQuc3dh
cChlbXB0eSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3ZpZXcgJiYgIW1fbGVhZlRleHROb2RlLT5h
dHRhY2hlZCgpKQotICAgICAgICBtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoKCk7Ci0KLSAgICBtX2xl
YWZUZXh0Tm9kZSA9IDA7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRldGFjaCgpCi17
Ci0gICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyOjpkZXRhY2goKTsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAg
ICAvLyBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIgd2lsbCBkbyBiYWQgdGhpbmdzIHRvIHRoZSBk
b2N1bWVudCBpZiBkb0VuZCgpIGlzIGNhbGxlZC4KLSAgICAvLyBJIGRvbid0IGJlbGlldmUgWE1M
RG9jdW1lbnRQYXJzZXJRdCBuZWVkcyBkb0VuZCBjYWxsZWQgaW4gdGhlIGZyYWdtZW50IGNhc2Uu
Ci0gICAgQVNTRVJUKCFtX3BhcnNpbmdGcmFnbWVudCk7Ci0KLSAgICBkb0VuZCgpOwotCi0gICAg
Ly8gZG9FbmQoKSBjb3VsZCBwcm9jZXNzIGEgc2NyaXB0IHRhZywgdGh1cyBwYXVzaW5nIHBhcnNp
bmcuCi0gICAgaWYgKG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9zYXdFcnJvcikKLSAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgZXhpdFRleHQoKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7Ci0gICAgfQotCi0gICAgaWYgKGlzUGFy
c2luZygpKQotICAgICAgICBwcmVwYXJlVG9TdG9wUGFyc2luZygpOwotICAgIGRvY3VtZW50KCkt
PnNldFJlYWR5U3RhdGUoRG9jdW1lbnQ6OkludGVyYWN0aXZlKTsKLSAgICBjbGVhckN1cnJlbnRO
b2RlU3RhY2soKTsKLSAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IEFTU0VSVCghbV9wYXJzZXJTdG9wcGVkKSBoZXJlLCBzaW5jZSBpdCBkb2VzIG5vdAotICAgIC8v
IG1ha2VzIHNlbnNlIHRvIGNhbGwgYW55IG1ldGhvZHMgb24gRG9jdW1lbnRQYXJzZXIgb25jZSBp
dCdzIGJlZW4gc3RvcHBlZC4KLSAgICAvLyBIb3dldmVyLCBGcmFtZUxvYWRlcjo6c3RvcCBjYWxs
cyBEb2N1bWVudFBhcnNlcjo6ZmluaXNoIHVuY29uZGl0aW9uYWxseS4KLQotICAgIGlmIChtX3Bh
cnNlclBhdXNlZCkKLSAgICAgICAgbV9maW5pc2hDYWxsZWQgPSB0cnVlOwotICAgIGVsc2UKLSAg
ICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxl
ZCgpCi17Ci0gICAgcmV0dXJuIG1fZmluaXNoQ2FsbGVkOwotfQotCi1zdGF0aWMgaW5saW5lIFJl
ZlB0cjxFbGVtZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKERvY3VtZW50KiBkb2Ms
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlcykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4gcmVw
b3J0RWxlbWVudCA9IGRvYy0+Y3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
cGFyc2VyZXJyb3IiLCB4aHRtbE5hbWVzcGFjZVVSSSksIGZhbHNlKTsKLSAgICByZXBvcnRFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNl
OiBwcmU7IGJvcmRlcjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJn
aW46IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6IGJsYWNrIik7Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gaDMgPSBkb2MtPmNyZWF0
ZUVsZW1lbnQoaDNUYWcsIGZhbHNlKTsKLSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZCho
My5nZXQoKSwgZWMpOwotICAgIGgzLT5hcHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKCJU
aGlzIHBhZ2UgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6IiksIGVjKTsKLQotICAgIFJl
ZlB0cjxFbGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsK
LSAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChmaXhlZC5nZXQoKSwgZWMpOwotICAgIGZp
eGVkLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQt
c2l6ZToxMnB4Iik7Ci0gICAgZml4ZWQtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUo
ZXJyb3JNZXNzYWdlcyksIGVjKTsKLQotICAgIGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFn
LCBmYWxzZSk7Ci0gICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsK
LSAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiQmVsb3cgaXMgYSByZW5k
ZXJpbmcgb2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9yLiIpLCBlYyk7Ci0KLSAgICBy
ZXR1cm4gcmVwb3J0RWxlbWVudDsKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0
RXJyb3JNZXNzYWdlQmxvY2soKQotewotI2lmIFVTRShRWE1MU1RSRUFNKQotICAgIGlmIChtX3Bh
cnNpbmdGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgLy8gT25lIG9yIG1v
cmUgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjb2RlLiBEaXNwbGF5IGFu
IGVycm9yIGJsb2NrIHRvIHRoZSB1c2VyIGFib3ZlCi0gICAgLy8gdGhlIG5vcm1hbCBjb250ZW50
ICh0aGUgRE9NIHRyZWUgaXMgY3JlYXRlZCBtYW51YWxseSBhbmQgaW5jbHVkZXMgbGluZS9jb2wg
aW5mbyByZWdhcmRpbmcKLSAgICAvLyB3aGVyZSB0aGUgZXJyb3JzIGFyZSBsb2NhdGVkKQotCi0g
ICAgLy8gQ3JlYXRlIGVsZW1lbnRzIGZvciBkaXNwbGF5Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQ
dHI8RWxlbWVudD4gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwotICAgIGlmICghZG9jdW1lbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBy
b290RWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKLSAg
ICAgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7Ci0gICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFs
c2UpOwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAg
ICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwotICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQot
ICAgIGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6
OnN2Z05hbWVzcGFjZVVSSSkgewotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIFJlZlB0
cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2Up
OwotICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwotICAgICAgICBi
b2R5LT5hcHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQsIGVjKTsKLSAgICAgICAgZG9jdW1lbnQt
PmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Ci0gICAgICAgIGRvY3VtZW50RWxl
bWVudCA9IGJvZHkuZ2V0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHJl
cG9ydEVsZW1lbnQgPSBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKGRvY3VtZW50LCBtX2Vy
cm9yTWVzc2FnZXMpOwotICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVs
ZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7Ci0jaWYgRU5BQkxFKFhT
TFQpCi0gICAgaWYgKGRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChw
VGFnLCBmYWxzZSk7Ci0gICAgICAgIHBhcmFncmFwaC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
IndoaXRlLXNwYWNlOiBub3JtYWwiKTsKLSAgICAgICAgcGFyYWdyYXBoLT5hcHBlbmRDaGlsZChk
b2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhl
IHJlc3VsdCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVt
YmVycyBnaXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpLCBlYyk7Ci0gICAg
ICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKHBhcmFncmFwaC5yZWxlYXNlKCksIGVjKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotfQot
Ci12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSog
dW51c2VkUmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51
c2VkUmVzb3VyY2UgPT0gbV9wZW5kaW5nU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wZW5kaW5nU2Ny
aXB0LT5hY2Nlc3NDb3VudCgpID4gMCk7Ci0KLSAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNv
ZGUobV9wZW5kaW5nU2NyaXB0LmdldCgpKTsKLSAgICBib29sIGVycm9yT2NjdXJyZWQgPSBtX3Bl
bmRpbmdTY3JpcHQtPmVycm9yT2NjdXJyZWQoKTsKLSAgICBib29sIHdhc0NhbmNlbGVkID0gbV9w
ZW5kaW5nU2NyaXB0LT53YXNDYW5jZWxlZCgpOwotCi0gICAgbV9wZW5kaW5nU2NyaXB0LT5yZW1v
dmVDbGllbnQodGhpcyk7Ci0gICAgbV9wZW5kaW5nU2NyaXB0ID0gMDsKLQotICAgIFJlZlB0cjxF
bGVtZW50PiBlID0gbV9zY3JpcHRFbGVtZW50OwotICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0K
LSAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGUuZ2V0
KCkpOwotICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLQotICAgIC8vIEphdmFTY3JpcHQgY2Fu
IGRldGFjaCB0aGlzIHBhcnNlciwgbWFrZSBzdXJlIGl0J3Mga2VwdCBhbGl2ZSBldmVuIGlmIGRl
dGFjaGVkLgotICAgIFJlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKLSAg
ICAKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAgICAgc2NyaXB0RWxlbWVudC0+ZGlzcGF0
Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZSBpZiAoIXdhc0NhbmNlbGVkKSB7Ci0gICAgICAgIHNj
cmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFbGVtZW50
ID0gMDsKLQotICAgIGlmICghaXNEZXRhY2hlZCgpICYmICFtX3JlcXVlc3RpbmdTY3JpcHQpCi0g
ICAgICAgIHJlc3VtZVBhcnNpbmcoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6aXNX
YWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1NjcmlwdDsK
LX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGF1c2VQYXJzaW5nKCkKLXsKLSAgICBpZiAo
bV9wYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyc2VyUGF1c2Vk
ID0gdHJ1ZTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdt
ZW50KGNvbnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCi17Ci0gICAgaWYgKCFjaHVuay5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIEhUTUw1IFhN
TCBGcmFnbWVudCBwYXJzaW5nIGFsZ29yaXRobToKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUteGh0bWwtc3ludGF4
Lmh0bWwjeG1sLWZyYWdtZW50LXBhcnNpbmctYWxnb3JpdGhtCi0gICAgLy8gRm9yIG5vdyB3ZSBo
YXZlIGEgaGFjayBmb3Igc2NyaXB0L3N0eWxlIGlubmVySFRNTCBzdXBwb3J0OgotICAgIGlmIChj
b250ZXh0RWxlbWVudCAmJiAoY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnNjcmlwdFRhZykgfHwgY29udGV4dEVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0
eWxlVGFnKSkpIHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlckFkZENoaWxkKGZyYWdtZW50LT5k
b2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IFhNTERvY3Vt
ZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJt
aXNzaW9uKTsKLSAgICBib29sIHdlbGxGb3JtZWQgPSBwYXJzZXItPmFwcGVuZEZyYWdtZW50U291
cmNlKGNodW5rKTsKLSAgICAvLyBEbyBub3QgY2FsbCBmaW5pc2goKS4gIEN1cnJlbnQgZmluaXNo
KCkgYW5kIGRvRW5kKCkgaW1wbGVtZW50YXRpb25zIHRvdWNoIHRoZSBtYWluIERvY3VtZW50L2xv
YWRlcgotICAgIC8vIGFuZCBjYW4gY2F1c2UgY3Jhc2hlcyBpbiB0aGUgZnJhZ21lbnQgY2FzZS4K
LSAgICBwYXJzZXItPmRldGFjaCgpOyAvLyBBbGxvd3MgfkRvY3VtZW50UGFyc2VyIHRvIGFzc2Vy
dCBpdCB3YXMgZGV0YWNoZWQgYmVmb3JlIGRlc3RydWN0aW9uLgotICAgIHJldHVybiB3ZWxsRm9y
bWVkOyAvLyBhcHBlbmRGcmFnbWVudFNvdXJjZSgpJ3Mgd2VsbEZvcm1lZCBpcyBtb3JlIHBlcm1p
c3NpdmUgdGhhbiB3ZWxsRm9ybWVkKCkuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNhY2RkMjVjNTVkYzAzNWI4ZjMyYTc0MTc1YTQ2ZDk4OWVlYjI3NWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBYTUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gK
LQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIK
LSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi0jaW5jbHVkZSA8cXhtbHN0cmVh
bS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC94
bWxzdHJpbmcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRh
aW5lck5vZGU7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cjsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1l
bnQ7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOwotY2xhc3MgVGV4
dDsKLQotI2lmICFVU0UoUVhNTFNUUkVBTSkKLSAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8WE1MUGFyc2VyQ29udGV4dD4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2Vy
KHhtbFNBWEhhbmRsZXJQdHIsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmlu
Z1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7Ci0gICAgICAgIH5YTUxQ
YXJzZXJDb250ZXh0KCk7Ci0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgWE1MUGFyc2Vy
Q29udGV4dCh4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQpCi0gICAgICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgeG1sUGFyc2VyQ3R4dFB0
ciBtX2NvbnRleHQ7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJz
ZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIHZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsK
LSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4g
Y3JlYXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVu
dCwgcGVybWlzc2lvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgflhNTERvY3VtZW50UGFyc2Vy
KCk7Ci0KLSAgICAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tzOgotICAgICAgICBlbnVtIEVy
cm9yVHlwZSB7IHdhcm5pbmcsIG5vbkZhdGFsLCBmYXRhbCB9OwotICAgICAgICB2b2lkIGhhbmRs
ZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29u
c3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7Ci0KLSAgICAgICAgdm9pZCBzZXRJc1hI
VE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsg
fQotICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRN
TERvY3VtZW50OyB9Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHZvaWQgc2V0SXNYSFRN
TE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1M
OyB9Ci0gICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
WEhUTUxNUERvY3VtZW50OyB9Ci0jZW5kaWYKLQotICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURv
Y3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQq
IHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBi
ZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KLSAgICAgICAgdmlydHVhbCBib29sIHdl
bGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQotCi0gICAgICAgIFRleHRQ
b3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgdGV4
dFBvc2l0aW9uT25lQmFzZWQoKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKLSAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24pOwotCi0gICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKLSAgICAgICAg
dmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmlzaCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7Ci0gICAgICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAgICAg
aW50IGNvbHVtbk51bWJlcigpIGNvbnN0OwotCi0gICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7Ci0KLSAgICAgICAgdm9pZCBlbmQoKTsKLQotICAgICAgICB2b2lkIHBhdXNlUGFyc2lu
ZygpOwotICAgICAgICB2b2lkIHJlc3VtZVBhcnNpbmcoKTsKLQotICAgICAgICBib29sIGFwcGVu
ZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgVVNFKFFYTUxTVFJFQU0pCi1w
cml2YXRlOgotICAgICAgICB2b2lkIHBhcnNlKCk7Ci0gICAgICAgIHZvaWQgc3RhcnREb2N1bWVu
dCgpOwotICAgICAgICB2b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFy
c2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgdm9pZCBwYXJzZUNk
YXRhKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VDb21tZW50KCk7Ci0gICAgICAgIHZvaWQgZW5kRG9j
dW1lbnQoKTsKLSAgICAgICAgdm9pZCBwYXJzZUR0ZCgpOwotICAgICAgICBib29sIGhhc0Vycm9y
KCkgY29uc3Q7Ci0jZWxzZQotcHVibGljOgotICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJz
ZXIgU0FYCi0gICAgICAgIHZvaWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdl
LCB2YV9saXN0IGFyZ3MpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOwotICAgICAgICB2b2lk
IHN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hh
ciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBp
bnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnht
bEF0dHJpYnV0ZXMpOwotICAgICAgICB2b2lkIGVuZEVsZW1lbnROcygpOwotICAgICAgICB2b2lk
IGNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbik7Ci0gICAgICAgIHZvaWQgcHJv
Y2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciog
ZGF0YSk7Ci0gICAgICAgIHZvaWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVu
KTsKLSAgICAgICAgdm9pZCBjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpOwotICAgICAgICB2b2lk
IHN0YXJ0RG9jdW1lbnQoY29uc3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5j
b2RpbmcsIGludCBzdGFuZGFsb25lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25z
dCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFy
KiBzeXN0ZW1JRCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKLSNlbmRpZgotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmlu
ZyYgY2h1bmsgPSBDU3RyaW5nKCkpOwotCi0gICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENv
bnRhaW5lck5vZGUqKTsKLSAgICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICB2
b2lkIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotCi0gICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JN
ZXNzYWdlQmxvY2soKTsKLQotICAgICAgICB2b2lkIGVudGVyVGV4dCgpOwotICAgICAgICB2b2lk
IGV4aXRUZXh0KCk7Ci0KLSAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOwotICAg
ICAgICB2b2lkIGRvRW5kKCk7Ci0KLSAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7Ci0KLSAgICAg
ICAgU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07Ci0KLSNpZiBVU0UoUVhNTFNU
UkVBTSkKLSAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKLSAgICAgICAgYm9vbCBt
X3dyb3RlVGV4dDsKLSNlbHNlCi0gICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKLSAg
ICAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgT3duUHRy
PFBlbmRpbmdDYWxsYmFja3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKLSAgICAgICAgVmVjdG9yPHht
bENoYXI+IG1fYnVmZmVyZWRUZXh0OwotI2VuZGlmCi0gICAgICAgIENvbnRhaW5lck5vZGUqIG1f
Y3VycmVudE5vZGU7Ci0gICAgICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9k
ZVN0YWNrOwotCi0gICAgICAgIFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKLQotICAgICAg
ICBib29sIG1fc2F3RXJyb3I7Ci0gICAgICAgIGJvb2wgbV9zYXdDU1M7Ci0gICAgICAgIGJvb2wg
bV9zYXdYU0xUcmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAg
ICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAg
IGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNs
YXJhdGlvbjsKLSNlbmRpZgotCi0gICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7Ci0gICAgICAg
IGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOwot
Ci0gICAgICAgIGludCBtX2Vycm9yQ291bnQ7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0
RXJyb3JQb3NpdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKLQotICAgICAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKLSAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0RWxlbWVudDsKLSAgICAgICAgVGV4dFBvc2l0
aW9uMSBtX3NjcmlwdFN0YXJ0UG9zaXRpb247Ci0KLSAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFn
bWVudDsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKLQotICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZv
ck5hbWVzcGFjZU1hcDsKLSAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9O
YW1lc3BhY2VNYXA7Ci0gICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7Ci0gICAg
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Ci0g
ICAgfTsKLQotI2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hl
ZFJlc291cmNlTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJs
KTsKLSNlbmRpZgotCi1IYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29u
c3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyZjM5ZmI0ZWM3ZGVlMDcwYTgzNTE1YWUwYzRmNDEwZjZiNzI4NmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgPHBta0Bwb3N0LmNvbT4KLSAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2lu
Y2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2Vy
LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCi0jaW5j
bHVkZSAiWE1MTlNOYW1lcy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIK
LSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVy
bmFscy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShYU0xU
KQotI2luY2x1ZGUgIlhNTFRyZWVWaWV3ZXIuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0jaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1l
bnQuaCIKLSNlbmRpZgotCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGVuZGluZ0NhbGxiYWNrcyk7Ci1wdWJsaWM6Ci0gICAgflBlbmRpbmdDYWxsYmFja3MoKSB7
IH0KLSAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nQ2FsbGJhY2tzPiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2FsbGJhY2tzKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKGNvbnN0IHhtbENo
YXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFy
KiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNlcywgaW50IG5iX2F0dHJpYnV0ZXMs
IGludCBuYl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBhdHRyaWJ1dGVzKQotICAgIHsKLSAg
ICAgICAgT3duUHRyPFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UHRyKG5ldyBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayk7Ci0KLSAgICAgICAgY2Fs
bGJhY2stPnhtbExvY2FsTmFtZSA9IHhtbFN0cmR1cCh4bWxMb2NhbE5hbWUpOwotICAgICAgICBj
YWxsYmFjay0+eG1sUHJlZml4ID0geG1sU3RyZHVwKHhtbFByZWZpeCk7Ci0gICAgICAgIGNhbGxi
YWNrLT54bWxVUkkgPSB4bWxTdHJkdXAoeG1sVVJJKTsKLSAgICAgICAgY2FsbGJhY2stPm5iX25h
bWVzcGFjZXMgPSBuYl9uYW1lc3BhY2VzOwotICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlcyA9
IHN0YXRpY19jYXN0PHhtbENoYXIqKj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9u
YW1lc3BhY2VzICogMikpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX25hbWVzcGFj
ZXMgKiAyIDsgaSsrKQotICAgICAgICAgICAgY2FsbGJhY2stPm5hbWVzcGFjZXNbaV0gPSB4bWxT
dHJkdXAobmFtZXNwYWNlc1tpXSk7Ci0gICAgICAgIGNhbGxiYWNrLT5uYl9hdHRyaWJ1dGVzID0g
bmJfYXR0cmlidXRlczsKLSAgICAgICAgY2FsbGJhY2stPm5iX2RlZmF1bHRlZCA9IG5iX2RlZmF1
bHRlZDsKLSAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXMgPSBzdGF0aWNfY2FzdDx4bWxDaGFy
Kio+KHhtbE1hbGxvYyhzaXplb2YoeG1sQ2hhciopICogbmJfYXR0cmlidXRlcyAqIDUpKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKLSAgICAgICAg
ICAgIC8vIEVhY2ggYXR0cmlidXRlIGhhcyA1IGVsZW1lbnRzIGluIHRoZSBhcnJheToKLSAgICAg
ICAgICAgIC8vIG5hbWUsIHByZWZpeCwgdXJpLCB2YWx1ZSBhbmQgYW4gZW5kIHBvaW50ZXIuCi0K
LSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQotICAgICAgICAgICAgICAg
IGNhbGxiYWNrLT5hdHRyaWJ1dGVzW2kgKiA1ICsgal0gPSB4bWxTdHJkdXAoYXR0cmlidXRlc1tp
ICogNSArIGpdKTsKLQotICAgICAgICAgICAgaW50IGxlbiA9IGF0dHJpYnV0ZXNbaSAqIDUgKyA0
XSAtIGF0dHJpYnV0ZXNbaSAqIDUgKyAzXTsKLQotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJp
YnV0ZXNbaSAqIDUgKyAzXSA9IHhtbFN0cm5kdXAoYXR0cmlidXRlc1tpICogNSArIDNdLCBsZW4p
OwotICAgICAgICAgICAgY2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyA0XSA9IGNhbGxiYWNr
LT5hdHRyaWJ1dGVzW2kgKiA1ICsgM10gKyBsZW47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Nh
bGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFw
cGVuZEVuZEVsZW1lbnROU0NhbGxiYWNrKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChhZG9wdFB0cihuZXcgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxiYWNrKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogcywgaW50
IGxlbikKLSAgICB7Ci0gICAgICAgIE93blB0cjxQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKTsKLQotICAg
ICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsKLSAgICAgICAgY2FsbGJhY2st
PmxlbiA9IGxlbjsKLQotICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFz
ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxi
YWNrKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSkKLSAgICB7Ci0g
ICAgICAgIE93blB0cjxQZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjayk7
Ci0KLSAgICAgICAgY2FsbGJhY2stPnRhcmdldCA9IHhtbFN0cmR1cCh0YXJnZXQpOwotICAgICAg
ICBjYWxsYmFjay0+ZGF0YSA9IHhtbFN0cmR1cChkYXRhKTsKLQotICAgICAgICBtX2NhbGxiYWNr
cy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENE
QVRBQmxvY2tDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotICAgIHsKLSAgICAg
ICAgT3duUHRyPFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIo
bmV3IFBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2spOwotCi0gICAgICAgIGNhbGxiYWNrLT5zID0g
eG1sU3RybmR1cChzLCBsZW4pOwotICAgICAgICBjYWxsYmFjay0+bGVuID0gbGVuOwotCi0gICAg
ICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IHZvaWQgYXBwZW5kQ29tbWVudENhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMpCi0gICAgewotICAg
ICAgICBPd25QdHI8UGVuZGluZ0NvbW1lbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihu
ZXcgUGVuZGluZ0NvbW1lbnRDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPnMgPSB4bWxT
dHJkdXAocyk7Ci0KLSAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKGNvbnN0
IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIq
IHN5c3RlbUlEKQotICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdJbnRlcm5hbFN1YnNldENh
bGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxs
YmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm5hbWUgPSB4bWxTdHJkdXAobmFtZSk7Ci0gICAg
ICAgIGNhbGxiYWNrLT5leHRlcm5hbElEID0geG1sU3RyZHVwKGV4dGVybmFsSUQpOwotICAgICAg
ICBjYWxsYmFjay0+c3lzdGVtSUQgPSB4bWxTdHJkdXAoc3lzdGVtSUQpOwotCi0gICAgICAgIG1f
Y2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQg
YXBwZW5kRXJyb3JDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGUsIGNv
bnN0IHhtbENoYXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQot
ICAgIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdFcnJvckNhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UHRyKG5ldyBQZW5kaW5nRXJyb3JDYWxsYmFjayk7Ci0KLSAgICAgICAgY2FsbGJhY2stPm1l
c3NhZ2UgPSB4bWxTdHJkdXAobWVzc2FnZSk7Ci0gICAgICAgIGNhbGxiYWNrLT50eXBlID0gdHlw
ZTsKLSAgICAgICAgY2FsbGJhY2stPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBj
YWxsYmFjay0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotCi0gICAgICAgIG1fY2FsbGJh
Y2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbEFu
ZFJlbW92ZUZpcnN0Q2FsbGJhY2soWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICB7Ci0g
ICAgICAgIE93blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFr
ZUZpcnN0KCk7Ci0gICAgICAgIGNhbGxiYWNrLT5jYWxsKHBhcnNlcik7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuaXNFbXB0eSgpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgUGVuZGluZ0NhbGxiYWNrcygpIHsgfQotCi0gICAgc3RydWN0IFBlbmRp
bmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDYWxsYmFjaygpIHsgfQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKSA9IDA7Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayA6IHB1Ymxp
YyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nU3RhcnRFbGVtZW50
TlNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sTG9jYWxOYW1l
KTsKLSAgICAgICAgICAgIHhtbEZyZWUoeG1sUHJlZml4KTsKLSAgICAgICAgICAgIHhtbEZyZWUo
eG1sVVJJKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNlcyAq
IDI7IGkrKykKLSAgICAgICAgICAgICAgICB4bWxGcmVlKG5hbWVzcGFjZXNbaV0pOwotICAgICAg
ICAgICAgeG1sRnJlZShuYW1lc3BhY2VzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbmJfYXR0cmlidXRlczsgaSsrKQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgNDsgaisrKQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXNbaSAqIDUg
KyBqXSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcGFyc2VyLT5zdGFydEVsZW1lbnROcyh4bWxMb2NhbE5hbWUsIHht
bFByZWZpeCwgeG1sVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
Yl9uYW1lc3BhY2VzLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4obmFtZXNwYWNlcyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJpYnV0ZXMsIG5iX2Rl
ZmF1bHRlZCwgY29uc3RfY2FzdDxjb25zdCB4bWxDaGFyKio+KGF0dHJpYnV0ZXMpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHhtbENoYXIqIHhtbExvY2FsTmFtZTsKLSAgICAgICAgeG1sQ2hhciog
eG1sUHJlZml4OwotICAgICAgICB4bWxDaGFyKiB4bWxVUkk7Ci0gICAgICAgIGludCBuYl9uYW1l
c3BhY2VzOwotICAgICAgICB4bWxDaGFyKiogbmFtZXNwYWNlczsKLSAgICAgICAgaW50IG5iX2F0
dHJpYnV0ZXM7Ci0gICAgICAgIGludCBuYl9kZWZhdWx0ZWQ7Ci0gICAgICAgIHhtbENoYXIqKiBh
dHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0VuZEVsZW1lbnROU0NhbGxi
YWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxs
KFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNl
ci0+ZW5kRWxlbWVudE5zKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IFBlbmRp
bmdDaGFyYWN0ZXJzQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAg
dmlydHVhbCB+UGVuZGluZ0NoYXJhY3RlcnNDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHhtbEZyZWUocyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChY
TUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXIt
PmNoYXJhY3RlcnMocywgbGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0g
ICAgICAgIGludCBsZW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nUHJvY2Vzc2luZ0lu
c3RydWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKLSAgICAgICAgdmly
dHVhbCB+UGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgeG1sRnJlZSh0YXJnZXQpOwotICAgICAgICAgICAgeG1sRnJlZShkYXRhKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2Vy
KiBwYXJzZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+cHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKHRhcmdldCwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiB0YXJn
ZXQ7Ci0gICAgICAgIHhtbENoYXIqIGRhdGE7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5n
Q0RBVEFCbG9ja0NhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7Ci0gICAgICAgIHZp
cnR1YWwgflBlbmRpbmdDREFUQUJsb2NrQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB4bWxGcmVlKHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1M
RG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKLSAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLT5j
ZGF0YUJsb2NrKHMsIGxlbik7Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDaGFyKiBzOwotICAg
ICAgICBpbnQgbGVuOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ0NvbW1lbnRDYWxsYmFj
ayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nQ29t
bWVudENhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgeG1sRnJlZShzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJz
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+Y29tbWVudChzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHhtbENoYXIqIHM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nSW50
ZXJuYWxTdWJzZXRDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nSW50ZXJuYWxTdWJzZXRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHhtbEZyZWUobmFtZSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGV4dGVybmFsSUQpOwot
ICAgICAgICAgICAgeG1sRnJlZShzeXN0ZW1JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwYXJzZXItPmludGVybmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlE
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHhtbENoYXIqIG5hbWU7Ci0gICAgICAgIHhtbENoYXIq
IGV4dGVybmFsSUQ7Ci0gICAgICAgIHhtbENoYXIqIHN5c3RlbUlEOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGVuZGluZ0Vycm9yQ2FsbGJhY2s6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgewotICAg
ICAgICB2aXJ0dWFsIH5QZW5kaW5nRXJyb3JDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHhtbEZyZWUobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICBw
YXJzZXItPmhhbmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2Up
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXI6OkVycm9yVHlwZSB0eXBlOwotICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwot
ICAgICAgICBpbnQgbGluZU51bWJlcjsKLSAgICAgICAgaW50IGNvbHVtbk51bWJlcjsKLSAgICB9
OwotCi0gICAgRGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKLX07
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW50IGdsb2Jh
bERlc2NyaXB0b3IgPSAwOwotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9hZGVyVGhy
ZWFkID0gMDsKLQotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCi17Ci0gICAgLy8g
T25seSBtYXRjaCBsb2FkcyBpbml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdp
dGhpbiBYTUxEb2N1bWVudFBhcnNlciB0byBhdm9pZAotICAgIC8vIGludGVyZmVyaW5nIHdpdGgg
Y2xpZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFsc28gdXNlIGxpYnhtbDIuICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1MwotICAgIHJldHVybiBYTUxEb2N1bWVudFBh
cnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXIgJiYgY3VycmVudFRocmVhZCgp
ID09IGxpYnhtbExvYWRlclRocmVhZDsKLX0KLQotY2xhc3MgT2Zmc2V0QnVmZmVyIHsKLXB1Ymxp
YzoKLSAgICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBiKSA6IG1fYnVmZmVyKGIp
LCBtX2N1cnJlbnRPZmZzZXQoMCkgeyB9Ci0KLSAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIqIG91
dHB1dEJ1ZmZlciwgdW5zaWduZWQgYXNrZWRUb1JlYWQpCi0gICAgewotICAgICAgICB1bnNpZ25l
ZCBieXRlc0xlZnQgPSBtX2J1ZmZlci5zaXplKCkgLSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAg
IHVuc2lnbmVkIGxlblRvQ29weSA9IG1pbihhc2tlZFRvUmVhZCwgYnl0ZXNMZWZ0KTsKLSAgICAg
ICAgaWYgKGxlblRvQ29weSkgewotICAgICAgICAgICAgbWVtY3B5KG91dHB1dEJ1ZmZlciwgbV9i
dWZmZXIuZGF0YSgpICsgbV9jdXJyZW50T2Zmc2V0LCBsZW5Ub0NvcHkpOwotICAgICAgICAgICAg
bV9jdXJyZW50T2Zmc2V0ICs9IGxlblRvQ29weTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bGVuVG9Db3B5OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7
Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50T2Zmc2V0OwotfTsKLQotc3RhdGljIHZvaWQgc3dpdGNo
VG9VVEYxNih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCi17Ci0gICAgLy8gSGFjayBhcm91bmQgbGli
eG1sMidzIGxhY2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1hbnVhbGx5Ci0gICAg
Ly8gcmVzZXR0aW5nIHRoZSBlbmNvZGluZyB0byBVVEYtMTYgYmVmb3JlIGV2ZXJ5IGNodW5rLiAg
T3RoZXJ3aXNlIGxpYnhtbAotICAgIC8vIHdpbGwgZGV0ZWN0IDw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IjxlbmNvZGluZyBuYW1lPiI/PiBibG9ja3MKLSAgICAvLyBhbmQgc3dpdGNoIGVu
Y29kaW5ncywgY2F1c2luZyB0aGUgcGFyc2UgdG8gZmFpbC4KLSAgICBjb25zdCBVQ2hhciBCT00g
PSAweEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICB4bWxTd2l0Y2hFbmNv
ZGluZyhjdHh0LCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZM
RSA6IFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkUpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRB
bGxvd0V4dGVybmFsTG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHVybC5zdHJpbmcoKTsKLQotICAgIC8vIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBsaWJ4
bWwgYXNrcyBmb3IgdGhpcyBVUkwsIHRoZQotICAgIC8vICJYTUxfWE1MX0RFRkFVTFRfQ0FUQUxP
RyIsIG9uIGluaXRpYWxpemF0aW9uLgotICAgIGlmICh1cmxTdHJpbmcgPT0gImZpbGU6Ly8vZXRj
L3htbC9jYXRhbG9nIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT24gV2luZG93
cywgbGlieG1sIGNvbXB1dGVzIGEgVVJMIHJlbGF0aXZlIHRvIHdoZXJlIGl0cyBETEwgcmVzaWRl
cy4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIiwgZmFsc2UpICYmIHVy
bFN0cmluZy5lbmRzV2l0aCgiL2V0Yy9jYXRhbG9nIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBUaGUgbW9zdCBjb21tb24gRFRELiAgVGhlcmUgaXNuJ3QgbXVjaCBw
b2ludCBpbiBoYW1tZXJpbmcgd3d3LnczYy5vcmcKLSAgICAvLyBieSByZXF1ZXN0aW5nIHRoaXMg
VVJMIGZvciBldmVyeSBYSFRNTCBkb2N1bWVudC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dp
dGgoImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sIiwgZmFsc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBTaW1pbGFybHksIHRoZXJlIGlzbid0IG11Y2ggcG9pbnQgaW4gcmVx
dWVzdGluZyB0aGUgU1ZHIERURC4KLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImh0dHA6
Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRyIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlIGxpYnhtbCBkb2Vzbid0IGdpdmUgdXMgYSBsb3Qgb2YgY29udGV4dCBm
b3IgZGVjaWRpbmcgd2hldGhlciB0bwotICAgIC8vIGFsbG93IHRoaXMgcmVxdWVzdC4gIEluIHRo
ZSB3b3JzdCBjYXNlLCB0aGlzIGxvYWQgY291bGQgYmUgZm9yIGFuCi0gICAgLy8gZXh0ZXJuYWwg
ZW50aXR5IGFuZCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGNvdWxkIHNpbXBseSByZWFkIHRoZQot
ICAgIC8vIHJldHJpZXZlZCBjb250ZW50LiAgSWYgd2UgaGFkIG1vcmUgY29udGV4dCwgd2UgY291
bGQgcG90ZW50aWFsbHkgYWxsb3cKLSAgICAvLyB0aGUgcGFyc2VyIHRvIGxvYWQgYSBEVEQuICBB
cyB0aGluZ3Mgc3RhbmQsIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIHJvdXRlIGFu
ZCBhbGxvdyBzYW1lLW9yaWdpbiByZXF1ZXN0cyBvbmx5LgotICAgIGlmICghWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1l
c3NhZ2UodXJsKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQotewotICAg
IEFTU0VSVChYTUxEb2N1bWVudFBhcnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOwotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbGlieG1sTG9hZGVyVGhyZWFkKTsK
LQotICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKLQotICAgIGlmICghc2hvdWxkQWxsb3dFeHRl
cm5hbExvYWQodXJsKSkKLSAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOwotCi0gICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAg
IFZlY3RvcjxjaGFyPiBkYXRhOwotCi0KLSAgICB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJl
bnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBz
Y29wZSgwKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIHRoZSBvcmlnaW5h
bCBnbG9iYWwgZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgotCi0gICAgICAgIGlmIChjYWNoZWRSZXNv
dXJjZUxvYWRlci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5m
cmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgfQotCi0gICAgLy8g
V2UgaGF2ZSB0byBjaGVjayB0aGUgVVJMIGFnYWluIGFmdGVyIHRoZSBsb2FkIHRvIGNhdGNoIHJl
ZGlyZWN0cy4KLSAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTk2Mz4uCi0gICAgaWYgKCFzaG91bGRBbGxvd0V4dGVybmFsTG9hZChyZXNwb25zZS51
cmwoKSkpCi0gICAgICAgIHJldHVybiAmZ2xvYmFsRGVzY3JpcHRvcjsKLQotICAgIHJldHVybiBu
ZXcgT2Zmc2V0QnVmZmVyKGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJlYWRGdW5jKHZvaWQqIGNv
bnRleHQsIGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICAvLyBEbyAwLWJ5dGUgcmVhZHMg
aW4gY2FzZSBvZiBhIG51bGwgZGVzY3JpcHRvcgotICAgIGlmIChjb250ZXh0ID09ICZnbG9iYWxE
ZXNjcmlwdG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE9mZnNldEJ1ZmZlciogZGF0YSA9
IHN0YXRpY19jYXN0PE9mZnNldEJ1ZmZlcio+KGNvbnRleHQpOwotICAgIHJldHVybiBkYXRhLT5y
ZWFkT3V0Qnl0ZXMoYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IHdyaXRlRnVuYyh2b2lk
KiwgY29uc3QgY2hhciosIGludCkKLXsKLSAgICAvLyBBbHdheXMganVzdCBkbyAwLWJ5dGUgd3Jp
dGVzCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xvc2VGdW5jKHZvaWQqIGNvbnRl
eHQpCi17Ci0gICAgaWYgKGNvbnRleHQgIT0gJmdsb2JhbERlc2NyaXB0b3IpIHsKLSAgICAgICAg
T2Zmc2V0QnVmZmVyKiBkYXRhID0gc3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7
Ci0gICAgICAgIGRlbGV0ZSBkYXRhOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVO
QUJMRShYU0xUKQotc3RhdGljIHZvaWQgZXJyb3JGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgLi4u
KQotewotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRpc3BsYXkgZXJyb3IgbWVz
c2FnZXMgc29tZXdoZXJlLgotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGRpZEluaXQgPSBmYWxz
ZTsKLQotUGFzc1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQYXJzZXJDb250ZXh0OjpjcmVh
dGVTdHJpbmdQYXJzZXIoeG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlckRhdGEp
Ci17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJzZXIoKTsKLSAgICAg
ICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFkRnVu
YywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MobWF0Y2hG
dW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAgICBsaWJ4bWxMb2Fk
ZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQgPSB0cnVlOwotICAg
IH0KLQotICAgIHhtbFBhcnNlckN0eHRQdHIgcGFyc2VyID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0
eHQoaGFuZGxlcnMsIDAsIDAsIDAsIDApOwotICAgIHBhcnNlci0+X3ByaXZhdGUgPSB1c2VyRGF0
YTsKLSAgICBwYXJzZXItPnJlcGxhY2VFbnRpdGllcyA9IHRydWU7Ci0gICAgc3dpdGNoVG9VVEYx
NihwYXJzZXIpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250ZXh0KHBh
cnNlcikpOwotfQotCi0KLS8vIENodW5rIHNob3VsZCBiZSBlbmNvZGVkIGluIFVURi04Ci1QYXNz
UmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBh
cnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgQ1N0
cmluZyYgY2h1bmspCi17Ci0gICAgaWYgKCFkaWRJbml0KSB7Ci0gICAgICAgIHhtbEluaXRQYXJz
ZXIoKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5G
dW5jLCByZWFkRnVuYywgY2xvc2VGdW5jKTsKLSAgICAgICAgeG1sUmVnaXN0ZXJPdXRwdXRDYWxs
YmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgd3JpdGVGdW5jLCBjbG9zZUZ1bmMpOwotICAgICAg
ICBsaWJ4bWxMb2FkZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRpZEluaXQg
PSB0cnVlOwotICAgIH0KLQotICAgIC8vIGFwcGVuZEZyYWdtZW50U291cmNlKCkgY2hlY2tzIHRo
YXQgdGhlIGxlbmd0aCBkb2Vzbid0IG92ZXJmbG93IGFuIGludC4KLSAgICB4bWxQYXJzZXJDdHh0
UHRyIHBhcnNlciA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoY2h1bmsuZGF0YSgpLCBjaHVu
ay5sZW5ndGgoKSk7Ci0KLSAgICBpZiAoIXBhcnNlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBDb3B5IHRoZSBzYXggaGFuZGxlcgotICAgIG1lbWNweShwYXJzZXItPnNheCwgaGFuZGxl
cnMsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7Ci0KLSAgICAvLyBTZXQgcGFyc2VyIG9wdGlvbnMu
Ci0gICAgLy8gWE1MX1BBUlNFX05PRElDVDogZGVmYXVsdCBkaWN0aW9uYXJ5IG9wdGlvbi4KLSAg
ICAvLyBYTUxfUEFSU0VfTk9FTlQ6IGZvcmNlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMuCi0gICAg
eG1sQ3R4dFVzZU9wdGlvbnMocGFyc2VyLCBYTUxfUEFSU0VfTk9ESUNUIHwgWE1MX1BBUlNFX05P
RU5UKTsKLQotICAgIC8vIEludGVybmFsIGluaXRpYWxpemF0aW9uCi0gICAgcGFyc2VyLT5zYXgy
ID0gMTsKLSAgICBwYXJzZXItPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7IC8vIFdlIGFy
ZSBwYXJzaW5nIGEgQ09OVEVOVAotICAgIHBhcnNlci0+ZGVwdGggPSAwOwotICAgIHBhcnNlci0+
c3RyX3htbCA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sIiwgMyk7
Ci0gICAgcGFyc2VyLT5zdHJfeG1sbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgQkFE
X0NBU1QgInhtbG5zIiwgNSk7Ci0gICAgcGFyc2VyLT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1
cChwYXJzZXItPmRpY3QsIFhNTF9YTUxfTkFNRVNQQUNFLCAzNik7Ci0gICAgcGFyc2VyLT5fcHJp
dmF0ZSA9IHVzZXJEYXRhOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxQYXJzZXJDb250
ZXh0KHBhcnNlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1ib29sIFhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQotewotICAgIHJldHVybiB2ZXJzaW9uID09ICIxLjAiOwotfQotCi1YTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZp
ZXcqIGZyYW1lVmlldykKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkK
LSAgICAsIG1fdmlldyhmcmFtZVZpZXcpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fcGVu
ZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKLSAgICAsIG1fY3VycmVu
dE5vZGUoZG9jdW1lbnQpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQotICAgICwgbV9zYXdDU1Mo
ZmFsc2UpCi0gICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKLSAgICAsIG1fc2F3Rmlyc3RF
bGVtZW50KGZhbHNlKQotICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCi0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQotICAgICwgbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcGFyc2VyUGF1c2VkKGZh
bHNlKQotICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQotICAgICwgbV9maW5pc2hDYWxs
ZWQoZmFsc2UpCi0gICAgLCBtX2Vycm9yQ291bnQoMCkKLSAgICAsIG1fbGFzdEVycm9yUG9zaXRp
b24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BlbmRpbmdT
Y3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxv
d1JhbmdlUG9zaXRpb24oKSkKLSAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQotICAgICwg
bV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLX0KLQot
WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihm
cmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV9jb250ZXh0KDAp
Ci0gICAgLCBtX3BlbmRpbmdDYWxsYmFja3MoUGVuZGluZ0NhbGxiYWNrczo6Y3JlYXRlKCkpCi0g
ICAgLCBtX2N1cnJlbnROb2RlKGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAg
ICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAg
LCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNl
KQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkK
LSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Bh
cnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAs
IG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xh
c3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAg
ICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBv
c2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0
cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi17
Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0gICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24g
dGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hp
bGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVt
ZW50KTsKLQotICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50
Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFzdCgpOyAhZWxl
bVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewotICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9PSB4bWxuc0F0b20pCi0gICAg
ICAgICAgICAgICAgICAgIG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuc2V0KGF0dHItPmxvY2FsTmFt
ZSgpLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBub3QgaW4gZG9jdW1lbnQgdHJlZSwgdGhl
cmUgbWF5IGJlIG5vIHhtbG5zIGF0dHJpYnV0ZTsganVzdCBkZWZhdWx0IHRvIHRoZSBwYXJlbnQn
cyBuYW1lc3BhY2UuCi0gICAgaWYgKG1fZGVmYXVsdE5hbWVzcGFjZVVSSS5pc051bGwoKSAmJiAh
cGFyZW50RWxlbWVudC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VV
UkkgPSBwYXJlbnRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0KLQotWE1MUGFyc2VyQ29udGV4
dDo6flhNTFBhcnNlckNvbnRleHQoKQotewotICAgIGlmIChtX2NvbnRleHQtPm15RG9jKQotICAg
ICAgICB4bWxGcmVlRG9jKG1fY29udGV4dC0+bXlEb2MpOwotICAgIHhtbEZyZWVQYXJzZXJDdHh0
KG1fY29udGV4dCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIo
KQotewotICAgIC8vIFRoZSBYTUxEb2N1bWVudFBhcnNlciB3aWxsIGFsd2F5cyBiZSBkZXRhY2hl
ZCBiZWZvcmUgYmVpbmcgZGVzdHJveWVkLgotICAgIEFTU0VSVChtX2N1cnJlbnROb2RlU3RhY2su
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotCi0gICAgLy8gRklYTUU6
IG1fcGVuZGluZ1NjcmlwdCBoYW5kbGluZyBzaG91bGQgYmUgbW92ZWQgaW50byBYTUxEb2N1bWVu
dFBhcnNlci5jcHAhCi0gICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgbV9wZW5kaW5n
U2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OmRvV3JpdGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKLXsKLSAgICBBU1NFUlQoIWlzRGV0
YWNoZWQoKSk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIGluaXRpYWxpemVQYXJzZXJD
b250ZXh0KCk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBsaWJ4bWwgY29udGV4dCBmcm9tIGRlbGV0
aW9uIGR1cmluZyBhIGNhbGxiYWNrCi0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNvbnRl
eHQgPSBtX2NvbnRleHQ7Ci0KLSAgICAvLyBsaWJYTUwgdGhyb3dzIGFuIGVycm9yIGlmIHlvdSB0
cnkgdG8gc3dpdGNoIHRoZSBlbmNvZGluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIGlmIChw
YXJzZVN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBjYXVzZSB0
aGUgcGFyc2VyIHRvIGRldGFjaCBkdXJpbmcgeG1sUGFyc2VDaHVuawotICAgICAgICAvLyBrZWVw
IHRoaXMgYWxpdmUgdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBkb25lLgotICAgICAgICBSZWZQdHI8
WE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgc3dpdGNoVG9VVEYx
Nihjb250ZXh0LT5jb250ZXh0KCkpOwotICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNj
b3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgICAgICB4bWxQYXJz
ZUNodW5rKGNvbnRleHQtPmNvbnRleHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
cGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgc2l6ZW9mKFVDaGFyKSAqIHBhcnNlU3RyaW5nLmxl
bmd0aCgpLCAwKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0ICh3aGljaCBtYXkgYmUgcnVuIHVu
ZGVyIHRoZSB4bWxQYXJzZUNodW5rIGNhbGxzdGFjaykgbWF5Ci0gICAgICAgIC8vIGNhdXNlIHRo
ZSBwYXJzZXIgdG8gYmUgc3RvcHBlZCBvciBkZXRhY2hlZC4KLSAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBoZXJlPyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291
cmNlPwotICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2Rl
cigpLT5zYXdFcnJvcigpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJv
ciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQotICAgICAgICBoYW5kbGVFcnJv
cihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGlu
ZSwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oc3RyaW5nKSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5n
KGNvbnN0IHhtbENoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSBB
dG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nKQotewotICAg
IHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHN0cmluZykpOwotfQotCi1zdHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgewotICAgIGNvbnN0
IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFyKiB1cmk7Ci19OwotdHlwZWRlZiBz
dHJ1Y3QgX3htbFNBWDJOYW1lc3BhY2UgeG1sU0FYMk5hbWVzcGFjZTsKLQotc3RhdGljIGlubGlu
ZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1lbnQqIG5ld0VsZW1lbnQsIGNvbnN0
IHhtbENoYXIqKiBsaWJ4bWxOYW1lc3BhY2VzLCBpbnQgbmJfbmFtZXNwYWNlcywgRXhjZXB0aW9u
Q29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQotewotICAgIHhtbFNBWDJOYW1lc3BhY2UqIG5hbWVzcGFjZXMgPSByZWludGVycHJldF9jYXN0
PHhtbFNBWDJOYW1lc3BhY2UqPihsaWJ4bWxOYW1lc3BhY2VzKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG5iX25hbWVzcGFjZXM7IGkrKykgewotICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNw
YWNlUU5hbWUgPSB4bWxuc0F0b207Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkg
PSB0b0F0b21pY1N0cmluZyhuYW1lc3BhY2VzW2ldLnVyaSk7Ci0gICAgICAgIGlmIChuYW1lc3Bh
Y2VzW2ldLnByZWZpeCkKLSAgICAgICAgICAgIG5hbWVzcGFjZVFOYW1lID0gInhtbG5zOiIgKyB0
b1N0cmluZyhuYW1lc3BhY2VzW2ldLnByZWZpeCk7Ci0gICAgICAgIG5ld0VsZW1lbnQtPnNldEF0
dHJpYnV0ZU5TKFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VRTmFtZSwg
bmFtZXNwYWNlVVJJLCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykg
Ly8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLX0KLQotc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB7Ci0gICAgY29uc3QgeG1sQ2hhciog
bG9jYWxuYW1lOwotICAgIGNvbnN0IHhtbENoYXIqIHByZWZpeDsKLSAgICBjb25zdCB4bWxDaGFy
KiB1cmk7Ci0gICAgY29uc3QgeG1sQ2hhciogdmFsdWU7Ci0gICAgY29uc3QgeG1sQ2hhciogZW5k
OwotfTsKLXR5cGVkZWYgc3RydWN0IF94bWxTQVgyQXR0cmlidXRlcyB4bWxTQVgyQXR0cmlidXRl
czsKLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQq
IG5ld0VsZW1lbnQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzLCBpbnQgbmJfYXR0
cmlidXRlcywgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIHhtbFNBWDJBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVz
ID0gcmVpbnRlcnByZXRfY2FzdDx4bWxTQVgyQXR0cmlidXRlcyo+KGxpYnhtbEF0dHJpYnV0ZXMp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfYXR0cmlidXRlczsgaSsrKSB7Ci0gICAgICAg
IGludCB2YWx1ZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlidXRlc1tpXS5lbmQgLSBh
dHRyaWJ1dGVzW2ldLnZhbHVlKTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJWYWx1ZSA9IHRv
QXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udmFsdWUsIHZhbHVlTGVuZ3RoKTsKLSAgICAgICAg
U3RyaW5nIGF0dHJQcmVmaXggPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnByZWZpeCk7Ci0gICAg
ICAgIEF0b21pY1N0cmluZyBhdHRyVVJJID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBBdG9taWNT
dHJpbmcoKSA6IHRvQXRvbWljU3RyaW5nKGF0dHJpYnV0ZXNbaV0udXJpKTsKLSAgICAgICAgQXRv
bWljU3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gdG9BdG9taWNTdHJp
bmcoYXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpIDogYXR0clByZWZpeCArICI6IiArIHRvU3RyaW5n
KGF0dHJpYnV0ZXNbaV0ubG9jYWxuYW1lKTsKLQotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRy
aWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMsIHNjcmlwdGluZ1Blcm1p
c3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OnN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hh
ciogeG1sUHJlZml4LCBjb25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxO
YW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1s
Q2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5n
Q2FsbGJhY2tzLT5hcHBlbmRTdGFydEVsZW1lbnROU0NhbGxiYWNrKHhtbExvY2FsTmFtZSwgeG1s
UHJlZml4LCB4bWxVUkksIG5iX25hbWVzcGFjZXMsIGxpYnhtbE5hbWVzcGFjZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRy
aWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgLy8gY2hlY2sgaWYgdGhlIERPQ1RZ
UEUgRGVjbGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudCBleGlzdHMKLSAgICBpZiAoIW1faGFz
RG9jVHlwZURlY2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIHsK
LSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwg
bGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0g
dG9BdG9taWNTdHJpbmcoeG1sTG9jYWxOYW1lKTsKLSAgICBBdG9taWNTdHJpbmcgdXJpID0gdG9B
dG9taWNTdHJpbmcoeG1sVVJJKTsKLSAgICBBdG9taWNTdHJpbmcgcHJlZml4ID0gdG9BdG9taWNT
dHJpbmcoeG1sUHJlZml4KTsKLQotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNO
dWxsKCkpIHsKLSAgICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkpCi0gICAgICAgICAgICB1cmkg
PSBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwLmdldChwcmVmaXgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KFhIVE1MTVApCi0gICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVu
dCgpKSB7Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRN
TE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCi0gICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUg
dGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAotICAgICAgICAvLyBlbnN1
cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAn
aHRtbCcKLSAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcK
LSAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkp
IHsKLSAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBl
Y3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJpLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBib29sIGlzRmlyc3RFbGVtZW50
ID0gIW1fc2F3Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKLQot
ICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7Ci0gICAgUmVm
UHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1l
LCB0cnVlKTsKLSAgICBpZiAoIW5ld0VsZW1lbnQpIHsKLSAgICAgICAgc3RvcFBhcnNpbmcoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0KCksIGxpYnhtbE5hbWVzcGFj
ZXMsIG5iX25hbWVzcGFjZXMsIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGlmIChl
YykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sQXR0cmli
dXRlcywgbmJfYXR0cmlidXRlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBuZXdFbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgU2NyaXB0RWxl
bWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsK
LSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0g
dGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQu
Z2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAg
ICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50Lmdl
dCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcGFyc2luZ0Zy
YWdtZW50ICYmIGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2
YWlsYWJsZSgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQot
ewotICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFy
c2VyUGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRW5kRWxlbWVu
dE5TQ2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEphdmFTY3Jp
cHQgY2FuIGRldGFjaCB0aGUgcGFyc2VyLiAgTWFrZSBzdXJlIHRoaXMgaXMgbm90IHJlbGVhc2Vk
Ci0gICAgLy8gYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPFhNTERv
Y3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJy
ZW50Tm9kZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUo
ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2Rl
KCkgfHwgIW1fdmlldykgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVh
ZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCi0gICAgLy8gUGFyc2luZyBjb250aW51ZXMg
aW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVt
ZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Nj
cmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAg
IHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEb24n
dCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93
KS4KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0
ID0gdHJ1ZTsKLQotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50
LT5wcmVwYXJlU2NyaXB0KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxs
b3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKLSAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBh
cmVkKSB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+
aXNTY3JpcHRUeXBlU3VwcG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlw
ZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9z
Y3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklY
TUU6IFNjcmlwdCBleGVjdXRpb24gc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuCi0gICAgICAgIC8v
IHRoZSBsaWJ4bWwyIGFuZCBRdCBYTUxEb2N1bWVudFBhcnNlciBpbXBsZW1lbnRhdGlvbnMuCi0K
LSAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0g
ICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxC
ZVBhcnNlckV4ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlw
dEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
ZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwot
Ci0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMg
YWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgpIGV4ZWN1dGVkIGl0LgotICAgICAgICAgICAg
aWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotCi0gICAgICAg
IC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgotICAgICAgICBpZiAo
aXNEZXRhY2hlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlcXVlc3Rp
bmdTY3JpcHQgPSBmYWxzZTsKLSAgICBwb3BDdXJyZW50Tm9kZSgpOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0g
ICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQ
YXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDaGFyYWN0ZXJzQ2Fs
bGJhY2socywgbGVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9sZWFm
VGV4dE5vZGUpCi0gICAgICAgIGVudGVyVGV4dCgpOwotICAgIG1fYnVmZmVyZWRUZXh0LmFwcGVu
ZChzLCBsZW4pOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjplcnJvcihFcnJvclR5cGUg
dHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQotewotICAgIGlmIChpc1N0
b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQ09NUElMRVIoTVNWQykgfHwgQ09NUElM
RVIoUlZDVCkgfHwgQ09NUElMRVIoTUlOR1cpCi0gICAgY2hhciBtWzEwMjRdOwotICAgIHZzbnBy
aW50ZihtLCBzaXplb2YobSkgLSAxLCBtZXNzYWdlLCBhcmdzKTsKLSNlbHNlCi0gICAgY2hhciog
bTsKLSAgICBpZiAodmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdzKSA9PSAtMSkKLSAgICAgICAg
cmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpCi0gICAgICAgIG1fcGVu
ZGluZ0NhbGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKLQotI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIUNP
TVBJTEVSKE1JTkdXKQotICAgIGZyZWUobSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29u
c3QgeG1sQ2hhciogZGF0YSkKLXsKLSAgICBpZiAoaXNTdG9wcGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3BhcnNlclBhdXNlZCkgewotICAgICAgICBtX3BlbmRpbmdDYWxsYmFj
a3MtPmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKHRhcmdldCwgZGF0YSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhh
bmRsZSBleGNlcHRpb25zCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oCi0gICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBlYyk7
Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwaS0+c2V0Q3JlYXRlZEJ5UGFy
c2VyKHRydWUpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQocGkuZ2V0KCkp
OwotICAgIGlmIChtX3ZpZXcgJiYgIXBpLT5hdHRhY2hlZCgpKQotICAgICAgICBwaS0+YXR0YWNo
KCk7Ci0KLSAgICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0KLSAgICBpZiAocGktPmlz
Q1NTKCkpCi0gICAgICAgIG1fc2F3Q1NTID0gdHJ1ZTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBt
X3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAg
ICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIWRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZURv
Y3VtZW50KCkpCi0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewot
ICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKSB7Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kQ0RBVEFCbG9ja0Nh
bGxiYWNrKHMsIGxlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgp
OwotCi0gICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3Jl
YXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwotICAgIG1fY3VycmVudE5vZGUtPnBh
cnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUt
PmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjb21tZW50KGNvbnN0IHhtbENoYXIqIHMpCi17Ci0gICAgaWYgKGlzU3Rv
cHBlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAg
ICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDb21tZW50Q2FsbGJhY2socyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBleGl0VGV4dCgpOwotCi0gICAgUmVmUHRyPENvbW1l
bnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwot
ICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlm
IChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFj
aCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KGNvbnN0IHht
bENoYXIqIHZlcnNpb24sIGNvbnN0IHhtbENoYXIqIGVuY29kaW5nLCBpbnQgc3RhbmRhbG9uZSkK
LXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlmICh2ZXJzaW9uKQotICAgICAg
ICBkb2N1bWVudCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZlcnNpb24pLCBlYyk7Ci0gICAg
ZG9jdW1lbnQoKS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25lID09IDEsIGVjKTsgLy8gcG9z
c2libGUgdmFsdWVzIGFyZSAwLCAxLCBhbmQgLTEKLSAgICBpZiAoZW5jb2RpbmcpCi0gICAgICAg
IGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7Ci19Ci0KLXZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKLXsKLSAgICBleGl0VGV4dCgpOwot
I2lmIEVOQUJMRShYSFRNTE1QKQotICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW50ZXJuYWxTdWJzZXQoY29u
c3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hh
ciogc3lzdGVtSUQpCi17Ci0gICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9wYXJzZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5h
cHBlbmRJbnRlcm5hbFN1YnNldENhbGxiYWNrKG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkb2N1bWVudCgpKSB7Ci0jaWYgRU5B
QkxFKFhIVE1MTVApCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQp
OwotICAgICAgICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5hbWUpOwotICAgICAgICBpZiAo
ZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iCi0gICAgICAg
ICAgICB8fCBleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIp
IHsKLSAgICAgICAgICAgIGlmIChkdGROYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5h
bWUoKSkgewotICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NU
WVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVO
dW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwotCi0g
ICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSNl
bmRpZgotCi0gICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3VtZW50VHlwZTo6
Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwg
dG9TdHJpbmcoc3lzdGVtSUQpKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIFhNTERvY3Vt
ZW50UGFyc2VyKiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0
UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8WE1MRG9jdW1lbnRQYXJzZXIqPihjdHh0LT5fcHJpdmF0ZSk7Ci19
Ci0KLS8vIFRoaXMgaXMgYSBoYWNrIGFyb3VuZCBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTkyMTkKLS8vIE90aGVyd2lzZSBsaWJ4bWwgc2VlbXMgdG8gY2FsbCBh
bGwgdGhlIFNBWCBjYWxsYmFja3MgdHdpY2UgZm9yIGFueSByZXBsYWNlZCBlbnRpdHkuCi1zdGF0
aWMgaW5saW5lIGJvb2wgaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1Zyh2b2lkKiBjbG9zdXJlKQot
ewotI2lmIExJQlhNTF9WRVJTSU9OID49IDIwNjI3Ci0gICAgVU5VU0VEX1BBUkFNKGNsb3N1cmUp
OwotCi0gICAgLy8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gbGlieG1sIDIuNi4yNy4KLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx4bWxQYXJzZXJD
dHh0UHRyPihjbG9zdXJlKS0+bm9kZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzdGFydEVs
ZW1lbnROc0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogbG9jYWxuYW1lLCBj
b25zdCB4bWxDaGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIqIHVyaSwgaW50IG5iX25hbWVzcGFj
ZXMsIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywgaW50IG5i
X2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCi17Ci0gICAgaWYg
KGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdldFBhcnNlcihjbG9zdXJlKS0+c3RhcnRFbGVtZW50TnMobG9jYWxuYW1lLCBwcmVmaXgs
IHVyaSwgbmJfbmFtZXNwYWNlcywgbmFtZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVs
dGVkLCBsaWJ4bWxBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFu
ZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciosIGNvbnN0
IHhtbENoYXIqKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVuZEVsZW1lbnRO
cygpOwotfQotCi1zdGF0aWMgdm9pZCBjaGFyYWN0ZXJzSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBj
b25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50
aXR5QnVnKGNsb3N1cmUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3Vy
ZSktPmNoYXJhY3RlcnMocywgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0
IHhtbENoYXIqIGRhdGEpCi17Ci0gICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xv
c3VyZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+cHJvY2Vz
c2luZ0luc3RydWN0aW9uKHRhcmdldCwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNkYXRhQmxv
Y2tIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCi17Ci0g
ICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y2RhdGFCbG9jayhzLCBsZW4pOwotfQotCi1z
dGF0aWMgdm9pZCBjb21tZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBj
b21tZW50KQotewotICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmNvbW1lbnQoY29tbWVu
dCk7Ci19Ci0KLVdURl9BVFRSSUJVVEVfUFJJTlRGKDIsIDMpCi1zdGF0aWMgdm9pZCB3YXJuaW5n
SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAg
dmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNl
cihjbG9zdXJlKS0+ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Ondhcm5pbmcsIG1lc3NhZ2UsIGFy
Z3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykK
LXN0YXRpYyB2b2lkIGZhdGFsRXJyb3JIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywg
bWVzc2FnZSk7Ci0gICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNl
cjo6ZmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQotV1RGX0FU
VFJJQlVURV9QUklOVEYoMiwgMykKLXN0YXRpYyB2b2lkIG5vcm1hbEVycm9ySGFuZGxlcih2b2lk
KiBjbG9zdXJlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdz
OwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOwotICAgIGdldFBhcnNlcihjbG9zdXJlKS0+
ZXJyb3IoWE1MRG9jdW1lbnRQYXJzZXI6Om5vbkZhdGFsLCBtZXNzYWdlLCBhcmdzKTsKLSAgICB2
YV9lbmQoYXJncyk7Ci19Ci0KLS8vIFVzaW5nIGEgc3RhdGljIGVudGl0eSBhbmQgbWFya2luZyBp
dCBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkgaXMKLS8vIGEgaGFjayB0byBhdm9pZCBt
YWxsb2MvZnJlZS4gVXNpbmcgYSBnbG9iYWwgdmFyaWFibGUgbGlrZSB0aGlzIGNvdWxkIGNhdXNl
IHRyb3VibGUKLS8vIGlmIGxpYnhtbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdlcmUgdG8gY2hh
bmdlCi1zdGF0aWMgeG1sQ2hhciBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdFs1XSA9IHswLCAwLCAw
LCAwLCAwfTsKLQotc3RhdGljIHhtbEVudGl0eVB0ciBzaGFyZWRYSFRNTEVudGl0eSgpCi17Ci0g
ICAgc3RhdGljIHhtbEVudGl0eSBlbnRpdHk7Ci0gICAgaWYgKCFlbnRpdHkudHlwZSkgewotICAg
ICAgICBlbnRpdHkudHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAgICAgICAgZW50aXR5Lm9yaWcg
PSBzaGFyZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmNvbnRlbnQgPSBzaGFy
ZWRYSFRNTEVudGl0eVJlc3VsdDsKLSAgICAgICAgZW50aXR5LmV0eXBlID0gWE1MX0lOVEVSTkFM
X1BSRURFRklORURfRU5USVRZOwotICAgIH0KLSAgICByZXR1cm4gJmVudGl0eTsKLX0KLQotc3Rh
dGljIHhtbEVudGl0eVB0ciBnZXRYSFRNTEVudGl0eShjb25zdCB4bWxDaGFyKiBuYW1lKQotewot
ICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihuYW1lKSk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJp
bmcgdmFsdWUgPSBTdHJpbmcoJmMsIDEpLnV0ZjgoKTsKLSAgICBBU1NFUlQodmFsdWUubGVuZ3Ro
KCkgPCA1KTsKLSAgICB4bWxFbnRpdHlQdHIgZW50aXR5ID0gc2hhcmVkWEhUTUxFbnRpdHkoKTsK
LSAgICBlbnRpdHktPmxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotICAgIGVudGl0eS0+bmFtZSA9
IG5hbWU7Ci0gICAgbWVtY3B5KHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0LCB2YWx1ZS5kYXRhKCks
IGVudGl0eS0+bGVuZ3RoICsgMSk7Ci0KLSAgICByZXR1cm4gZW50aXR5OwotfQotCi1zdGF0aWMg
eG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hh
ciogbmFtZSkKLXsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQ
YXJzZXJDdHh0UHRyPihjbG9zdXJlKTsKLSAgICB4bWxFbnRpdHlQdHIgZW50ID0geG1sR2V0UHJl
ZGVmaW5lZEVudGl0eShuYW1lKTsKLSAgICBpZiAoZW50KSB7Ci0gICAgICAgIGVudC0+ZXR5cGUg
PSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFk7Ci0gICAgICAgIHJldHVybiBlbnQ7Ci0g
ICAgfQotCi0gICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKLSAg
ICBpZiAoIWVudCAmJiAoZ2V0UGFyc2VyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKQotI2lm
IEVOQUJMRShYSFRNTE1QKQotICAgICAgICAgICAgICAgICB8fCBnZXRQYXJzZXIoY2xvc3VyZSkt
PmlzWEhUTUxNUERvY3VtZW50KCkKLSNlbmRpZgotICAgICAgICkpIHsKLSAgICAgICAgZW50ID0g
Z2V0WEhUTUxFbnRpdHkobmFtZSk7Ci0gICAgICAgIGlmIChlbnQpCi0gICAgICAgICAgICBlbnQt
PmV0eXBlID0gWE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwotICAgIH0KLQotICAgIHJldHVy
biBlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0RG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1
cmUpCi17Ci0gICAgeG1sUGFyc2VyQ3R4dCogY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0
eHQqPihjbG9zdXJlKTsKLSAgICBzd2l0Y2hUb1VURjE2KGN0eHQpOwotICAgIGdldFBhcnNlcihj
bG9zdXJlKS0+c3RhcnREb2N1bWVudChjdHh0LT52ZXJzaW9uLCBjdHh0LT5lbmNvZGluZywgY3R4
dC0+c3RhbmRhbG9uZSk7Ci0gICAgeG1sU0FYMlN0YXJ0RG9jdW1lbnQoY2xvc3VyZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVuZERvY3VtZW50SGFuZGxlcih2b2lkKiBjbG9zdXJlKQotewotICAgIGdl
dFBhcnNlcihjbG9zdXJlKS0+ZW5kRG9jdW1lbnQoKTsKLSAgICB4bWxTQVgyRW5kRG9jdW1lbnQo
Y2xvc3VyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBj
bG9zdXJlLCBjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBj
b25zdCB4bWxDaGFyKiBzeXN0ZW1JRCkKLXsKLSAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmludGVy
bmFsU3Vic2V0KG5hbWUsIGV4dGVybmFsSUQsIHN5c3RlbUlEKTsKLSAgICB4bWxTQVgySW50ZXJu
YWxTdWJzZXQoY2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwotfQotCi1zdGF0
aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hh
ciosIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHhtbENoYXIqKQotewotICAgIFN0
cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwotICAgIGlmICgoZXh0SWQgPT0gIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikKLSAgICAgICAgfHwgKGV4dElk
ID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAi
LS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9
PSAiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9
PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKQotICAgICAgICB8
fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBT
VkcgMS4xLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRN
TCBNb2JpbGUgMS4wLy9FTiIpCi0gICAgICAgKQotICAgICAgICBnZXRQYXJzZXIoY2xvc3VyZSkt
PnNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRp
dGllcyBvciBub3QuCi19Ci0KLXN0YXRpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVy
KHZvaWQqLCBjb25zdCB4bWxDaGFyKiwgaW50KQotewotICAgIC8vIG5vdGhpbmcgdG8gZG8sIGJ1
dCB3ZSBuZWVkIHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVyCi0gICAgLy8gaHR0cDovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1Ci0gICAgLy8gaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MgotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJiBjaHVuaykKLXsK
LSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkp
OwotCi0gICAgc2F4LmVycm9yID0gbm9ybWFsRXJyb3JIYW5kbGVyOwotICAgIHNheC5mYXRhbEVy
cm9yID0gZmF0YWxFcnJvckhhbmRsZXI7Ci0gICAgc2F4LmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJz
SGFuZGxlcjsKLSAgICBzYXgucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlcjsKLSAgICBzYXguY2RhdGFCbG9jayA9IGNkYXRhQmxvY2tIYW5kbGVyOwot
ICAgIHNheC5jb21tZW50ID0gY29tbWVudEhhbmRsZXI7Ci0gICAgc2F4Lndhcm5pbmcgPSB3YXJu
aW5nSGFuZGxlcjsKLSAgICBzYXguc3RhcnRFbGVtZW50TnMgPSBzdGFydEVsZW1lbnROc0hhbmRs
ZXI7Ci0gICAgc2F4LmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4
LmdldEVudGl0eSA9IGdldEVudGl0eUhhbmRsZXI7Ci0gICAgc2F4LnN0YXJ0RG9jdW1lbnQgPSBz
dGFydERvY3VtZW50SGFuZGxlcjsKLSAgICBzYXguZW5kRG9jdW1lbnQgPSBlbmREb2N1bWVudEhh
bmRsZXI7Ci0gICAgc2F4LmludGVybmFsU3Vic2V0ID0gaW50ZXJuYWxTdWJzZXRIYW5kbGVyOwot
ICAgIHNheC5leHRlcm5hbFN1YnNldCA9IGV4dGVybmFsU3Vic2V0SGFuZGxlcjsKLSAgICBzYXgu
aWdub3JhYmxlV2hpdGVzcGFjZSA9IGlnbm9yYWJsZVdoaXRlc3BhY2VIYW5kbGVyOwotICAgIHNh
eC5lbnRpdHlEZWNsID0geG1sU0FYMkVudGl0eURlY2w7Ci0gICAgc2F4LmluaXRpYWxpemVkID0g
WE1MX1NBWDJfTUFHSUM7Ci0gICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOwotICAg
IG1fc2F3RXJyb3IgPSBmYWxzZTsKLSAgICBtX3Nhd0NTUyA9IGZhbHNlOwotICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gZmFsc2U7Ci0gICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKLQotICAg
IFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSk7Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2NvbnRleHQg
PSBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1vcnlQYXJzZXIoJnNheCwgdGhpcywgY2h1bmsp
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoIWNodW5rLmRhdGEoKSk7Ci0gICAgICAgIG1f
Y29udGV4dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCB0aGlz
KTsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKCkKLXsKLSAgICBp
ZiAoIWlzU3RvcHBlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAg
IC8vIFRlbGwgbGlieG1sIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpKTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGNvbnRleHQoKSwgMCwg
MCwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fY29udGV4dCA9IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBYTUxUcmVlVmlld2VyIHhtbFRy
ZWVWaWV3ZXIoZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCB4bWxWaWV3ZXJNb2RlID0gIW1fc2F3RXJy
b3IgJiYgIW1fc2F3Q1NTICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiB4bWxUcmVlVmlld2VyLmhh
c05vU3R5bGVJbmZvcm1hdGlvbigpOwotICAgIGlmICh4bWxWaWV3ZXJNb2RlKQotICAgICAgICB4
bWxUcmVlVmlld2VyLnRyYW5zZm9ybURvY3VtZW50VG9UcmVlVmlldygpOwotCi0gICAgaWYgKG1f
c2F3WFNMVHJhbnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9IHhtbERvY1B0ckZvclN0cmlu
Zyhkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGRvY3VtZW50
KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNmb3JtU291cmNlKGRvYykp
KTsKLQotICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUg
ZG9jdW1lbnQgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IFhTTCBzdHlsZXNoZWV0
cy4KLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJ
bW1lZGlhdGVseSk7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcodHJ1ZSk7Ci0KLSAg
ICAgICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LSNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0
cgotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJl
IHRvIHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9y
IG1lc3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KCZCT00pOwotCi0gICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShjYWNoZWRS
ZXNvdXJjZUxvYWRlciwgZXJyb3JGdW5jLCAwKTsKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0g
eG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFj
dGVycygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uu
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2
QkUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTTFRfUEFSU0Vf
T1BUSU9OUyk7Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLSNlbmRpZgotCi1pbnQgWE1MRG9j
dW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGUgaW1w
bGVtZW50YXRpb24gcHJvYmFibHkgcmV0dXJucyAxLWJhc2VkIGludCwgYnV0IG1ldGhvZCBzaG91
bGQgcmV0dXJuIDAtYmFzZWQuCi0gICAgcmV0dXJuIGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5w
dXQtPmxpbmUgOiAxOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1
cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3VsZCByZXR1cm4gMC1iYXNlZC4KLSAgICBy
ZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1dC0+Y29sIDogMTsKLX0KLQotVGV4dFBv
c2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICB4
bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7Ci0g
ICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IHByb2JhYmx5IGNvbnRhaW5zIDEtYmFzZWQgbnVtYmVy
cywgYnV0IHdlIHRyZWF0IHRoZW0gYXMgMC1iYXNlZCwKLSAgICAvLyAgICAgICAgdG8gYmUgY29u
c2lzdGVudCB3aXRoIGZpeG1lJ3MgaW4gbGluZU51bWJlcigpIGFuZCBjb2x1bW5OdW1iZXIKLSAg
ICAvLyAgICAgICAgbWV0aG9kcy4KLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9C
YXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCi0gICAg
ICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0
LT5jb2wpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaGFzIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlv
biwgaW4gY29udHJhc3QgdG8gdGV4dFBvc2l0aW9uKCkgbWV0aG9kLgotLy8gSXQgc2hvdWxkIHJl
cGxhY2UgdGV4dFBvc2l0aW9uKCkuCi1UZXh0UG9zaXRpb24xIFhNTERvY3VtZW50UGFyc2VyOjp0
ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjb250
ZXh0ID0gdGhpcy0+Y29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpOwotICAgIHJldHVybiBUZXh0UG9zaXRp
b24xKFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+
bGluZSksCi0gICAgICAgIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250
ZXh0LT5pbnB1dC0+Y29sKSk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJz
aW5nKCkKLXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBpZiAoY29u
dGV4dCgpKQotICAgICAgICB4bWxTdG9wUGFyc2VyKGNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQotewotICAgIEFTU0VSVCghaXNEZXRhY2hl
ZCgpKTsKLSAgICBBU1NFUlQobV9wYXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQg
PSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwot
ICAgIHdoaWxlICghbV9wZW5kaW5nQ2FsbGJhY2tzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9w
ZW5kaW5nQ2FsbGJhY2tzLT5jYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayh0aGlzKTsKLQotICAg
ICAgICAvLyBBIGNhbGxiYWNrIHBhdXNlZCB0aGUgcGFyc2VyCi0gICAgICAgIGlmIChtX3BhcnNl
clBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCB3cml0
ZSBhbnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdT
cmM7Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAg
Ly8gRmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB3cml0ZSgpIGRpZG4n
dCByZXN1bHQKLSAgICAvLyBpbiBhbnkgZnVydGhlciBjYWxsYmFja3MgYmVpbmcgcXVldWVkLCBj
YWxsIGVuZCgpCi0gICAgaWYgKG1fZmluaXNoQ2FsbGVkICYmIG1fcGVuZGluZ0NhbGxiYWNrcy0+
aXNFbXB0eSgpKQotICAgICAgICBlbmQoKTsKLX0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6
YXBwZW5kRnJhZ21lbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBjaHVuaykKLXsKLSAgICBBU1NFUlQo
IW1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFyc2luZ0ZyYWdtZW50KTsKLQotICAgIENTdHJp
bmcgY2h1bmtBc1V0ZjggPSBjaHVuay51dGY4KCk7Ci0gICAgCi0gICAgLy8gbGlieG1sMiB0YWtl
cyBhbiBpbnQgZm9yIGEgbGVuZ3RoLCBhbmQgdGhlcmVmb3JlIGNhbid0IGhhbmRsZSBYTUwgY2h1
bmtzIGxhcmdlciB0aGFuIDIgR2lCLgotICAgIGlmIChjaHVua0FzVXRmOC5sZW5ndGgoKSA+IElO
VF9NQVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluaXRpYWxpemVQYXJzZXJDb250
ZXh0KGNodW5rQXNVdGY4KTsKLSAgICB4bWxQYXJzZUNvbnRlbnQoY29udGV4dCgpKTsKLSAgICBl
bmREb2N1bWVudCgpOyAvLyBDbG9zZSBhbnkgb3BlbiB0ZXh0IG5vZGVzLgotCi0gICAgLy8gRklY
TUU6IElmIHRoaXMgY29kZSBpcyBhY3R1YWxseSBuZWVkZWQsIGl0IHNob3VsZCBwcm9iYWJseSBt
b3ZlIHRvIGZpbmlzaCgpCi0gICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJRdCBoYXMgYSBzaW1pbGFy
IGNoZWNrIChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVu
ZE9mRG9jdW1lbnRFcnJvcikgaW4gZG9FbmQoKS4KLSAgICAvLyBDaGVjayBpZiBhbGwgdGhlIGNo
dW5rIGhhcyBiZWVuIHByb2Nlc3NlZC4KLSAgICBsb25nIGJ5dGVzUHJvY2Vzc2VkID0geG1sQnl0
ZUNvbnN1bWVkKGNvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVzUHJvY2Vzc2VkID09IC0xIHx8ICgo
dW5zaWduZWQgbG9uZylieXRlc1Byb2Nlc3NlZCkgIT0gY2h1bmtBc1V0ZjgubGVuZ3RoKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IEkgZG9uJ3QgYmVsaWV2ZSB3ZSBjYW4gaGl0IHRoaXMgY2FzZSB3
aXRob3V0IGFsc28gaGF2aW5nIHNlZW4gYW4gZXJyb3Igb3IgYSBudWxsIGJ5dGUuCi0gICAgICAg
IC8vIElmIHdlIGhpdCB0aGlzIEFTU0VSVCwgd2UndmUgZm91bmQgYSB0ZXN0IGNhc2Ugd2hpY2gg
ZGVtb25zdHJhdGVzIHRoZSBuZWVkIGZvciB0aGlzIGNvZGUuCi0gICAgICAgIEFTU0VSVChtX3Nh
d0Vycm9yIHx8IChieXRlc1Byb2Nlc3NlZCA+PSAwICYmICFjaHVua0FzVXRmOC5kYXRhKClbYnl0
ZXNQcm9jZXNzZWRdKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBO
byBlcnJvciBpZiB0aGUgY2h1bmsgaXMgd2VsbCBmb3JtZWQgb3IgaXQgaXMgbm90IGJ1dCB3ZSBo
YXZlIG5vIGVycm9yLgotICAgIHJldHVybiBjb250ZXh0KCktPndlbGxGb3JtZWQgfHwgIXhtbEN0
eHRHZXRMYXN0RXJyb3IoY29udGV4dCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJpYnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsK
LQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9z
dXJlLCBjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIC8qeG1sUHJl
Zml4Ki8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHhtbENoYXIqIC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFjZXMqLywgY29uc3QgeG1sQ2hh
cioqIC8qbmFtZXNwYWNlcyovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVmYXVsdGVkKi8sIGNvbnN0IHht
bENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzKQotewotICAgIGlmIChzdHJjbXAocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJzIikgIT0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFy
c2VyQ3R4dFB0cj4oY2xvc3VyZSk7Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSogc3RhdGUgPSBz
dGF0aWNfY2FzdDxBdHRyaWJ1dGVQYXJzZVN0YXRlKj4oY3R4dC0+X3ByaXZhdGUpOwotCi0gICAg
c3RhdGUtPmdvdEF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0
dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0
cmlidXRlcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsK
LSAgICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSB0b1N0cmluZyhhdHRyaWJ1dGVzW2ldLmxv
Y2FsbmFtZSk7Ci0gICAgICAgIGludCB2YWx1ZUxlbmd0aCA9IChpbnQpIChhdHRyaWJ1dGVzW2ld
LmVuZCAtIGF0dHJpYnV0ZXNbaV0udmFsdWUpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0g
dG9TdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgICAgICBTdHJp
bmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKLSAgICAgICAg
U3RyaW5nIGF0dHJRTmFtZSA9IGF0dHJQcmVmaXguaXNFbXB0eSgpID8gYXR0ckxvY2FsTmFtZSA6
IGF0dHJQcmVmaXggKyAiOiIgKyBhdHRyTG9jYWxOYW1lOwotCi0gICAgICAgIHN0YXRlLT5hdHRy
aWJ1dGVzLnNldChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7Ci0gICAgfQotfQotCi1IYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wm
IGF0dHJzT0spCi17Ci0gICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKLSAgICBzdGF0ZS5n
b3RBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLSAgICB4bWxTQVhIYW5kbGVyIHNheDsKLSAgICBtZW1z
ZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOwotICAgIHNheC5zdGFydEVsZW1lbnROcyA9IGF0dHJp
YnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmluaXRpYWxpemVkID0gWE1MX1NB
WDJfTUFHSUM7Ci0gICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IHBhcnNlciA9IFhNTFBhcnNl
ckNvbnRleHQ6OmNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCAmc3RhdGUpOwotICAgIFN0cmluZyBw
YXJzZVN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjxhdHRycyAiICsgc3RyaW5nICsg
IiAvPiI7Ci0gICAgeG1sUGFyc2VDaHVuayhwYXJzZXItPmNvbnRleHQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4ocGFyc2VTdHJpbmcuY2hhcmFjdGVycygpKSwgcGFyc2VTdHJpbmcu
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAxKTsKLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0
cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUuYXR0cmlidXRlczsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdl
YmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtp
dC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1
ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUg
IkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgi
Ci0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5o
IgotI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5j
bHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5o
IgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRW50aXR5
UmVzb2x2ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIHsKLSAgICB2aXJ0dWFs
IFFTdHJpbmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSk7Ci19
OwotCi1RU3RyaW5nIEVudGl0eVJlc29sdmVyOjpyZXNvbHZlVW5kZWNsYXJlZEVudGl0eShjb25z
dCBRU3RyaW5nICZuYW1lKQotewotICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShuYW1l
LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKLSAgICByZXR1cm4gUVN0cmluZyhjKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBYTUxEb2N1bWVudFBhcnNl
cjo6c3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICByZXR1
cm4gdmVyc2lvbiA9PSAiMS4wIjsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50
UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi0gICAgOiBT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0gICAgLCBtX3ZpZXcoZnJhbWVWaWV3
KQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2RlKGRvY3VtZW50
KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNlKQotICAgICwg
bV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkK
LSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRNTE1QKQotICAg
ICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKLSAgICAsIG1f
cmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQotICAg
ICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlv
bjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKLSAgICAsIG1fc2NyaXB0aW5nUGVy
bWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0gICAgbV9zdHJlYW0uc2V0RW50
aXR5UmVzb2x2ZXIobmV3IEVudGl0eVJlc29sdmVyKTsKLX0KLQotWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBw
YXJlbnRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKLSAg
ICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fdmlldygwKQotICAgICwgbV93cm90ZVRleHQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnROb2Rl
KGZyYWdtZW50KQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKLSAgICAsIG1fc2F3Q1NTKGZhbHNl
KQotICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCi0gICAgLCBtX3Nhd0ZpcnN0RWxlbWVu
dChmYWxzZSkKLSAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQotI2lmIEVOQUJMRShYSFRN
TE1QKQotICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKLSAgICAsIG1faGFzRG9jVHlw
ZURlY2xhcmF0aW9uKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkK
LSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1fZmluaXNoQ2FsbGVkKGZh
bHNlKQotICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQotICAgICwgbV9wZW5kaW5nU2NyaXB0
KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5n
ZVBvc2l0aW9uKCkpCi0gICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3Jp
cHRpbmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCi17Ci0gICAgZnJhZ21lbnQtPnJlZigpOwotCi0g
ICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVudCBub2RlCi0gICAgVmVjdG9y
PEVsZW1lbnQqPiBlbGVtU3RhY2s7Ci0gICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKLSAgICAg
ICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50KTsKLQotICAgICAgICBOb2RlKiBuID0g
cGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgIH0KLQotICAgIGlmIChlbGVtU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFy
YXRpb25zIG5hbWVzcGFjZXM7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNr
Lmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsK
LSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkp
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7
IGkrKykgewotICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1
dGVJdGVtKGkpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAieG1s
bnMiKQotICAgICAgICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52
YWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09ICJ4bWxu
cyIpCi0gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYXBwZW5kKFFYbWxTdHJlYW1OYW1l
c3BhY2VEZWNsYXJhdGlvbihhdHRyLT5sb2NhbE5hbWUoKSwgYXR0ci0+dmFsdWUoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3RyZWFtLmFkZEV4dHJhTmFtZXNw
YWNlRGVjbGFyYXRpb25zKG5hbWVzcGFjZXMpOwotICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29s
dmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAvLyBJZiB0aGUgcGFyZW50IGVsZW1lbnQg
aXMgbm90IGluIGRvY3VtZW50IHRyZWUsIHRoZXJlIG1heSBiZSBubyB4bWxucyBhdHRyaWJ1dGU7
IGp1c3QgZGVmYXVsdCB0byB0aGUgcGFyZW50J3MgbmFtZXNwYWNlLgotICAgIGlmIChtX2RlZmF1
bHROYW1lc3BhY2VVUkkuaXNOdWxsKCkgJiYgIXBhcmVudEVsZW1lbnQtPmluRG9jdW1lbnQoKSkK
LSAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gcGFyZW50RWxlbWVudC0+bmFtZXNwYWNl
VVJJKCk7Ci19Ci0KLVhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQotewot
ICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCi0g
ICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIGRlbGV0ZSBt
X3N0cmVhbS5lbnRpdHlSZXNvbHZlcigpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpk
b1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCi17Ci0gICAgbV93cm90ZVRleHQgPSB0
cnVlOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNv
ZGVyKCktPnNhd0Vycm9yKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVy
cm9yLCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAgICAgIGhhbmRsZUVy
cm9yKGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFFTdHJpbmcgZGF0YShwYXJzZVN0cmlu
Zyk7Ci0gICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBKYXZhU2NyaXB0IG1h
eSBjYXVzZSB0aGUgcGFyc2VyIHRvIGRldGFjaCwKLSAgICAgICAgLy8ga2VlcCB0aGlzIGFsaXZl
IHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAgUmVmUHRyPFhNTERvY3VtZW50
UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgIG1fc3RyZWFtLmFkZERhdGEoZGF0YSk7
Ci0gICAgICAgIHBhcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotfQotCi12b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBDU3RyaW5nJikKLXsK
LSAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7Ci0gICAgbV9zYXdFcnJvciA9IGZh
bHNlOwotICAgIG1fc2F3Q1NTID0gZmFsc2U7Ci0gICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSBmYWxz
ZTsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpkb0VuZCgpCi17Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgaWYgKG1fc2F3WFNMVHJh
bnNmb3JtKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0
cihuZXcgVHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pKSk7Ci0g
ICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2MgdGhp
bmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCi0gICAgICAgIGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwotICAg
ICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKHRydWUpOwotICAgICAgICBEb2N1bWVudFBhcnNl
cjo6c3RvcFBhcnNpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX3N0cmVhbS5lcnJv
cigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcgotICAg
ICAgICB8fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50ICYmICFtX3Nhd1hTTFRy
YW5zZm9ybSAmJiAhbV9zYXdFcnJvcikpCi0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJp
bnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJl
cigpKTsKLX0KLQotaW50IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zdHJlYW0ubGluZU51bWJlcigpOwotfQotCi1pbnQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtLmNvbHVt
bk51bWJlcigpOwotfQotCi1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9z
aXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2Vk
TnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGxpbmVOdW1iZXIoKSksIFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbHVtbk51bWJlcigpKSk7Ci19Ci0KLS8vIFRoaXMgbWV0
aG9kIGluY29ycmVjdGx5IHJlaW50ZXJwcmV0cyB6ZXJvLWJhc2UgbGluZU51bWJlciBtZXRob2Qg
YXMgb25lLWJhc2VkIG51bWJlci4KLS8vIEZJWE1FOiBUaGlzIGVycm9yIGlzIGtlcHQgZm9yIGNv
bXBhdGliaWxpdHkuIFdlIHNob3VsZCBmaXggaXQgZXZlbnR1YWxseS4gCi1UZXh0UG9zaXRpb24x
IFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb25PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGxpbmVOdW1iZXIoKSksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1
bW5OdW1iZXIoKSkpOwotfQotCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygp
Ci17Ci0gICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwotfQotCi12
b2lkIFhNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nKCkKLXsKLSAgICBBU1NFUlQobV9w
YXJzZXJQYXVzZWQpOwotCi0gICAgbV9wYXJzZXJQYXVzZWQgPSBmYWxzZTsKLQotICAgIC8vIEZp
cnN0LCBleGVjdXRlIGFueSBwZW5kaW5nIGNhbGxiYWNrcwotICAgIHBhcnNlKCk7Ci0gICAgaWYg
KG1fcGFyc2VyUGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVuLCB3cml0ZSBh
bnkgcGVuZGluZyBkYXRhCi0gICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7
Ci0gICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHJlc3QpOwotCi0gICAgLy8g
RmluYWxseSwgaWYgZmluaXNoKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBhcHBlbmQoKSBkaWRuJ3Qg
cmVzdWx0Ci0gICAgLy8gaW4gYW55IGZ1cnRoZXIgY2FsbGJhY2tzIGJlaW5nIHF1ZXVlZCwgY2Fs
bCBlbmQoKQotICAgIGlmIChtX2ZpbmlzaENhbGxlZCAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1f
cGVuZGluZ1NjcmlwdCkKLSAgICAgICAgZW5kKCk7Ci19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZEZyYWdtZW50U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAgIEFT
U0VSVCghbV9zYXdGaXJzdEVsZW1lbnQpOwotICAgIGFwcGVuZChTdHJpbmcoIjxxeG1sc3RyZWFt
ZHVtbXllbGVtZW50PiIpKTsKLSAgICBhcHBlbmQoc291cmNlKTsKLSAgICBhcHBlbmQoU3RyaW5n
KCI8L3F4bWxzdHJlYW1kdW1teWVsZW1lbnQ+IikpOwotICAgIHJldHVybiAhaGFzRXJyb3IoKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IEF0dHJp
YnV0ZVBhcnNlU3RhdGUgewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7
Ci0gICAgYm9vbCBnb3RBdHRyaWJ1dGVzOwotfTsKLQotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0
YXJ0RWxlbWVudE5zSGFuZGxlcihBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSwgY29uc3QgUVht
bFN0cmVhbUF0dHJpYnV0ZXMmIGF0dHJzKQotewotICAgIGlmIChhdHRycy5jb3VudCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlLT5nb3RBdHRyaWJ1dGVzID0gdHJ1ZTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUmIGF0dHIgPSBhdHRyc1tpXTsKLSAgICAgICAgU3RyaW5n
IGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAg
ICAgPSBhdHRyLnZhbHVlKCk7Ci0gICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5u
YW1lc3BhY2VVcmkoKTsKLSAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxp
ZmllZE5hbWUoKTsKLSAgICAgICAgc3RhdGUtPmF0dHJpYnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0
clZhbHVlKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYgYXR0cnNPSykKLXsKLSAgICBBdHRyaWJ1
dGVQYXJzZVN0YXRlIHN0YXRlOwotICAgIHN0YXRlLmdvdEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQot
ICAgIFFYbWxTdHJlYW1SZWFkZXIgc3RyZWFtOwotICAgIFFTdHJpbmcgZHVtbXkgPSBRU3RyaW5n
KFFMYXRpbjFTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICUxIC8+IikpLmFy
ZyhzdHJpbmcpOwotICAgIHN0cmVhbS5hZGREYXRhKGR1bW15KTsKLSAgICB3aGlsZSAoIXN0cmVh
bS5hdEVuZCgpKSB7Ci0gICAgICAgIHN0cmVhbS5yZWFkTmV4dCgpOwotICAgICAgICBpZiAoc3Ry
ZWFtLmlzU3RhcnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXNTdGFydEVsZW1l
bnROc0hhbmRsZXIoJnN0YXRlLCBzdHJlYW0uYXR0cmlidXRlcygpKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBhdHRyc09LID0gc3RhdGUuZ290QXR0cmlidXRlczsKLSAgICByZXR1cm4gc3RhdGUu
YXR0cmlidXRlczsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcHJlZml4RnJvbVFOYW1lKGNv
bnN0IFFTdHJpbmcmIHFOYW1lKQotewotICAgIGNvbnN0IGludCBvZmZzZXQgPSBxTmFtZS5pbmRl
eE9mKFFMYXRpbjFDaGFyKCc6JykpOwotICAgIGlmIChvZmZzZXQgPD0gMCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHFOYW1lLmxlZnQob2Zmc2V0
KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKEVsZW1l
bnQqIG5ld0VsZW1lbnQsIGNvbnN0IFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMgJm5z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5zLmNvdW50KCk7ICsraSkgewotICAgICAgICBj
b25zdCBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gJmRlY2wgPSBuc1tpXTsKLSAgICAg
ICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGRlY2wubmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIFN0
cmluZyBuYW1lc3BhY2VRTmFtZSA9IGRlY2wucHJlZml4KCkuaXNFbXB0eSgpID8gU3RyaW5nKCJ4
bWxucyIpIDogU3RyaW5nKCJ4bWxuczoiKTsKLSAgICAgICAgbmFtZXNwYWNlUU5hbWUuYXBwZW5k
KGRlY2wucHJlZml4KCkpOwotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUygiaHR0
cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCBuYW1lc3BhY2VRTmFtZSwgbmFtZXNwYWNlVVJJ
LCBlYywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9u
IHNldHRpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIG5ld0VsZW1l
bnQsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzICZhdHRycywgRXhjZXB0aW9uQ29kZSYgZWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhdHRycy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUVhtbFN0cmVhbUF0
dHJpYnV0ZSAmYXR0ciA9IGF0dHJzW2ldOwotICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9
IGF0dHIubmFtZSgpOwotICAgICAgICBTdHJpbmcgYXR0clZhbHVlICAgICA9IGF0dHIudmFsdWUo
KTsKLSAgICAgICAgU3RyaW5nIGF0dHJVUkkgICAgICAgPSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogU3RyaW5nKGF0dHIubmFtZXNwYWNlVXJpKCkpOwotICAgICAg
ICBTdHJpbmcgYXR0clFOYW1lICAgICA9IGF0dHIucXVhbGlmaWVkTmFtZSgpOwotICAgICAgICBu
ZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwg
ZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBpZiAoZWMpIC8vIGV4Y2VwdGlvbiBz
ZXR0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlKCkKLXsKLSAgICB3aGlsZSAoIWlzU3RvcHBlZCgpICYm
ICFtX3BhcnNlclBhdXNlZCAmJiAhbV9zdHJlYW0uYXRFbmQoKSkgewotICAgICAgICBtX3N0cmVh
bS5yZWFkTmV4dCgpOwotICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDogewotICAgICAgICAg
ICAgc3RhcnREb2N1bWVudCgpOwotICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDogewotICAgICAgICAgICAgZW5k
RG9jdW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0g
ICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSAmJiAhbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwg
IkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAg
ICAgICAgcGFyc2VTdGFydEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRWxlbWVudDogewotICAgICAgICAg
ICAgcGFyc2VFbmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKLSAgICAgICAgICAgIGlm
IChtX3N0cmVhbS5pc0NEQVRBKCkpIHsKLSAgICAgICAgICAgICAgICAvL2NkYXRhCi0gICAgICAg
ICAgICAgICAgcGFyc2VDZGF0YSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvL2NoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICBwYXJzZUNoYXJhY3RlcnMoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVhtbFN0cmVhbVJlYWRlcjo6Q29tbWVudDogewotICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxTdHJlYW1S
ZWFkZXI6OkRURDogewotICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFRE
IjsKLSAgICAgICAgICAgIHBhcnNlRHRkKCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAg
ICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5
UmVmZXJlbmNlOiB7Ci0gICAgICAgICAgICAvL3FEZWJ1ZygpPDwiLS0tLS0tLS0tLSBFTlRJVFkg
PSAiPDxtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKQotICAgICAgICAgICAgLy8gICAgICAgIDw8
IiwgdCA9ICI8PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKGlz
WEhUTUxEb2N1bWVudCgpCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICAgICAgfHwg
aXNYSFRNTE1QRG9jdW1lbnQoKQotI2VuZGlmCi0gICAgICAgICAgICAgICApIHsKLSAgICAgICAg
ICAgICAgICBRU3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUoKS50b1N0cmluZygpOwotICAg
ICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHkudG9VdGY4KCku
Y29uc3REYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCi0gICAg
ICAgICAgICAgICAgICAgIGVudGVyVGV4dCgpOwotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIoJmMsIDEpOwotICAgICAgICAg
ICAgICAgIC8vIHFEZWJ1ZygpPDwiIC0tLS0tLS0gYWRkaW5nIGVudGl0eSAiPDxzdHI7Ci0gICAg
ICAgICAgICAgICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEoc3RyLCBlYyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFYbWxT
dHJlYW1SZWFkZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjogewotICAgICAgICAgICAgcGFyc2VQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmVhbS5lcnJvcigpICE9IFFY
bWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgewotICAgICAgICAg
ICAgICAgIEVycm9yVHlwZSB0eXBlID0gKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJl
YWRlcjo6Tm90V2VsbEZvcm1lZEVycm9yKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYXRhbCA6IHdhcm5pbmc7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwg
cVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoKQotewotICAgIGluaXRpYWxpemVQYXJz
ZXJDb250ZXh0KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KLSAgICBpZiAoIW1fcGFy
c2luZ0ZyYWdtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFhNTFN0YW5kYWxvbmUobV9z
dHJlYW0uaXNTdGFuZGFsb25lRG9jdW1lbnQoKSwgZWMpOwotCi0gICAgICAgIFFTdHJpbmdSZWYg
dmVyc2lvbiA9IG1fc3RyZWFtLmRvY3VtZW50VmVyc2lvbigpOwotICAgICAgICBpZiAoIXZlcnNp
b24uaXNFbXB0eSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0WE1MVmVyc2lvbih2ZXJz
aW9uLCBlYyk7Ci0gICAgICAgIFFTdHJpbmdSZWYgZW5jb2RpbmcgPSBtX3N0cmVhbS5kb2N1bWVu
dEVuY29kaW5nKCk7Ci0gICAgICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIH0KLX0KLQotdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQoKQotewotICAgIGlmICghbV9z
YXdGaXJzdEVsZW1lbnQgJiYgbV9wYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgLy8gc2tpcCBk
dW1teSBlbGVtZW50IGZvciBmcmFnbWVudHMKLSAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0
cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXhpdFRleHQoKTsKLQotICAgIFN0
cmluZyBsb2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCk7Ci0gICAgU3RyaW5nIHVyaSAgICAgICA9
IG1fc3RyZWFtLm5hbWVzcGFjZVVyaSgpOwotICAgIFN0cmluZyBwcmVmaXggICAgPSBwcmVmaXhG
cm9tUU5hbWUobV9zdHJlYW0ucXVhbGlmaWVkTmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgaWYg
KG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051bGwoKSkgewotICAgICAgICBRX0FTU0VSVChw
cmVmaXguaXNOdWxsKCkpOwotICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0g
ICAgfQotCi0gICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsK
LSAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1l
bnQocU5hbWUsIHRydWUpOwotICAgIGlmICghbmV3RWxlbWVudCkgewotICAgICAgICBzdG9wUGFy
c2luZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0g
ICAgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7Ci0gICAg
ICAgIC8vIEFzIHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAy
MC1BLnBkZiwKLSAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVs
ZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCi0gICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0
aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJwotICAgICAgICAv
LyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwotICAgICAgICBpZiAobG9j
YWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewotICAgICAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJv
b3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
Ukk7Ci0gICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Ci0gICAgICAgICAg
ICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJlYW1OYW1lc3Bh
Y2VEZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nh
d0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhuZXdFbGVtZW50
LmdldCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbik7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVt
ZW50LmdldCgpLCBtX3N0cmVhbS5hdHRyaWJ1dGVzKCksIGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Np
b24pOwotICAgIGlmIChlYykgewotICAgICAgICBzdG9wUGFyc2luZygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKLSAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAg
ICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uT25lQmFzZWQoKTsKLQotICAg
IG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOwotCi0gICAg
cHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5l
d0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwotCi0j
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobmV3RWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
SHRtbEVsZW1lbnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwotI2Vu
ZGlmCi0KLSAgICBpZiAoaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxl
bWVudCgpCi17Ci0gICAgZXhpdFRleHQoKTsKLQotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBu
ID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAg
IGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2Vk
ICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4uZ2V0KCkpKSkgewotICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwotICAgICAgICBuLT5yZW1vdmUoZWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgewotICAg
ICAgICBpZiAoIW1fY3VycmVudE5vZGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3BD
dXJyZW50Tm9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsKLQotICAgIC8vIFRoZSBlbGVt
ZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQu
Ci0gICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVu
J3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAg
cG9wQ3VycmVudE5vZGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcmlwdEVs
ZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYg
KCFzY3JpcHRFbGVtZW50KSB7Ci0gICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBkb24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0
YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0
KTsKLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotCi0gICAgYm9vbCBzdWNjZXNzZnVs
bHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBv
c2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwot
ICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFyZWQpIHsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAg
ICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5pc1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxl
bWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKSkKLSAgICAgICAgICAgIGRvY3Vt
ZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Ci0jZW5kaWYKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhl
Y3V0ZWQoKSkKLSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVy
bCgpLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxl
bWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewotICAgICAgICAgICAgbV9wZW5kaW5nU2Ny
aXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7Ci0gICAgICAgICAgICBtX3Njcmlw
dEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGll
bnQodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYg
c2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCi0g
ICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFy
c2luZygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7
Ci0gICAgfQotICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwotICAgIHBvcEN1cnJlbnRO
b2RlKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2hhcmFjdGVycygpCi17
Ci0gICAgaWYgKCFtX2xlYWZUZXh0Tm9kZSkKLSAgICAgICAgZW50ZXJUZXh0KCk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9sZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEobV9zdHJl
YW0udGV4dCgpLCBlYyk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vz
c2luZ0luc3RydWN0aW9uKCkKLXsKLSAgICBleGl0VGV4dCgpOwotCi0gICAgLy8gIyMjIGhhbmRs
ZSBleGNlcHRpb25zCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3Np
bmdJbnN0cnVjdGlvbj4gcGkgPSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oCi0gICAgICAgIG1fc3RyZWFtLnByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldCgpLAotICAg
ICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKCksIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGktPnNldENyZWF0ZWRC
eVBhcnNlcih0cnVlKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKHBpLmdl
dCgpKTsKLSAgICBpZiAobV92aWV3ICYmICFwaS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcGktPmF0
dGFjaCgpOwotCi0gICAgcGktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKHBp
LT5pc0NTUygpKQotICAgICAgICBtX3Nhd0NTUyA9IHRydWU7Ci0jaWYgRU5BQkxFKFhTTFQpCi0g
ICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7
Ci0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtICYmICFkb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudCgpKQotICAgICAgICBzdG9wUGFyc2luZygpOwotI2VuZGlmCi19Ci0KLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ2RhdGEoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAg
ICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9j
dW1lbnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKLQotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFk
ZENoaWxkKG5ld05vZGUuZ2V0KCkpOwotICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFj
aGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwotfQotCi12b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpwYXJzZUNvbW1lbnQoKQotewotICAgIGV4aXRUZXh0KCk7Ci0KLSAgICBSZWZQdHI8
Q29tbWVudD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX3N0cmVhbS50
ZXh0KCkpOwotCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQo
KSk7Ci0gICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKLSAgICAgICAgbmV3
Tm9kZS0+YXR0YWNoKCk7Ci19Ci0KLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50
KCkKLXsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9
IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgWE1MRG9jdW1lbnRQYXJzZXI6Omhhc0Vycm9yKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9zdHJlYW0uaGFzRXJyb3IoKTsKLX0KLQotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VEdGQoKQotewotICAgIFFTdHJpbmdSZWYgbmFtZSA9IG1fc3Ry
ZWFtLmR0ZE5hbWUoKTsKLSAgICBRU3RyaW5nUmVmIHB1YmxpY0lkID0gbV9zdHJlYW0uZHRkUHVi
bGljSWQoKTsKLSAgICBRU3RyaW5nUmVmIHN5c3RlbUlkID0gbV9zdHJlYW0uZHRkU3lzdGVtSWQo
KTsKLQotICAgIC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwgcHVibGljSWQgPDwgc3lzdGVt
SWQ7Ci0gICAgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRN
TCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpKQotICAgICAgICB8fCAocHVibGlj
SWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKSkK
LSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1M
IDEuMCBGcmFtZXNldC8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJp
bmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkKLSAgICAgICAgfHwgKHB1Ymxp
Y0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAy
LjAvL0VOIikpCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0Mv
L0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSNpZiAh
RU5BQkxFKFhIVE1MTVApCi0gICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCi0jZW5kaWYKLSAgICAgICAp
Ci0gICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVw
bGFjZSBlbnRpdGllcyBvciBub3QuCi0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgZWxzZSBpZiAo
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMS8vRU4iKSkKLSAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewotICAgICAgICBpZiAo
QXRvbWljU3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgewot
ICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRp
b24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUg
dHlwZSBpcyBjb3JyZWN0IHdpdGggdGhpcyBtZXRob2QKLSAgICAgICAgICAgIHNldElzWEhUTUxN
UERvY3VtZW50KHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJc1hIVE1MRG9j
dW1lbnQodHJ1ZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkK
LSAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGE0NzNlZDIzMDgyZjM3ZDM5M2E4ZDExZjFhZGExNWVjYzNjMzcyNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1l
bnRQYXJzZXJTY29wZTo6Y3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKLQotWE1MRG9j
dW1lbnRQYXJzZXJTY29wZTo6WE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9h
ZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAs
IG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5lcmljRXJyb3IpCi0gICAgLCBtX29sZFN0cnVj
dHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0dXJlZEVycm9yKQotICAgICwgbV9vbGRFcnJvckNvbnRl
eHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKLSNlbmRpZgotewotICAgIGN1cnJlbnRDYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOwotfQotCi0jaWYgRU5BQkxFKFhT
TFQpCi1YTUxEb2N1bWVudFBhcnNlclNjb3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVu
YyBnZW5lcmljRXJyb3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJv
ckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4dCkKLSAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyKQotICAgICwgbV9vbGRHZW5lcmljRXJyb3JG
dW5jKHhtbEdlbmVyaWNFcnJvcikKLSAgICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxT
dHJ1Y3R1cmVkRXJyb3IpCi0gICAgLCBtX29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JD
b250ZXh0KQotewotICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291
cmNlTG9hZGVyOwotICAgIGlmIChnZW5lcmljRXJyb3JGdW5jKQotICAgICAgICB4bWxTZXRHZW5l
cmljRXJyb3JGdW5jKGVycm9yQ29udGV4dCwgZ2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgaWYgKHN0
cnVjdHVyZWRFcnJvckZ1bmMpCi0gICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJy
b3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKLX0KLSNlbmRpZgotCi1YTUxEb2N1bWVu
dFBhcnNlclNjb3BlOjp+WE1MRG9jdW1lbnRQYXJzZXJTY29wZSgpCi17Ci0gICAgY3VycmVudENh
Y2hlZFJlc291cmNlTG9hZGVyID0gbV9vbGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBt
X29sZEdlbmVyaWNFcnJvckZ1bmMpOwotICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9v
bGRFcnJvckNvbnRleHQsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyk7Ci0jZW5kaWYKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDA0M2I0OGIxMWVjNWI4ODM2MGFlM2UxNzliNWQxZWUx
MmRmZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFhNTERvY3VtZW50UGFyc2VyU2NvcGVfaAotI2RlZmluZSBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgRU5B
QkxFKFhTTFQpCi0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSAgICBj
bGFzcyBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoWE1MRG9jdW1lbnRQYXJzZXJTY29wZSk7Ci0gICAgcHVibGljOgotICAgICAgICBYTUxEb2N1
bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
cik7Ci0gICAgICAgIH5YTUxEb2N1bWVudFBhcnNlclNjb3BlKCk7Ci0KLSAgICAgICAgc3RhdGlj
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0KLSNp
ZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHhtbEdlbmVyaWNFcnJvckZ1bmMgZ2Vu
ZXJpY0Vycm9yRnVuYywgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzdHJ1Y3R1cmVkRXJyb3JGdW5j
ID0gMCwgdm9pZCogZXJyb3JDb250ZXh0ID0gMCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyOwot
Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvckZ1bmMgbV9vbGRHZW5l
cmljRXJyb3JGdW5jOwotICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIG1fb2xkU3RydWN0
dXJlZEVycm9yRnVuYzsKLSAgICAgICAgdm9pZCogbV9vbGRFcnJvckNvbnRleHQ7Ci0jZW5kaWYK
LSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2M2VhZDFhM2Y5Zjg2ZTM5Y2Q1MGYwZDczYWY5MGYz
Njk2MzdiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
WE1MRG9jdW1lbnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgorI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKKyNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RWxl
bWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmVl
RGVwdGhMaW1pdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworY29uc3QgaW50IG1heEVycm9ycyA9IDI1OworCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpwdXNoQ3VycmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKK3sKKyAgICBBU1NFUlQobik7Cisg
ICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOworICAgIGlmIChuICE9IGRvY3VtZW50KCkpCisgICAg
ICAgIG4tPnJlZigpOworICAgIG1fY3VycmVudE5vZGVTdGFjay5hcHBlbmQobV9jdXJyZW50Tm9k
ZSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG47CisgICAgaWYgKG1fY3VycmVudE5vZGVTdGFjay5z
aXplKCkgPiBtYXhET01UcmVlRGVwdGgpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRXhj
ZXNzaXZlIG5vZGUgbmVzdGluZy4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30K
Kwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUoKQoreworICAgIGlmICgh
bV9jdXJyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
U3RhY2suc2l6ZSgpKTsKKworICAgIGlmIChtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCisg
ICAgICAgIG1fY3VycmVudE5vZGUtPmRlcmVmKCk7CisKKyAgICBtX2N1cnJlbnROb2RlID0gbV9j
dXJyZW50Tm9kZVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnROb2RlU3RhY2sucmVtb3ZlTGFz
dCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjbGVhckN1cnJlbnROb2RlU3RhY2so
KQoreworICAgIGlmIChtX2N1cnJlbnROb2RlICYmIG1fY3VycmVudE5vZGUgIT0gZG9jdW1lbnQo
KSkKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+ZGVyZWYoKTsKKyAgICBtX2N1cnJlbnROb2RlID0g
MDsKKyAgICBtX2xlYWZUZXh0Tm9kZSA9IDA7CisKKyAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNr
LnNpemUoKSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBt
X2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAtLWkpCisgICAgICAgICAgICBt
X2N1cnJlbnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2Rl
U3RhY2tbMF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IGRvY3VtZW50KCkpCisgICAgICAg
ICAgICBtX2N1cnJlbnROb2RlU3RhY2tbMF0tPmRlcmVmKCk7CisgICAgICAgIG1fY3VycmVudE5v
ZGVTdGFjay5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5z
ZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHMpCit7CisgICAgU3RyaW5nIHBhcnNlU3RyaW5nID0gcy50b1N0cmluZygpOworCisgICAg
aWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9v
cmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSArPSBwYXJzZVN0cmluZzsKKworICAgIGlmIChpc1N0
b3BwZWQoKSB8fCBtX3Nhd1hTTFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQocyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb1dyaXRlKHMudG9TdHJpbmcoKSk7CisKKyAgICAv
LyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBl
dmVudHMuCisgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMo
KTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIG0sIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQorewor
ICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKSkpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0aW9u
MSBwb3NpdGlvbikKK3sKKyAgICBpZiAodHlwZSA9PSBmYXRhbCB8fCAobV9lcnJvckNvdW50IDwg
bWF4RXJyb3JzICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9saW5lICE9IHBvc2l0aW9uLm1fbGlu
ZSAmJiBtX2xhc3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9IHBvc2l0aW9uLm1fY29sdW1uKSkg
eworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ugd2FybmluZzoKKyAg
ICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gIndhcm5pbmcgb24gbGluZSAiICsgU3Ry
aW5nOjpudW1iZXIocG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCkpICsgIiBhdCBjb2x1bW4g
IiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpICsgIjog
IiArIG07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZhdGFsOgor
ICAgICAgICAgICAgY2FzZSBub25GYXRhbDoKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZXMgKz0gImVycm9yIG9uIGxpbmUgIiArIFN0cmluZzo6bnVtYmVyKHBvc2l0aW9uLm1fbGluZS5v
bmVCYXNlZEludCgpKSArICIgYXQgY29sdW1uICIgKyBTdHJpbmc6Om51bWJlcihwb3NpdGlvbi5t
X2NvbHVtbi5vbmVCYXNlZEludCgpKSArICI6ICIgKyBtOworICAgICAgICB9CisKKyAgICAgICAg
bV9sYXN0RXJyb3JQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICArK21fZXJyb3JDb3VudDsK
KyAgICB9CisKKyAgICBpZiAodHlwZSAhPSB3YXJuaW5nKQorICAgICAgICBtX3Nhd0Vycm9yID0g
dHJ1ZTsKKworICAgIGlmICh0eXBlID09IGZhdGFsKQorICAgICAgICBzdG9wUGFyc2luZygpOwor
fQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbnRlclRleHQoKQoreworI2lmICFVU0UoUVhN
TFNUUkVBTSkKKyAgICBBU1NFUlQobV9idWZmZXJlZFRleHQuc2l6ZSgpID09IDApOworI2VuZGlm
CisgICAgQVNTRVJUKCFtX2xlYWZUZXh0Tm9kZSk7CisgICAgbV9sZWFmVGV4dE5vZGUgPSBUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgIiIpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG1fbGVhZlRleHROb2RlLmdldCgpKTsKK30KKworI2lmICFVU0UoUVhNTFNUUkVBTSkKK3N0
YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENoYXIqIHN0cmluZywgc2l6ZV90
IHNpemUpIAoreyAKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBzaXplKTsgCit9CisjZW5kaWYKKworCit2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpleGl0VGV4dCgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fbGVhZlRleHROb2RlKQorICAgICAgICByZXR1cm47CisK
KyNpZiAhVVNFKFFYTUxTVFJFQU0pCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbV9s
ZWFmVGV4dE5vZGUtPmFwcGVuZERhdGEodG9TdHJpbmcobV9idWZmZXJlZFRleHQuZGF0YSgpLCBt
X2J1ZmZlcmVkVGV4dC5zaXplKCkpLCBlYyk7CisgICAgVmVjdG9yPHhtbENoYXI+IGVtcHR5Owor
ICAgIG1fYnVmZmVyZWRUZXh0LnN3YXAoZW1wdHkpOworI2VuZGlmCisKKyAgICBpZiAobV92aWV3
ICYmICFtX2xlYWZUZXh0Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbV9sZWFmVGV4dE5vZGUt
PmF0dGFjaCgpOworCisgICAgbV9sZWFmVGV4dE5vZGUgPSAwOworfQorCit2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpkZXRhY2goKQoreworICAgIGNsZWFyQ3VycmVudE5vZGVTdGFjaygpOworICAg
IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OmVuZCgpCit7CisgICAgLy8gWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyIHdpbGwg
ZG8gYmFkIHRoaW5ncyB0byB0aGUgZG9jdW1lbnQgaWYgZG9FbmQoKSBpcyBjYWxsZWQuCisgICAg
Ly8gSSBkb24ndCBiZWxpZXZlIFhNTERvY3VtZW50UGFyc2VyUXQgbmVlZHMgZG9FbmQgY2FsbGVk
IGluIHRoZSBmcmFnbWVudCBjYXNlLgorICAgIEFTU0VSVCghbV9wYXJzaW5nRnJhZ21lbnQpOwor
CisgICAgZG9FbmQoKTsKKworICAgIC8vIGRvRW5kKCkgY291bGQgcHJvY2VzcyBhIHNjcmlwdCB0
YWcsIHRodXMgcGF1c2luZyBwYXJzaW5nLgorICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fc2F3RXJyb3IpCisgICAgICAgIGluc2VydEVycm9yTWVz
c2FnZUJsb2NrKCk7CisgICAgZWxzZSB7CisgICAgICAgIGV4aXRUZXh0KCk7CisgICAgICAgIGRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwor
ICAgIH0KKworICAgIGlmIChpc1BhcnNpbmcoKSkKKyAgICAgICAgcHJlcGFyZVRvU3RvcFBhcnNp
bmcoKTsKKyAgICBkb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERvY3VtZW50OjpJbnRlcmFjdGl2
ZSk7CisgICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNo
ZWRQYXJzaW5nKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCit7Cisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fcGFyc2VyU3RvcHBlZCkgaGVyZSwgc2lu
Y2UgaXQgZG9lcyBub3QKKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIGFueSBtZXRob2RzIG9u
IERvY3VtZW50UGFyc2VyIG9uY2UgaXQncyBiZWVuIHN0b3BwZWQuCisgICAgLy8gSG93ZXZlciwg
RnJhbWVMb2FkZXI6OnN0b3AgY2FsbHMgRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCB1bmNvbmRpdGlv
bmFsbHkuCisKKyAgICBpZiAobV9wYXJzZXJQYXVzZWQpCisgICAgICAgIG1fZmluaXNoQ2FsbGVk
ID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50
UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQoreworICAgIHJldHVybiBtX2ZpbmlzaENhbGxlZDsK
K30KKworc3RhdGljIGlubGluZSBSZWZQdHI8RWxlbWVudD4gY3JlYXRlWEhUTUxQYXJzZXJFcnJv
ckhlYWRlcihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZXMpCit7Cisg
ICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInBhcnNlcmVycm9yIiwgeGh0bWxOYW1lc3BhY2VVUkkpLCBm
YWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImRpc3Bs
YXk6IGJsb2NrOyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJweCBzb2xpZCAjYzc3OyBwYWRk
aW5nOiAwIDFlbSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91bmQtY29sb3I6ICNmZGQ7IGNv
bG9yOiBibGFjayIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCBmYWxzZSk7CisgICAgcmVwb3J0
RWxlbWVudC0+YXBwZW5kQ2hpbGQoaDMuZ2V0KCksIGVjKTsKKyAgICBoMy0+YXBwZW5kQ2hpbGQo
ZG9jLT5jcmVhdGVUZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXJy
b3JzOiIpLCBlYyk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZml4ZWQgPSBkb2MtPmNyZWF0ZUVs
ZW1lbnQoZGl2VGFnLCBmYWxzZSk7CisgICAgcmVwb3J0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZml4
ZWQuZ2V0KCksIGVjKTsKKyAgICBmaXhlZC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgImZvbnQt
ZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIpOworICAgIGZpeGVkLT5hcHBlbmRDaGls
ZChkb2MtPmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpLCBlYyk7CisKKyAgICBoMyA9IGRv
Yy0+Y3JlYXRlRWxlbWVudChoM1RhZywgZmFsc2UpOworICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVu
ZENoaWxkKGgzLmdldCgpLCBlYyk7CisgICAgaDMtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4
dE5vZGUoIkJlbG93IGlzIGEgcmVuZGVyaW5nIG9mIHRoZSBwYWdlIHVwIHRvIHRoZSBmaXJzdCBl
cnJvci4iKSwgZWMpOworCisgICAgcmV0dXJuIHJlcG9ydEVsZW1lbnQ7Cit9CisKK3ZvaWQgWE1M
RG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKCkKK3sKKyNpZiBVU0UoUVhN
TFNUUkVBTSkKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKyNl
bmRpZgorICAgIC8vIE9uZSBvciBtb3JlIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBv
ZiB0aGUgY29kZS4gRGlzcGxheSBhbiBlcnJvciBibG9jayB0byB0aGUgdXNlciBhYm92ZQorICAg
IC8vIHRoZSBub3JtYWwgY29udGVudCAodGhlIERPTSB0cmVlIGlzIGNyZWF0ZWQgbWFudWFsbHkg
YW5kIGluY2x1ZGVzIGxpbmUvY29sIGluZm8gcmVnYXJkaW5nCisgICAgLy8gd2hlcmUgdGhlIGVy
cm9ycyBhcmUgbG9jYXRlZCkKKworICAgIC8vIENyZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMt
PmRvY3VtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3VtZW50RWxlbWVudCA9IGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgeworICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dChodG1sVGFnLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxl
bWVudCwgZWMpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENo
aWxkKGJvZHksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKKyAg
ICB9CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQtPm5hbWVz
cGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpIHsKKyAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywg
ZmFsc2UpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvY3VtZW50LT5jcmVhdGVF
bGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxk
KGJvZHksIGVjKTsKKyAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBl
Yyk7CisgICAgICAgIGRvY3VtZW50LT5hcHBlbmRDaGlsZChyb290RWxlbWVudC5nZXQoKSwgZWMp
OworICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgIH0KKyNlbmRpZgor
ICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJv
ckhlYWRlcihkb2N1bWVudCwgbV9lcnJvck1lc3NhZ2VzKTsKKyAgICBkb2N1bWVudEVsZW1lbnQt
Pmluc2VydEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVsZW1lbnQtPmZpcnN0Q2hpbGQo
KSwgZWMpOworI2lmIEVOQUJMRShYU0xUKQorICAgIGlmIChkb2N1bWVudC0+dHJhbnNmb3JtU291
cmNlRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gZG9j
dW1lbnQtPmNyZWF0ZUVsZW1lbnQocFRhZywgZmFsc2UpOworICAgICAgICBwYXJhZ3JhcGgtPnNl
dEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIik7CisgICAgICAgIHBh
cmFncmFwaC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3Vt
ZW50IHdhcyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRyYW5zZm9ybWF0aW9uLiBU
aGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20gdGhlIHRyYW5zZm9ybWVk
IHJlc3VsdC4iKSwgZWMpOworICAgICAgICByZXBvcnRFbGVtZW50LT5hcHBlbmRDaGlsZChwYXJh
Z3JhcGgucmVsZWFzZSgpLCBlYyk7CisgICAgfQorI2VuZGlmCisgICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQoreworICAgIEFTU0VSVF9VTlVT
RUQodW51c2VkUmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1fcGVuZGluZ1NjcmlwdCk7Cisg
ICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDApOworCisgICAgU2Ny
aXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAgYm9v
bCBlcnJvck9jY3VycmVkID0gbV9wZW5kaW5nU2NyaXB0LT5lcnJvck9jY3VycmVkKCk7CisgICAg
Ym9vbCB3YXNDYW5jZWxlZCA9IG1fcGVuZGluZ1NjcmlwdC0+d2FzQ2FuY2VsZWQoKTsKKworICAg
IG1fcGVuZGluZ1NjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fcGVuZGluZ1Njcmlw
dCA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gZSA9IG1fc2NyaXB0RWxlbWVudDsKKyAgICBt
X3NjcmlwdEVsZW1lbnQgPSAwOworCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9
IHRvU2NyaXB0RWxlbWVudChlLmdldCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisK
KyAgICAvLyBKYXZhU2NyaXB0IGNhbiBkZXRhY2ggdGhpcyBwYXJzZXIsIG1ha2Ugc3VyZSBpdCdz
IGtlcHQgYWxpdmUgZXZlbiBpZiBkZXRhY2hlZC4KKyAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJz
ZXI+IHByb3RlY3QodGhpcyk7CisgICAgCisgICAgaWYgKGVycm9yT2NjdXJyZWQpCisgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIGVsc2UgaWYgKCF3YXND
YW5jZWxlZCkgeworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNv
ZGUpOworICAgICAgICBzY3JpcHRFbGVtZW50LT5kaXNwYXRjaExvYWRFdmVudCgpOworICAgIH0K
KworICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICBpZiAoIWlzRGV0YWNoZWQoKSAmJiAh
bV9yZXF1ZXN0aW5nU2NyaXB0KQorICAgICAgICByZXN1bWVQYXJzaW5nKCk7Cit9CisKK2Jvb2wg
WE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BlbmRpbmdTY3JpcHQ7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNl
UGFyc2luZygpCit7CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhcnNlclBhdXNlZCA9IHRydWU7Cit9CisKK2Jvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIGlmICghY2h1bmsubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
aW1wbGVtZW50IHRoZSBIVE1MNSBYTUwgRnJhZ21lbnQgcGFyc2luZyBhbGdvcml0aG06CisgICAg
Ly8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0
aXBhZ2UvdGhlLXhodG1sLXN5bnRheC5odG1sI3htbC1mcmFnbWVudC1wYXJzaW5nLWFsZ29yaXRo
bQorICAgIC8vIEZvciBub3cgd2UgaGF2ZSBhIGhhY2sgZm9yIHNjcmlwdC9zdHlsZSBpbm5lckhU
TUwgc3VwcG9ydDoKKyAgICBpZiAoY29udGV4dEVsZW1lbnQgJiYgKGNvbnRleHRFbGVtZW50LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGNvbnRleHRFbGVtZW50LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpKSB7CisgICAgICAgIGZyYWdtZW50LT5wYXJz
ZXJBZGRDaGlsZChmcmFnbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUoY2h1bmspKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFhNTERvY3VtZW50UGFy
c2VyPiBwYXJzZXIgPSBYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKGZyYWdtZW50LCBjb250ZXh0
RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgYm9vbCB3ZWxsRm9ybWVkID0gcGFy
c2VyLT5hcHBlbmRGcmFnbWVudFNvdXJjZShjaHVuayk7CisgICAgLy8gRG8gbm90IGNhbGwgZmlu
aXNoKCkuICBDdXJyZW50IGZpbmlzaCgpIGFuZCBkb0VuZCgpIGltcGxlbWVudGF0aW9ucyB0b3Vj
aCB0aGUgbWFpbiBEb2N1bWVudC9sb2FkZXIKKyAgICAvLyBhbmQgY2FuIGNhdXNlIGNyYXNoZXMg
aW4gdGhlIGZyYWdtZW50IGNhc2UuCisgICAgcGFyc2VyLT5kZXRhY2goKTsgLy8gQWxsb3dzIH5E
b2N1bWVudFBhcnNlciB0byBhc3NlcnQgaXQgd2FzIGRldGFjaGVkIGJlZm9yZSBkZXN0cnVjdGlv
bi4KKyAgICByZXR1cm4gd2VsbEZvcm1lZDsgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSdzIHdl
bGxGb3JtZWQgaXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2VsbEZvcm1lZCgpLgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjZGQyNWM1NWRjMDM1YjhmMzJhNzQxNzVhNDZkOTg5
ZWViMjc1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBYTUxEb2N1bWVu
dFBhcnNlcl9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2VyX2gKKworI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisj
aWYgVVNFKFFYTUxTVFJFQU0pCisjaW5jbHVkZSA8cXhtbHN0cmVhbS5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBD
YWNoZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIERvY3VtZW50
RnJhZ21lbnQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZVZp
ZXc7CitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzOworY2xhc3MgVGV4dDsKKworI2lmICFVU0UoUVhN
TFNUUkVBTSkKKyAgICBjbGFzcyBYTUxQYXJzZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8
WE1MUGFyc2VyQ29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8WE1MUGFyc2VyQ29udGV4dD4gY3JlYXRlTWVtb3J5UGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIs
IHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3RyaW5nJiBjaHVuayk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5k
bGVyUHRyLCB2b2lkKiB1c2VyRGF0YSk7CisgICAgICAgIH5YTUxQYXJzZXJDb250ZXh0KCk7Cisg
ICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgWE1MUGFyc2VyQ29udGV4dCh4bWxQYXJzZXJD
dHh0UHRyIGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBtX2NvbnRleHQ7CisgICAg
fTsKKyNlbmRpZgorCisgICAgY2xhc3MgWE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFhNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBG
cmFtZVZpZXcqIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gcGVybWlzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBYTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgZWxlbWVudCwgcGVybWlzc2lvbikpOwor
ICAgICAgICB9CisKKyAgICAgICAgflhNTERvY3VtZW50UGFyc2VyKCk7CisKKyAgICAgICAgLy8g
RXhwb3NlZCBmb3IgY2FsbGJhY2tzOgorICAgICAgICBlbnVtIEVycm9yVHlwZSB7IHdhcm5pbmcs
IG5vbkZhdGFsLCBmYXRhbCB9OworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwg
Y29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwor
ICAgICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
VGV4dFBvc2l0aW9uMSk7CisKKyAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlz
WEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9CisgICAgICAgIGJvb2wg
aXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9
CisjZW5kaWYKKworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29u
c3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2Fu
IHdlIHJlbW92ZSBpdD8KKyAgICAgICAgdmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7
IHJldHVybiAhbV9zYXdFcnJvcjsgfQorCisgICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0
aW9uKCkgY29uc3Q7CisgICAgICAgIFRleHRQb3NpdGlvbjEgdGV4dFBvc2l0aW9uT25lQmFzZWQo
KSBjb25zdDsKKworICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1hNTFZlcnNpb24oY29uc3Qg
U3RyaW5nJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBYTUxEb2N1bWVudFBhcnNlcihEb2N1
bWVudCosIEZyYW1lVmlldyogPSAwKTsKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1l
bnRGcmFnbWVudCosIEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworCisg
ICAgICAgIC8vIEZyb20gRG9jdW1lbnRQYXJzZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2Vy
dChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGVuZChj
b25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
dG9wUGFyc2luZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgICAgIHZp
cnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAgaW50IGNvbHVtbk51bWJlcigp
IGNvbnN0OworCisgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAgICAg
dm9pZCBlbmQoKTsKKworICAgICAgICB2b2lkIHBhdXNlUGFyc2luZygpOworICAgICAgICB2b2lk
IHJlc3VtZVBhcnNpbmcoKTsKKworICAgICAgICBib29sIGFwcGVuZEZyYWdtZW50U291cmNlKGNv
bnN0IFN0cmluZyYpOworCisjaWYgVVNFKFFYTUxTVFJFQU0pCitwcml2YXRlOgorICAgICAgICB2
b2lkIHBhcnNlKCk7CisgICAgICAgIHZvaWQgc3RhcnREb2N1bWVudCgpOworICAgICAgICB2b2lk
IHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7Cisg
ICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAgIHZv
aWQgcGFyc2VDb21tZW50KCk7CisgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyAgICAgICAg
dm9pZCBwYXJzZUR0ZCgpOworICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CisjZWxzZQor
cHVibGljOgorICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCisgICAgICAgIHZv
aWQgZXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpIFdU
Rl9BVFRSSUJVVEVfUFJJTlRGKDMsIDApOworICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5zKGNv
bnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBjb25z
dCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywg
aW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpOworICAg
ICAgICB2b2lkIGVuZEVsZW1lbnROcygpOworICAgICAgICB2b2lkIGNoYXJhY3RlcnMoY29uc3Qg
eG1sQ2hhciogcywgaW50IGxlbik7CisgICAgICAgIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9u
KGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3QgeG1sQ2hhciogZGF0YSk7CisgICAgICAgIHZv
aWQgY2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKTsKKyAgICAgICAgdm9pZCBj
b21tZW50KGNvbnN0IHhtbENoYXIqIHMpOworICAgICAgICB2b2lkIHN0YXJ0RG9jdW1lbnQoY29u
c3QgeG1sQ2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFs
b25lKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBj
b25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCk7CisgICAg
ICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgQ1N0cmluZyYgY2h1bmsgPSBDU3RyaW5n
KCkpOworCisgICAgICAgIHZvaWQgcHVzaEN1cnJlbnROb2RlKENvbnRhaW5lck5vZGUqKTsKKyAg
ICAgICAgdm9pZCBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICB2b2lkIGNsZWFyQ3VycmVudE5v
ZGVTdGFjaygpOworCisgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKKwor
ICAgICAgICB2b2lkIGVudGVyVGV4dCgpOworICAgICAgICB2b2lkIGV4aXRUZXh0KCk7CisKKyAg
ICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRvRW5kKCk7
CisKKyAgICAgICAgRnJhbWVWaWV3KiBtX3ZpZXc7CisKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2lu
YWxTb3VyY2VGb3JUcmFuc2Zvcm07CisKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVht
bFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKKyAgICAgICAgYm9vbCBtX3dyb3RlVGV4dDsKKyNlbHNl
CisgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dCA/IG1fY29udGV4dC0+Y29udGV4dCgpIDogMDsgfTsKKyAgICAgICAgUmVmUHRyPFhNTFBh
cnNlckNvbnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+
IG1fcGVuZGluZ0NhbGxiYWNrczsKKyAgICAgICAgVmVjdG9yPHhtbENoYXI+IG1fYnVmZmVyZWRU
ZXh0OworI2VuZGlmCisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fY3VycmVudE5vZGU7CisgICAg
ICAgIFZlY3RvcjxDb250YWluZXJOb2RlKj4gbV9jdXJyZW50Tm9kZVN0YWNrOworCisgICAgICAg
IFJlZlB0cjxUZXh0PiBtX2xlYWZUZXh0Tm9kZTsKKworICAgICAgICBib29sIG1fc2F3RXJyb3I7
CisgICAgICAgIGJvb2wgbV9zYXdDU1M7CisgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07
CisgICAgICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1hIVE1M
RG9jdW1lbnQ7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBE
b2N1bWVudDsKKyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgor
CisgICAgICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CisgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5n
U2NyaXB0OworICAgICAgICBib29sIG1fZmluaXNoQ2FsbGVkOworCisgICAgICAgIGludCBtX2Vy
cm9yQ291bnQ7CisgICAgICAgIFRleHRQb3NpdGlvbjEgbV9sYXN0RXJyb3JQb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlczsKKworICAgICAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKKyAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG1fc2NyaXB0RWxlbWVudDsKKyAgICAgICAgVGV4dFBvc2l0aW9uMSBtX3NjcmlwdFN0YXJ0
UG9zaXRpb247CisKKyAgICAgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKworICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKKyAg
ICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3BhY2VNYXA7CisgICAg
ICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CisgICAgICAgIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CisgICAgfTsKKworI2lmIEVOQUJM
RShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKKyNlbmRpZgorCitIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCYg
YXR0cnNPSyk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3Vt
ZW50UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYzOWZiNGVjN2RlZTA3MGE4MzUx
NWFlMGM0ZjQxMGY2YjcyODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC0wLDAgKzEsMTUxOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSA8cG1rQHBvc3QuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgorCisjaW5j
bHVkZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVk
ZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIu
aCIKKyNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNj
cmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNs
dWRlICJYTUxOU05hbWVzLmgiCisjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIgor
I2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJu
YWxzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFhTTFQp
CisjaW5jbHVkZSAiWE1MVHJlZVZpZXdlci5oIgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgor
I2VuZGlmCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVu
dC5oIgorI2VuZGlmCisKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQZW5kaW5nQ2FsbGJhY2tzKTsKK3B1YmxpYzoKKyAgICB+UGVuZGluZ0NhbGxiYWNrcygpIHsg
fQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdDYWxsYmFja3M+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdDYWxsYmFja3MpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soY29uc3QgeG1sQ2hh
ciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIq
IHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHhtbENoYXIqKiBuYW1lc3BhY2VzLCBpbnQgbmJfYXR0cmlidXRlcywg
aW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhcioqIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBPd25QdHI8UGVuZGluZ1N0YXJ0RWxlbWVudE5TQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRQdHIobmV3IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrKTsKKworICAgICAgICBjYWxs
YmFjay0+eG1sTG9jYWxOYW1lID0geG1sU3RyZHVwKHhtbExvY2FsTmFtZSk7CisgICAgICAgIGNh
bGxiYWNrLT54bWxQcmVmaXggPSB4bWxTdHJkdXAoeG1sUHJlZml4KTsKKyAgICAgICAgY2FsbGJh
Y2stPnhtbFVSSSA9IHhtbFN0cmR1cCh4bWxVUkkpOworICAgICAgICBjYWxsYmFjay0+bmJfbmFt
ZXNwYWNlcyA9IG5iX25hbWVzcGFjZXM7CisgICAgICAgIGNhbGxiYWNrLT5uYW1lc3BhY2VzID0g
c3RhdGljX2Nhc3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6ZW9mKHhtbENoYXIqKSAqIG5iX25h
bWVzcGFjZXMgKiAyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfbmFtZXNwYWNl
cyAqIDIgOyBpKyspCisgICAgICAgICAgICBjYWxsYmFjay0+bmFtZXNwYWNlc1tpXSA9IHhtbFN0
cmR1cChuYW1lc3BhY2VzW2ldKTsKKyAgICAgICAgY2FsbGJhY2stPm5iX2F0dHJpYnV0ZXMgPSBu
Yl9hdHRyaWJ1dGVzOworICAgICAgICBjYWxsYmFjay0+bmJfZGVmYXVsdGVkID0gbmJfZGVmYXVs
dGVkOworICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHhtbENoYXIq
Kj4oeG1sTWFsbG9jKHNpemVvZih4bWxDaGFyKikgKiBuYl9hdHRyaWJ1dGVzICogNSkpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgeworICAgICAgICAg
ICAgLy8gRWFjaCBhdHRyaWJ1dGUgaGFzIDUgZWxlbWVudHMgaW4gdGhlIGFycmF5OgorICAgICAg
ICAgICAgLy8gbmFtZSwgcHJlZml4LCB1cmksIHZhbHVlIGFuZCBhbiBlbmQgcG9pbnRlci4KKwor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2stPmF0dHJpYnV0ZXNbaSAqIDUgKyBqXSA9IHhtbFN0cmR1cChhdHRyaWJ1dGVzW2kg
KiA1ICsgal0pOworCisgICAgICAgICAgICBpbnQgbGVuID0gYXR0cmlidXRlc1tpICogNSArIDRd
IC0gYXR0cmlidXRlc1tpICogNSArIDNdOworCisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmli
dXRlc1tpICogNSArIDNdID0geG1sU3RybmR1cChhdHRyaWJ1dGVzW2kgKiA1ICsgM10sIGxlbik7
CisgICAgICAgICAgICBjYWxsYmFjay0+YXR0cmlidXRlc1tpICogNSArIDRdID0gY2FsbGJhY2st
PmF0dHJpYnV0ZXNbaSAqIDUgKyAzXSArIGxlbjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2Fs
bGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBw
ZW5kRW5kRWxlbWVudE5TQ2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFja3MuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJhY2spKTsKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnNDYWxsYmFjayhjb25zdCB4bWxDaGFyKiBzLCBpbnQg
bGVuKQorICAgIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdDaGFyYWN0ZXJzQ2FsbGJhY2spOworCisgICAg
ICAgIGNhbGxiYWNrLT5zID0geG1sU3RybmR1cChzLCBsZW4pOworICAgICAgICBjYWxsYmFjay0+
bGVuID0gbGVuOworCisgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNl
KCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJh
Y2soY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPFBlbmRpbmdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxsYmFjaz4gY2FsbGJh
Y2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkNhbGxiYWNrKTsK
KworICAgICAgICBjYWxsYmFjay0+dGFyZ2V0ID0geG1sU3RyZHVwKHRhcmdldCk7CisgICAgICAg
IGNhbGxiYWNrLT5kYXRhID0geG1sU3RyZHVwKGRhdGEpOworCisgICAgICAgIG1fY2FsbGJhY2tz
LmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ0RB
VEFCbG9ja0NhbGxiYWNrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCisgICAgeworICAgICAg
ICBPd25QdHI8UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihu
ZXcgUGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjayk7CisKKyAgICAgICAgY2FsbGJhY2stPnMgPSB4
bWxTdHJuZHVwKHMsIGxlbik7CisgICAgICAgIGNhbGxiYWNrLT5sZW4gPSBsZW47CisKKyAgICAg
ICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmRDb21tZW50Q2FsbGJhY2soY29uc3QgeG1sQ2hhciogcykKKyAgICB7CisgICAg
ICAgIE93blB0cjxQZW5kaW5nQ29tbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UHRyKG5l
dyBQZW5kaW5nQ29tbWVudENhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0
cmR1cChzKTsKKworICAgICAgICBtX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2sucmVsZWFzZSgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2soY29uc3Qg
eG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciog
c3lzdGVtSUQpCisgICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0ludGVybmFsU3Vic2V0Q2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRQdHIobmV3IFBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxi
YWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKKyAgICAg
ICAgY2FsbGJhY2stPmV4dGVybmFsSUQgPSB4bWxTdHJkdXAoZXh0ZXJuYWxJRCk7CisgICAgICAg
IGNhbGxiYWNrLT5zeXN0ZW1JRCA9IHhtbFN0cmR1cChzeXN0ZW1JRCk7CisKKyAgICAgICAgbV9j
YWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRFcnJvckNhbGxiYWNrKFhNTERvY3VtZW50UGFyc2VyOjpFcnJvclR5cGUgdHlwZSwgY29u
c3QgeG1sQ2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCisg
ICAgeworICAgICAgICBPd25QdHI8UGVuZGluZ0Vycm9yQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRQdHIobmV3IFBlbmRpbmdFcnJvckNhbGxiYWNrKTsKKworICAgICAgICBjYWxsYmFjay0+bWVz
c2FnZSA9IHhtbFN0cmR1cChtZXNzYWdlKTsKKyAgICAgICAgY2FsbGJhY2stPnR5cGUgPSB0eXBl
OworICAgICAgICBjYWxsYmFjay0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGNh
bGxiYWNrLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisKKyAgICAgICAgbV9jYWxsYmFj
a3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsQW5k
UmVtb3ZlRmlyc3RDYWxsYmFjayhYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtl
Rmlyc3QoKTsKKyAgICAgICAgY2FsbGJhY2stPmNhbGwocGFyc2VyKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5pc0VtcHR5KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBQZW5kaW5nQ2FsbGJhY2tzKCkgeyB9CisKKyAgICBzdHJ1Y3QgUGVuZGlu
Z0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB+UGVuZGluZ0NhbGxiYWNrKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpID0gMDsKKyAg
ICB9OworCisgICAgc3RydWN0IFBlbmRpbmdTdGFydEVsZW1lbnROU0NhbGxiYWNrIDogcHVibGlj
IFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdTdGFydEVsZW1lbnRO
U0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sRnJlZSh4bWxMb2NhbE5hbWUp
OworICAgICAgICAgICAgeG1sRnJlZSh4bWxQcmVmaXgpOworICAgICAgICAgICAgeG1sRnJlZSh4
bWxVUkkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9uYW1lc3BhY2VzICog
MjsgaSsrKQorICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZXNwYWNlc1tpXSk7CisgICAgICAg
ICAgICB4bWxGcmVlKG5hbWVzcGFjZXMpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuYl9hdHRyaWJ1dGVzOyBpKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCA0OyBqKyspCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlc1tpICogNSAr
IGpdKTsKKyAgICAgICAgICAgIHhtbEZyZWUoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXJ0RWxlbWVudE5zKHhtbExvY2FsTmFtZSwgeG1s
UHJlZml4LCB4bWxVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5i
X25hbWVzcGFjZXMsIGNvbnN0X2Nhc3Q8Y29uc3QgeG1sQ2hhcioqPihuYW1lc3BhY2VzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfYXR0cmlidXRlcywgbmJfZGVm
YXVsdGVkLCBjb25zdF9jYXN0PGNvbnN0IHhtbENoYXIqKj4oYXR0cmlidXRlcykpOworICAgICAg
ICB9CisKKyAgICAgICAgeG1sQ2hhciogeG1sTG9jYWxOYW1lOworICAgICAgICB4bWxDaGFyKiB4
bWxQcmVmaXg7CisgICAgICAgIHhtbENoYXIqIHhtbFVSSTsKKyAgICAgICAgaW50IG5iX25hbWVz
cGFjZXM7CisgICAgICAgIHhtbENoYXIqKiBuYW1lc3BhY2VzOworICAgICAgICBpbnQgbmJfYXR0
cmlidXRlczsKKyAgICAgICAgaW50IG5iX2RlZmF1bHRlZDsKKyAgICAgICAgeG1sQ2hhcioqIGF0
dHJpYnV0ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nRW5kRWxlbWVudE5TQ2FsbGJh
Y2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwo
WE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2Vy
LT5lbmRFbGVtZW50TnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgUGVuZGlu
Z0NoYXJhY3RlcnNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2
aXJ0dWFsIH5QZW5kaW5nQ2hhcmFjdGVyc0NhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgeG1sRnJlZShzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlci0+
Y2hhcmFjdGVycyhzLCBsZW4pOworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAg
ICAgICAgaW50IGxlbjsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25DYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJhY2sgeworICAgICAgICB2aXJ0
dWFsIH5QZW5kaW5nUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2soKQorICAgICAgICB7Cisg
ICAgICAgICAgICB4bWxGcmVlKHRhcmdldCk7CisgICAgICAgICAgICB4bWxGcmVlKGRhdGEpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIq
IHBhcnNlcikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5wcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24odGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHRhcmdl
dDsKKyAgICAgICAgeG1sQ2hhciogZGF0YTsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdD
REFUQUJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsKKyAgICAgICAgdmly
dHVhbCB+UGVuZGluZ0NEQVRBQmxvY2tDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHhtbEZyZWUocyk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxE
b2N1bWVudFBhcnNlciogcGFyc2VyKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZXItPmNk
YXRhQmxvY2socywgbGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbENoYXIqIHM7CisgICAg
ICAgIGludCBsZW47CisgICAgfTsKKworICAgIHN0cnVjdCBQZW5kaW5nQ29tbWVudENhbGxiYWNr
IDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdDb21t
ZW50Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxGcmVlKHMpOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoWE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VyLT5jb21tZW50KHMpOworICAgICAgICB9
CisKKyAgICAgICAgeG1sQ2hhciogczsKKyAgICB9OworCisgICAgc3RydWN0IFBlbmRpbmdJbnRl
cm5hbFN1YnNldENhbGxiYWNrIDogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAgICAgIHZp
cnR1YWwgflBlbmRpbmdJbnRlcm5hbFN1YnNldENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgeG1sRnJlZShuYW1lKTsKKyAgICAgICAgICAgIHhtbEZyZWUoZXh0ZXJuYWxJRCk7Cisg
ICAgICAgICAgICB4bWxGcmVlKHN5c3RlbUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBhcnNlci0+aW50ZXJuYWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQp
OworICAgICAgICB9CisKKyAgICAgICAgeG1sQ2hhciogbmFtZTsKKyAgICAgICAgeG1sQ2hhciog
ZXh0ZXJuYWxJRDsKKyAgICAgICAgeG1sQ2hhciogc3lzdGVtSUQ7CisgICAgfTsKKworICAgIHN0
cnVjdCBQZW5kaW5nRXJyb3JDYWxsYmFjazogcHVibGljIFBlbmRpbmdDYWxsYmFjayB7CisgICAg
ICAgIHZpcnR1YWwgflBlbmRpbmdFcnJvckNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgeG1sRnJlZShtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBj
YWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBh
cnNlci0+aGFuZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSks
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBYTUxEb2N1
bWVudFBhcnNlcjo6RXJyb3JUeXBlIHR5cGU7CisgICAgICAgIHhtbENoYXIqIG1lc3NhZ2U7Cisg
ICAgICAgIGludCBsaW5lTnVtYmVyOworICAgICAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIH07
CisKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiA+IG1fY2FsbGJhY2tzOworfTsK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbnQgZ2xvYmFs
RGVzY3JpcHRvciA9IDA7CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBsaWJ4bWxMb2FkZXJUaHJl
YWQgPSAwOworCitzdGF0aWMgaW50IG1hdGNoRnVuYyhjb25zdCBjaGFyKikKK3sKKyAgICAvLyBP
bmx5IG1hdGNoIGxvYWRzIGluaXRpYXRlZCBkdWUgdG8gdXNlcyBvZiBsaWJ4bWwyIGZyb20gd2l0
aGluIFhNTERvY3VtZW50UGFyc2VyIHRvIGF2b2lkCisgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBj
bGllbnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCisgICAgcmV0dXJuIFhNTERvY3VtZW50UGFy
c2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciAmJiBjdXJyZW50VGhyZWFkKCkg
PT0gbGlieG1sTG9hZGVyVGhyZWFkOworfQorCitjbGFzcyBPZmZzZXRCdWZmZXIgeworcHVibGlj
OgorICAgIE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiks
IG1fY3VycmVudE9mZnNldCgwKSB7IH0KKworICAgIGludCByZWFkT3V0Qnl0ZXMoY2hhciogb3V0
cHV0QnVmZmVyLCB1bnNpZ25lZCBhc2tlZFRvUmVhZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVzTGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVudE9mZnNldDsKKyAgICAgICAg
dW5zaWduZWQgbGVuVG9Db3B5ID0gbWluKGFza2VkVG9SZWFkLCBieXRlc0xlZnQpOworICAgICAg
ICBpZiAobGVuVG9Db3B5KSB7CisgICAgICAgICAgICBtZW1jcHkob3V0cHV0QnVmZmVyLCBtX2J1
ZmZlci5kYXRhKCkgKyBtX2N1cnJlbnRPZmZzZXQsIGxlblRvQ29weSk7CisgICAgICAgICAgICBt
X2N1cnJlbnRPZmZzZXQgKz0gbGVuVG9Db3B5OworICAgICAgICB9CisgICAgICAgIHJldHVybiBs
ZW5Ub0NvcHk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRPZmZzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBzd2l0Y2hU
b1VURjE2KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKK3sKKyAgICAvLyBIYWNrIGFyb3VuZCBsaWJ4
bWwyJ3MgbGFjayBvZiBlbmNvZGluZyBvdmVyaWRlIHN1cHBvcnQgYnkgbWFudWFsbHkKKyAgICAv
LyByZXNldHRpbmcgdGhlIGVuY29kaW5nIHRvIFVURi0xNiBiZWZvcmUgZXZlcnkgY2h1bmsuICBP
dGhlcndpc2UgbGlieG1sCisgICAgLy8gd2lsbCBkZXRlY3QgPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0iPGVuY29kaW5nIG5hbWU+Ij8+IGJsb2NrcworICAgIC8vIGFuZCBzd2l0Y2ggZW5j
b2RpbmdzLCBjYXVzaW5nIHRoZSBwYXJzZSB0byBmYWlsLgorICAgIGNvbnN0IFVDaGFyIEJPTSA9
IDB4RkVGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOworICAgIHhtbFN3aXRjaEVuY29k
aW5nKGN0eHQsIEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxF
IDogWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRSk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFs
bG93RXh0ZXJuYWxMb2FkKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5n
ID0gdXJsLnN0cmluZygpOworCisgICAgLy8gT24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGxpYnht
bCBhc2tzIGZvciB0aGlzIFVSTCwgdGhlCisgICAgLy8gIlhNTF9YTUxfREVGQVVMVF9DQVRBTE9H
Iiwgb24gaW5pdGlhbGl6YXRpb24uCisgICAgaWYgKHVybFN0cmluZyA9PSAiZmlsZTovLy9ldGMv
eG1sL2NhdGFsb2ciKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbiBXaW5kb3dz
LCBsaWJ4bWwgY29tcHV0ZXMgYSBVUkwgcmVsYXRpdmUgdG8gd2hlcmUgaXRzIERMTCByZXNpZGVz
LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTovLy8iLCBmYWxzZSkgJiYgdXJs
U3RyaW5nLmVuZHNXaXRoKCIvZXRjL2NhdGFsb2ciLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBEVEQuICBUaGVyZSBpc24ndCBtdWNoIHBv
aW50IGluIGhhbW1lcmluZyB3d3cudzNjLm9yZworICAgIC8vIGJ5IHJlcXVlc3RpbmcgdGhpcyBV
UkwgZm9yIGV2ZXJ5IFhIVE1MIGRvY3VtZW50LgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0
aCgiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFNpbWlsYXJseSwgdGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiByZXF1
ZXN0aW5nIHRoZSBTVkcgRFRELgorICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiaHR0cDov
L3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHIiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgbGlieG1sIGRvZXNuJ3QgZ2l2ZSB1cyBhIGxvdCBvZiBjb250ZXh0IGZv
ciBkZWNpZGluZyB3aGV0aGVyIHRvCisgICAgLy8gYWxsb3cgdGhpcyByZXF1ZXN0LiAgSW4gdGhl
IHdvcnN0IGNhc2UsIHRoaXMgbG9hZCBjb3VsZCBiZSBmb3IgYW4KKyAgICAvLyBleHRlcm5hbCBl
bnRpdHkgYW5kIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgY291bGQgc2ltcGx5IHJlYWQgdGhlCisg
ICAgLy8gcmV0cmlldmVkIGNvbnRlbnQuICBJZiB3ZSBoYWQgbW9yZSBjb250ZXh0LCB3ZSBjb3Vs
ZCBwb3RlbnRpYWxseSBhbGxvdworICAgIC8vIHRoZSBwYXJzZXIgdG8gbG9hZCBhIERURC4gIEFz
IHRoaW5ncyBzdGFuZCwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlCisgICAgLy8gcm91dGUgYW5k
IGFsbG93IHNhbWUtb3JpZ2luIHJlcXVlc3RzIG9ubHkuCisgICAgaWYgKCFYTUxEb2N1bWVudFBh
cnNlclNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAgICBYTUxEb2N1bWVudFBhcnNl
clNjb3BlOjpjdXJyZW50Q2FjaGVkUmVzb3VyY2VMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVz
c2FnZSh1cmwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCit7CisgICAg
QVNTRVJUKFhNTERvY3VtZW50UGFyc2VyU2NvcGU6OmN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRl
cik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBsaWJ4bWxMb2FkZXJUaHJlYWQpOwor
CisgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOworCisgICAgaWYgKCFzaG91bGRBbGxvd0V4dGVy
bmFsTG9hZCh1cmwpKQorICAgICAgICByZXR1cm4gJmdsb2JhbERlc2NyaXB0b3I7CisKKyAgICBS
ZXNvdXJjZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CisKKworICAgIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVu
dENhY2hlZFJlc291cmNlTG9hZGVyOworICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNj
b3BlKDApOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUgdGhlIG9yaWdpbmFs
IGdsb2JhbCBlcnJvciBoYW5kbGVyIGFzIHdlbGwuCisKKyAgICAgICAgaWYgKGNhY2hlZFJlc291
cmNlTG9hZGVyLT5mcmFtZSgpKQorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZy
YW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9y
ZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CisKKyAgICAvLyBX
ZSBoYXZlIHRvIGNoZWNrIHRoZSBVUkwgYWdhaW4gYWZ0ZXIgdGhlIGxvYWQgdG8gY2F0Y2ggcmVk
aXJlY3RzLgorICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTYzPi4KKyAgICBpZiAoIXNob3VsZEFsbG93RXh0ZXJuYWxMb2FkKHJlc3BvbnNlLnVy
bCgpKSkKKyAgICAgICAgcmV0dXJuICZnbG9iYWxEZXNjcmlwdG9yOworCisgICAgcmV0dXJuIG5l
dyBPZmZzZXRCdWZmZXIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZEZ1bmModm9pZCogY29u
dGV4dCwgY2hhciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIC8vIERvIDAtYnl0ZSByZWFkcyBp
biBjYXNlIG9mIGEgbnVsbCBkZXNjcmlwdG9yCisgICAgaWYgKGNvbnRleHQgPT0gJmdsb2JhbERl
c2NyaXB0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgT2Zmc2V0QnVmZmVyKiBkYXRhID0g
c3RhdGljX2Nhc3Q8T2Zmc2V0QnVmZmVyKj4oY29udGV4dCk7CisgICAgcmV0dXJuIGRhdGEtPnJl
YWRPdXRCeXRlcyhidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQq
LCBjb25zdCBjaGFyKiwgaW50KQoreworICAgIC8vIEFsd2F5cyBqdXN0IGRvIDAtYnl0ZSB3cml0
ZXMKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZUZ1bmModm9pZCogY29udGV4
dCkKK3sKKyAgICBpZiAoY29udGV4dCAhPSAmZ2xvYmFsRGVzY3JpcHRvcikgeworICAgICAgICBP
ZmZzZXRCdWZmZXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxPZmZzZXRCdWZmZXIqPihjb250ZXh0KTsK
KyAgICAgICAgZGVsZXRlIGRhdGE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWYgRU5B
QkxFKFhTTFQpCitzdGF0aWMgdm9pZCBlcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4p
Cit7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlzcGxheSBlcnJvciBtZXNz
YWdlcyBzb21ld2hlcmUuCit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgZGlkSW5pdCA9IGZhbHNl
OworCitQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0
ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAg
ICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1bmMsIHJlYWRGdW5j
LCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyhtYXRjaEZ1
bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIGxpYnhtbExvYWRl
clRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9IHRydWU7CisgICAg
fQorCisgICAgeG1sUGFyc2VyQ3R4dFB0ciBwYXJzZXIgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4
dChoYW5kbGVycywgMCwgMCwgMCwgMCk7CisgICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRh
OworICAgIHBhcnNlci0+cmVwbGFjZUVudGl0aWVzID0gdHJ1ZTsKKyAgICBzd2l0Y2hUb1VURjE2
KHBhcnNlcik7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRleHQocGFy
c2VyKSk7Cit9CisKKworLy8gQ2h1bmsgc2hvdWxkIGJlIGVuY29kZWQgaW4gVVRGLTgKK1Bhc3NS
ZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlTWVtb3J5UGFy
c2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBDU3Ry
aW5nJiBjaHVuaykKK3sKKyAgICBpZiAoIWRpZEluaXQpIHsKKyAgICAgICAgeG1sSW5pdFBhcnNl
cigpOworICAgICAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKG1hdGNoRnVuYywgb3BlbkZ1
bmMsIHJlYWRGdW5jLCBjbG9zZUZ1bmMpOworICAgICAgICB4bWxSZWdpc3Rlck91dHB1dENhbGxi
YWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCB3cml0ZUZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAg
IGxpYnhtbExvYWRlclRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgZGlkSW5pdCA9
IHRydWU7CisgICAgfQorCisgICAgLy8gYXBwZW5kRnJhZ21lbnRTb3VyY2UoKSBjaGVja3MgdGhh
dCB0aGUgbGVuZ3RoIGRvZXNuJ3Qgb3ZlcmZsb3cgYW4gaW50LgorICAgIHhtbFBhcnNlckN0eHRQ
dHIgcGFyc2VyID0geG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dChjaHVuay5kYXRhKCksIGNodW5r
Lmxlbmd0aCgpKTsKKworICAgIGlmICghcGFyc2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IC8vIENvcHkgdGhlIHNheCBoYW5kbGVyCisgICAgbWVtY3B5KHBhcnNlci0+c2F4LCBoYW5kbGVy
cywgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKworICAgIC8vIFNldCBwYXJzZXIgb3B0aW9ucy4K
KyAgICAvLyBYTUxfUEFSU0VfTk9ESUNUOiBkZWZhdWx0IGRpY3Rpb25hcnkgb3B0aW9uLgorICAg
IC8vIFhNTF9QQVJTRV9OT0VOVDogZm9yY2UgZW50aXRpZXMgc3Vic3RpdHV0aW9ucy4KKyAgICB4
bWxDdHh0VXNlT3B0aW9ucyhwYXJzZXIsIFhNTF9QQVJTRV9OT0RJQ1QgfCBYTUxfUEFSU0VfTk9F
TlQpOworCisgICAgLy8gSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24KKyAgICBwYXJzZXItPnNheDIg
PSAxOworICAgIHBhcnNlci0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsgLy8gV2UgYXJl
IHBhcnNpbmcgYSBDT05URU5UCisgICAgcGFyc2VyLT5kZXB0aCA9IDA7CisgICAgcGFyc2VyLT5z
dHJfeG1sID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIEJBRF9DQVNUICJ4bWwiLCAzKTsK
KyAgICBwYXJzZXItPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAocGFyc2VyLT5kaWN0LCBCQURf
Q0FTVCAieG1sbnMiLCA1KTsKKyAgICBwYXJzZXItPnN0cl94bWxfbnMgPSB4bWxEaWN0TG9va3Vw
KHBhcnNlci0+ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsKKyAgICBwYXJzZXItPl9wcml2
YXRlID0gdXNlckRhdGE7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTFBhcnNlckNvbnRl
eHQocGFyc2VyKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcm
IHZlcnNpb24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3Vt
ZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmll
dyogZnJhbWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQor
ICAgICwgbV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV9wZW5k
aW5nQ2FsbGJhY2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgpKQorICAgICwgbV9jdXJyZW50
Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NTUyhm
YWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJzdEVs
ZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQoZmFs
c2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENhbGxl
ZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlv
bihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGluZ1Nj
cmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworfQorCitY
TUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZy
YWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV92aWV3KDApCisgICAgLCBtX2NvbnRleHQoMCkK
KyAgICAsIG1fcGVuZGluZ0NhbGxiYWNrcyhQZW5kaW5nQ2FsbGJhY2tzOjpjcmVhdGUoKSkKKyAg
ICAsIG1fY3VycmVudE5vZGUoZnJhZ21lbnQpCisgICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQorICAg
ICwgbV9zYXdDU1MoZmFsc2UpCisgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKKyAgICAs
IG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQorICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2Up
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQor
ICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcGFy
c2VyUGF1c2VkKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQorICAgICwg
bV9maW5pc2hDYWxsZWQoZmFsc2UpCisgICAgLCBtX2Vycm9yQ291bnQoMCkKKyAgICAsIG1fbGFz
dEVycm9yUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAg
LCBtX3BlbmRpbmdTY3JpcHQoMCkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRy
dWUpCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKK3sK
KyAgICBmcmFnbWVudC0+cmVmKCk7CisKKyAgICAvLyBBZGQgbmFtZXNwYWNlcyBiYXNlZCBvbiB0
aGUgcGFyZW50IG5vZGUKKyAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1TdGFjazsKKyAgICB3aGls
ZSAocGFyZW50RWxlbWVudCkgeworICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1l
bnQpOworCisgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRO
b2RlKCk7CisgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bik7CisgICAgfQorCisgICAgaWYgKGVsZW1TdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVt
U3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChO
YW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0geG1sbnNBdG9tKQorICAgICAg
ICAgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9wcmVmaXhUb05hbWVzcGFjZU1hcC5zZXQoYXR0ci0+bG9jYWxOYW1l
KCksIGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVy
ZSBtYXkgYmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdz
IG5hbWVzcGFjZS4KKyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFw
YXJlbnRFbGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVS
SSA9IHBhcmVudEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxQYXJzZXJDb250ZXh0
Ojp+WE1MUGFyc2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29udGV4dC0+bXlEb2MpCisgICAg
ICAgIHhtbEZyZWVEb2MobV9jb250ZXh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQo
bV9jb250ZXh0KTsKK30KKworWE1MRG9jdW1lbnRQYXJzZXI6On5YTUxEb2N1bWVudFBhcnNlcigp
Cit7CisgICAgLy8gVGhlIFhNTERvY3VtZW50UGFyc2VyIHdpbGwgYWx3YXlzIGJlIGRldGFjaGVk
IGJlZm9yZSBiZWluZyBkZXN0cm95ZWQuCisgICAgQVNTRVJUKG1fY3VycmVudE5vZGVTdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CisKKyAgICAvLyBGSVhNRTog
bV9wZW5kaW5nU2NyaXB0IGhhbmRsaW5nIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFhNTERvY3VtZW50
UGFyc2VyLmNwcCEKKyAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdT
Y3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNEZXRh
Y2hlZCgpKTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgaW5pdGlhbGl6ZVBhcnNlckNv
bnRleHQoKTsKKworICAgIC8vIFByb3RlY3QgdGhlIGxpYnhtbCBjb250ZXh0IGZyb20gZGVsZXRp
b24gZHVyaW5nIGEgY2FsbGJhY2sKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gY29udGV4
dCA9IG1fY29udGV4dDsKKworICAgIC8vIGxpYlhNTCB0aHJvd3MgYW4gZXJyb3IgaWYgeW91IHRy
eSB0byBzd2l0Y2ggdGhlIGVuY29kaW5nIGZvciBhbiBlbXB0eSBzdHJpbmcuCisgICAgaWYgKHBh
cnNlU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGNhdXNlIHRo
ZSBwYXJzZXIgdG8gZGV0YWNoIGR1cmluZyB4bWxQYXJzZUNodW5rCisgICAgICAgIC8vIGtlZXAg
dGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJlZlB0cjxY
TUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBzd2l0Y2hUb1VURjE2
KGNvbnRleHQtPmNvbnRleHQoKSk7CisgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2Nv
cGUoZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgICAgIHhtbFBhcnNl
Q2h1bmsoY29udGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihw
YXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIpICogcGFyc2VTdHJpbmcubGVu
Z3RoKCksIDApOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgKHdoaWNoIG1heSBiZSBydW4gdW5k
ZXIgdGhlIHhtbFBhcnNlQ2h1bmsgY2FsbHN0YWNrKSBtYXkKKyAgICAgICAgLy8gY2F1c2UgdGhl
IHBhcnNlciB0byBiZSBzdG9wcGVkIG9yIGRldGFjaGVkLgorICAgICAgICBpZiAoaXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBpcyB0
aGlzIGhlcmU/ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nlc3MgdGhlIHBhc3NlZCBzb3Vy
Y2U/CisgICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVy
KCktPnNhd0Vycm9yKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9y
LCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCisgICAgICAgIGhhbmRsZUVycm9y
KGZhdGFsLCAiRW5jb2RpbmcgZXJyb3IiLCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5saW5l
LCBjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgeG1sQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzdHJpbmcpLCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgeG1sQ2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5l
IEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcsIHNpemVf
dCBzaXplKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyksIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIEF0
b21pY1N0cmluZyB0b0F0b21pY1N0cmluZyhjb25zdCB4bWxDaGFyKiBzdHJpbmcpCit7CisgICAg
cmV0dXJuIEF0b21pY1N0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oc3RyaW5nKSk7Cit9CisKK3N0cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB7CisgICAgY29uc3Qg
eG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIqIHVyaTsKK307Cit0eXBlZGVmIHN0
cnVjdCBfeG1sU0FYMk5hbWVzcGFjZSB4bWxTQVgyTmFtZXNwYWNlOworCitzdGF0aWMgaW5saW5l
IHZvaWQgaGFuZGxlRWxlbWVudE5hbWVzcGFjZXMoRWxlbWVudCogbmV3RWxlbWVudCwgY29uc3Qg
eG1sQ2hhcioqIGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1lc3BhY2VzLCBFeGNlcHRpb25D
b2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24p
Cit7CisgICAgeG1sU0FYMk5hbWVzcGFjZSogbmFtZXNwYWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
eG1sU0FYMk5hbWVzcGFjZSo+KGxpYnhtbE5hbWVzcGFjZXMpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbmJfbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3Bh
Y2VRTmFtZSA9IHhtbG5zQXRvbTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IHRvQXRvbWljU3RyaW5nKG5hbWVzcGFjZXNbaV0udXJpKTsKKyAgICAgICAgaWYgKG5hbWVzcGFj
ZXNbaV0ucHJlZml4KQorICAgICAgICAgICAgbmFtZXNwYWNlUU5hbWUgPSAieG1sbnM6IiArIHRv
U3RyaW5nKG5hbWVzcGFjZXNbaV0ucHJlZml4KTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0
cmlidXRlTlMoWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkksIG5hbWVzcGFjZVFOYW1lLCBu
YW1lc3BhY2VVUkksIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVjKSAv
LyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHsKKyAgICBjb25zdCB4bWxDaGFyKiBs
b2NhbG5hbWU7CisgICAgY29uc3QgeG1sQ2hhciogcHJlZml4OworICAgIGNvbnN0IHhtbENoYXIq
IHVyaTsKKyAgICBjb25zdCB4bWxDaGFyKiB2YWx1ZTsKKyAgICBjb25zdCB4bWxDaGFyKiBlbmQ7
Cit9OwordHlwZWRlZiBzdHJ1Y3QgX3htbFNBWDJBdHRyaWJ1dGVzIHhtbFNBWDJBdHRyaWJ1dGVz
OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCog
bmV3RWxlbWVudCwgY29uc3QgeG1sQ2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMsIGludCBuYl9hdHRy
aWJ1dGVzLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgeG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMg
PSByZWludGVycHJldF9jYXN0PHhtbFNBWDJBdHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKKyAgICAgICAg
aW50IHZhbHVlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJ1dGVzW2ldLmVuZCAtIGF0
dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICBBdG9taWNTdHJpbmcgYXR0clZhbHVlID0gdG9B
dG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS52YWx1ZSwgdmFsdWVMZW5ndGgpOworICAgICAgICBT
dHJpbmcgYXR0clByZWZpeCA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ucHJlZml4KTsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIGF0dHJVUkkgPSBhdHRyUHJlZml4LmlzRW1wdHkoKSA/IEF0b21pY1N0
cmluZygpIDogdG9BdG9taWNTdHJpbmcoYXR0cmlidXRlc1tpXS51cmkpOworICAgICAgICBBdG9t
aWNTdHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyB0b0F0b21pY1N0cmlu
ZyhhdHRyaWJ1dGVzW2ldLmxvY2FsbmFtZSkgOiBhdHRyUHJlZml4ICsgIjoiICsgdG9TdHJpbmco
YXR0cmlidXRlc1tpXS5sb2NhbG5hbWUpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJp
YnV0ZU5TKGF0dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYywgc2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgICAgIGlmIChlYykgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
c3RhcnRFbGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGFy
KiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVSSSwgaW50IG5iX25hbWVzcGFjZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcioqIGxpYnhtbE5h
bWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4bWxD
aGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdD
YWxsYmFja3MtPmFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soeG1sTG9jYWxOYW1lLCB4bWxQ
cmVmaXgsIHhtbFVSSSwgbmJfbmFtZXNwYWNlcywgbGlieG1sTmFtZXNwYWNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2F0dHJp
YnV0ZXMsIG5iX2RlZmF1bHRlZCwgbGlieG1sQXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQ
RSBEZWNsYXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cworICAgIGlmICghbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgewor
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBs
aW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgZXhpdFRleHQoKTsKKworICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSB0
b0F0b21pY1N0cmluZyh4bWxMb2NhbE5hbWUpOworICAgIEF0b21pY1N0cmluZyB1cmkgPSB0b0F0
b21pY1N0cmluZyh4bWxVUkkpOworICAgIEF0b21pY1N0cmluZyBwcmVmaXggPSB0b0F0b21pY1N0
cmluZyh4bWxQcmVmaXgpOworCisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIHVyaS5pc051
bGwoKSkgeworICAgICAgICBpZiAoIXByZWZpeC5pc051bGwoKSkKKyAgICAgICAgICAgIHVyaSA9
IG1fcHJlZml4VG9OYW1lc3BhY2VNYXAuZ2V0KHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICB9CisKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50
KCkpIHsKKyAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcuMSBvZiBPTUEtV0FQLVhIVE1M
TVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0
aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kCisgICAgICAgIC8vIGVuc3Vy
ZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdo
dG1sJworICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwor
ICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkg
eworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVj
dHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1cmkuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6
eGh0bWxOYW1lc3BhY2VVUkk7CisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VV
Ukk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQg
PSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCisg
ICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBSZWZQ
dHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocU5hbWUs
IHRydWUpOworICAgIGlmICghbmV3RWxlbWVudCkgeworICAgICAgICBzdG9wUGFyc2luZygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aGFuZGxlRWxlbWVudE5hbWVzcGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbGlieG1sTmFtZXNwYWNl
cywgbmJfbmFtZXNwYWNlcywgZWMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhuZXdFbGVtZW50LmdldCgpLCBsaWJ4bWxBdHRyaWJ1
dGVzLCBuYl9hdHRyaWJ1dGVzLCBlYywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG5ld0VsZW1lbnQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBTY3JpcHRFbGVt
ZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOwor
ICAgIGlmIChzY3JpcHRFbGVtZW50KQorICAgICAgICBtX3NjcmlwdFN0YXJ0UG9zaXRpb24gPSB0
ZXh0UG9zaXRpb25PbmVCYXNlZCgpOworCisgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hp
bGQobmV3RWxlbWVudC5nZXQoKSk7CisKKyAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5n
ZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRh
ZykpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KG5ld0VsZW1lbnQuZ2V0
KCkpLT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisjZW5kaWYKKworICAgIGlmICghbV9wYXJzaW5nRnJh
Z21lbnQgJiYgaXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlKCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCit7
CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJz
ZXJQYXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFbmRFbGVtZW50
TlNDYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSmF2YVNjcmlw
dCBjYW4gZGV0YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhpcyBpcyBub3QgcmVsZWFzZWQK
KyAgICAvLyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8WE1MRG9j
dW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBleGl0VGV4dCgpOworCisgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IG4gPSBtX2N1cnJlbnROb2RlOworICAgIG4tPmZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpOworCisgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQgJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSkpKSB7CisgICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG4tPnJlbW92ZShl
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUo
KSB8fCAhbV92aWV3KSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4uZ2V0KCkpOworCisgICAgLy8gVGhlIGVsZW1lbnQncyBwYXJlbnQgbWF5IGhhdmUgYWxyZWFk
eSBiZWVuIHJlbW92ZWQgZnJvbSBkb2N1bWVudC4KKyAgICAvLyBQYXJzaW5nIGNvbnRpbnVlcyBp
biB0aGlzIGNhc2UsIGJ1dCBzY3JpcHRzIGFyZW4ndCBleGVjdXRlZC4KKyAgICBpZiAoIWVsZW1l
bnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2Ny
aXB0RWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQpIHsKKyAgICAgICAg
cG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0
IGxvYWQgZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cp
LgorICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQg
PSB0cnVlOworCisgICAgYm9vbCBzdWNjZXNzZnVsbHlQcmVwYXJlZCA9IHNjcmlwdEVsZW1lbnQt
PnByZXBhcmVTY3JpcHQobV9zY3JpcHRTdGFydFBvc2l0aW9uLCBTY3JpcHRFbGVtZW50OjpBbGxv
d0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGlmICghc3VjY2Vzc2Z1bGx5UHJlcGFy
ZWQpIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5p
c1NjcmlwdFR5cGVTdXBwb3J0ZWQoU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5UeXBl
QXR0cmlidXRlKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQodHJ1ZSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhN
RTogU2NyaXB0IGV4ZWN1dGlvbiBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgLy8g
dGhlIGxpYnhtbDIgYW5kIFF0IFhNTERvY3VtZW50UGFyc2VyIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkKKyAg
ICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJl
UGFyc2VyRXhlY3V0ZWQoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0
RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBl
bGVtZW50OworICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisK
KyAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBh
bHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQuCisgICAgICAgICAgICBp
ZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisKKyAgICAgICAg
Ly8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBkZXRhY2hlZCB0aGUgcGFyc2VyCisgICAgICAgIGlmIChp
c0RldGFjaGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVxdWVzdGlu
Z1NjcmlwdCA9IGZhbHNlOworICAgIHBvcEN1cnJlbnROb2RlKCk7Cit9CisKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNoYXJhY3RlcnMoY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAg
ICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBh
dXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENoYXJhY3RlcnNDYWxs
YmFjayhzLCBsZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xlYWZU
ZXh0Tm9kZSkKKyAgICAgICAgZW50ZXJUZXh0KCk7CisgICAgbV9idWZmZXJlZFRleHQuYXBwZW5k
KHMsIGxlbik7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKEVycm9yVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgaWYgKGlzU3Rv
cHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxF
UihSVkNUKSB8fCBDT01QSUxFUihNSU5HVykKKyAgICBjaGFyIG1bMTAyNF07CisgICAgdnNucHJp
bnRmKG0sIHNpemVvZihtKSAtIDEsIG1lc3NhZ2UsIGFyZ3MpOworI2Vsc2UKKyAgICBjaGFyKiBt
OworICAgIGlmICh2YXNwcmludGYoJm0sIG1lc3NhZ2UsIGFyZ3MpID09IC0xKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgbV9wZW5k
aW5nQ2FsbGJhY2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgeG1sQ2hhcio+KG0pLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICBl
bHNlCisgICAgICAgIGhhbmRsZUVycm9yKHR5cGUsIG0sIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVt
YmVyKCkpOworCisjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhQ09N
UElMRVIoTUlOR1cpCisgICAgZnJlZShtKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25z
dCB4bWxDaGFyKiBkYXRhKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7CisgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNr
cy0+YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2FsbGJhY2sodGFyZ2V0LCBkYXRhKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICAvLyAjIyMgaGFu
ZGxlIGV4Y2VwdGlvbnMKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uPiBwaSA9IGRvY3VtZW50KCktPmNyZWF0ZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbigKKyAgICAgICAgdG9TdHJpbmcodGFyZ2V0KSwgdG9TdHJpbmcoZGF0YSksIGVjKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHBpLT5zZXRDcmVhdGVkQnlQYXJz
ZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChwaS5nZXQoKSk7
CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkpCisgICAgICAgIHBpLT5hdHRhY2go
KTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlmIChwaS0+aXND
U1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lmIEVOQUJMRShYU0xUKQorICAgIG1f
c2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOworICAg
IGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7Cisg
ICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYXJzZXJQ
YXVzZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRDREFUQUJsb2NrQ2Fs
bGJhY2socywgbGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7
CisKKyAgICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVh
dGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAgbV9jdXJyZW50Tm9kZS0+cGFy
c2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+
YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbW1lbnQoY29uc3QgeG1sQ2hhciogcykKK3sKKyAgICBpZiAoaXNTdG9w
cGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAg
ICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZENvbW1lbnRDYWxsYmFjayhzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8Q29tbWVu
dD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7Cisg
ICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CisgICAgaWYg
KG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3Tm9kZS0+YXR0YWNo
KCk7Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgeG1s
Q2hhciogdmVyc2lvbiwgY29uc3QgeG1sQ2hhciogZW5jb2RpbmcsIGludCBzdGFuZGFsb25lKQor
eworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKHZlcnNpb24pCisgICAgICAg
IGRvY3VtZW50KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVyc2lvbiksIGVjKTsKKyAgICBk
b2N1bWVudCgpLT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUgPT0gMSwgZWMpOyAvLyBwb3Nz
aWJsZSB2YWx1ZXMgYXJlIDAsIDEsIGFuZCAtMQorICAgIGlmIChlbmNvZGluZykKKyAgICAgICAg
ZG9jdW1lbnQoKS0+c2V0WE1MRW5jb2RpbmcodG9TdHJpbmcoZW5jb2RpbmcpKTsKK30KKwordm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRG9jdW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7Cisj
aWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsK
KyNlbmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25z
dCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFy
KiBzeXN0ZW1JRCkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3BhcnNlclBhdXNlZCkgeworICAgICAgICBtX3BlbmRpbmdDYWxsYmFja3MtPmFw
cGVuZEludGVybmFsU3Vic2V0Q2FsbGJhY2sobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50KCkpIHsKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7
CisgICAgICAgIFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CisgICAgICAgIGlmIChl
eHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIKKyAgICAgICAg
ICAgIHx8IGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikg
eworICAgICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFt
ZSgpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZ
UEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51
bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAg
ICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0
b1N0cmluZyhzeXN0ZW1JRCkpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgWE1MRG9jdW1l
bnRQYXJzZXIqIGdldFBhcnNlcih2b2lkKiBjbG9zdXJlKQoreworICAgIHhtbFBhcnNlckN0eHRQ
dHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBhcnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxYTUxEb2N1bWVudFBhcnNlcio+KGN0eHQtPl9wcml2YXRlKTsKK30K
KworLy8gVGhpcyBpcyBhIGhhY2sgYXJvdW5kIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTIxOQorLy8gT3RoZXJ3aXNlIGxpYnhtbCBzZWVtcyB0byBjYWxsIGFs
bCB0aGUgU0FYIGNhbGxiYWNrcyB0d2ljZSBmb3IgYW55IHJlcGxhY2VkIGVudGl0eS4KK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKHZvaWQqIGNsb3N1cmUpCit7
CisjaWYgTElCWE1MX1ZFUlNJT04gPj0gMjA2MjcKKyAgICBVTlVTRURfUEFSQU0oY2xvc3VyZSk7
CisKKyAgICAvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBsaWJ4bWwgMi42LjI3LgorICAg
IHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHhtbFBhcnNlckN0
eHRQdHI+KGNsb3N1cmUpLT5ub2RlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0RWxl
bWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWUsIGNv
bnN0IHhtbENoYXIqIHByZWZpeCwgY29uc3QgeG1sQ2hhciogdXJpLCBpbnQgbmJfbmFtZXNwYWNl
cywgY29uc3QgeG1sQ2hhcioqIG5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJf
ZGVmYXVsdGVkLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3sKKyAgICBpZiAo
aGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhsb2NhbG5hbWUsIHByZWZpeCwg
dXJpLCBuYl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0
ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZCBlbmRFbGVtZW50TnNIYW5k
bGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4bWxDaGFyKiwgY29uc3Qg
eG1sQ2hhciopCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+ZW5kRWxlbWVudE5z
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYXJhY3RlcnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNv
bnN0IHhtbENoYXIqIHMsIGludCBsZW4pCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRp
dHlCdWcoY2xvc3VyZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJl
KS0+Y2hhcmFjdGVycyhzLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIHRhcmdldCwgY29uc3Qg
eG1sQ2hhciogZGF0YSkKK3sKKyAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9z
dXJlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5wcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgY2RhdGFCbG9j
a0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKK3sKKyAg
ICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eUJ1ZyhjbG9zdXJlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5jZGF0YUJsb2NrKHMsIGxlbik7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIGNv
bW1lbnQpCit7CisgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRpdHlCdWcoY2xvc3VyZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+Y29tbWVudChjb21tZW50
KTsKK30KKworV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykKK3N0YXRpYyB2b2lkIHdhcm5pbmdI
YW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2
YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2Vy
KGNsb3N1cmUpLT5lcnJvcihYTUxEb2N1bWVudFBhcnNlcjo6d2FybmluZywgbWVzc2FnZSwgYXJn
cyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKQor
c3RhdGljIHZvaWQgZmF0YWxFcnJvckhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBt
ZXNzYWdlKTsKKyAgICBnZXRQYXJzZXIoY2xvc3VyZSktPmVycm9yKFhNTERvY3VtZW50UGFyc2Vy
OjpmYXRhbCwgbWVzc2FnZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCitXVEZfQVRU
UklCVVRFX1BSSU5URigyLCAzKQorc3RhdGljIHZvaWQgbm9ybWFsRXJyb3JIYW5kbGVyKHZvaWQq
IGNsb3N1cmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgbWVzc2FnZSk7CisgICAgZ2V0UGFyc2VyKGNsb3N1cmUpLT5l
cnJvcihYTUxEb2N1bWVudFBhcnNlcjo6bm9uRmF0YWwsIG1lc3NhZ2UsIGFyZ3MpOworICAgIHZh
X2VuZChhcmdzKTsKK30KKworLy8gVXNpbmcgYSBzdGF0aWMgZW50aXR5IGFuZCBtYXJraW5nIGl0
IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSBpcworLy8gYSBoYWNrIHRvIGF2b2lkIG1h
bGxvYy9mcmVlLiBVc2luZyBhIGdsb2JhbCB2YXJpYWJsZSBsaWtlIHRoaXMgY291bGQgY2F1c2Ug
dHJvdWJsZQorLy8gaWYgbGlieG1sIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2VyZSB0byBjaGFu
Z2UKK3N0YXRpYyB4bWxDaGFyIHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0WzVdID0gezAsIDAsIDAs
IDAsIDB9OworCitzdGF0aWMgeG1sRW50aXR5UHRyIHNoYXJlZFhIVE1MRW50aXR5KCkKK3sKKyAg
ICBzdGF0aWMgeG1sRW50aXR5IGVudGl0eTsKKyAgICBpZiAoIWVudGl0eS50eXBlKSB7CisgICAg
ICAgIGVudGl0eS50eXBlID0gWE1MX0VOVElUWV9ERUNMOworICAgICAgICBlbnRpdHkub3JpZyA9
IHNoYXJlZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuY29udGVudCA9IHNoYXJl
ZFhIVE1MRW50aXR5UmVzdWx0OworICAgICAgICBlbnRpdHkuZXR5cGUgPSBYTUxfSU5URVJOQUxf
UFJFREVGSU5FRF9FTlRJVFk7CisgICAgfQorICAgIHJldHVybiAmZW50aXR5OworfQorCitzdGF0
aWMgeG1sRW50aXR5UHRyIGdldFhIVE1MRW50aXR5KGNvbnN0IHhtbENoYXIqIG5hbWUpCit7Cisg
ICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KG5hbWUpKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmlu
ZyB2YWx1ZSA9IFN0cmluZygmYywgMSkudXRmOCgpOworICAgIEFTU0VSVCh2YWx1ZS5sZW5ndGgo
KSA8IDUpOworICAgIHhtbEVudGl0eVB0ciBlbnRpdHkgPSBzaGFyZWRYSFRNTEVudGl0eSgpOwor
ICAgIGVudGl0eS0+bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgZW50aXR5LT5uYW1lID0g
bmFtZTsKKyAgICBtZW1jcHkoc2hhcmVkWEhUTUxFbnRpdHlSZXN1bHQsIHZhbHVlLmRhdGEoKSwg
ZW50aXR5LT5sZW5ndGggKyAxKTsKKworICAgIHJldHVybiBlbnRpdHk7Cit9CisKK3N0YXRpYyB4
bWxFbnRpdHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFy
KiBuYW1lKQoreworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHN0YXRpY19jYXN0PHhtbFBh
cnNlckN0eHRQdHI+KGNsb3N1cmUpOworICAgIHhtbEVudGl0eVB0ciBlbnQgPSB4bWxHZXRQcmVk
ZWZpbmVkRW50aXR5KG5hbWUpOworICAgIGlmIChlbnQpIHsKKyAgICAgICAgZW50LT5ldHlwZSA9
IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWTsKKyAgICAgICAgcmV0dXJuIGVudDsKKyAg
ICB9CisKKyAgICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOworICAg
IGlmICghZW50ICYmIChnZXRQYXJzZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICAgICAgIHx8IGdldFBhcnNlcihjbG9zdXJlKS0+
aXNYSFRNTE1QRG9jdW1lbnQoKQorI2VuZGlmCisgICAgICAgKSkgeworICAgICAgICBlbnQgPSBn
ZXRYSFRNTEVudGl0eShuYW1lKTsKKyAgICAgICAgaWYgKGVudCkKKyAgICAgICAgICAgIGVudC0+
ZXR5cGUgPSBYTUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk7CisgICAgfQorCisgICAgcmV0dXJu
IGVudDsKK30KKworc3RhdGljIHZvaWQgc3RhcnREb2N1bWVudEhhbmRsZXIodm9pZCogY2xvc3Vy
ZSkKK3sKKyAgICB4bWxQYXJzZXJDdHh0KiBjdHh0ID0gc3RhdGljX2Nhc3Q8eG1sUGFyc2VyQ3R4
dCo+KGNsb3N1cmUpOworICAgIHN3aXRjaFRvVVRGMTYoY3R4dCk7CisgICAgZ2V0UGFyc2VyKGNs
b3N1cmUpLT5zdGFydERvY3VtZW50KGN0eHQtPnZlcnNpb24sIGN0eHQtPmVuY29kaW5nLCBjdHh0
LT5zdGFuZGFsb25lKTsKKyAgICB4bWxTQVgyU3RhcnREb2N1bWVudChjbG9zdXJlKTsKK30KKwor
c3RhdGljIHZvaWQgZW5kRG9jdW1lbnRIYW5kbGVyKHZvaWQqIGNsb3N1cmUpCit7CisgICAgZ2V0
UGFyc2VyKGNsb3N1cmUpLT5lbmREb2N1bWVudCgpOworICAgIHhtbFNBWDJFbmREb2N1bWVudChj
bG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIGNs
b3N1cmUsIGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNv
bnN0IHhtbENoYXIqIHN5c3RlbUlEKQoreworICAgIGdldFBhcnNlcihjbG9zdXJlKS0+aW50ZXJu
YWxTdWJzZXQobmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworICAgIHhtbFNBWDJJbnRlcm5h
bFN1YnNldChjbG9zdXJlLCBuYW1lLCBleHRlcm5hbElELCBzeXN0ZW1JRCk7Cit9CisKK3N0YXRp
YyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFy
KiwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1sQ2hhciopCit7CisgICAgU3Ry
aW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJZCk7CisgICAgaWYgKChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQorICAgICAgICB8fCAoZXh0SWQg
PT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09
ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09
ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCisgICAgICAgIHx8
IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNW
RyAxLjEvL0VOIikKKyAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjAvL0VOIikKKyAgICAgICApCisgICAgICAgIGdldFBhcnNlcihjbG9zdXJlKS0+
c2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0
aWVzIG9yIG5vdC4KK30KKworc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIo
dm9pZCosIGNvbnN0IHhtbENoYXIqLCBpbnQpCit7CisgICAgLy8gbm90aGluZyB0byBkbywgYnV0
IHdlIG5lZWQgdGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIKKyAgICAvLyBodHRwOi8vYnVn
emlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUKKyAgICAvLyBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyCit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IENTdHJpbmcmIGNodW5rKQorewor
ICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7
CisKKyAgICBzYXguZXJyb3IgPSBub3JtYWxFcnJvckhhbmRsZXI7CisgICAgc2F4LmZhdGFsRXJy
b3IgPSBmYXRhbEVycm9ySGFuZGxlcjsKKyAgICBzYXguY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNI
YW5kbGVyOworICAgIHNheC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyOworICAgIHNheC5jZGF0YUJsb2NrID0gY2RhdGFCbG9ja0hhbmRsZXI7Cisg
ICAgc2F4LmNvbW1lbnQgPSBjb21tZW50SGFuZGxlcjsKKyAgICBzYXgud2FybmluZyA9IHdhcm5p
bmdIYW5kbGVyOworICAgIHNheC5zdGFydEVsZW1lbnROcyA9IHN0YXJ0RWxlbWVudE5zSGFuZGxl
cjsKKyAgICBzYXguZW5kRWxlbWVudE5zID0gZW5kRWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXgu
Z2V0RW50aXR5ID0gZ2V0RW50aXR5SGFuZGxlcjsKKyAgICBzYXguc3RhcnREb2N1bWVudCA9IHN0
YXJ0RG9jdW1lbnRIYW5kbGVyOworICAgIHNheC5lbmREb2N1bWVudCA9IGVuZERvY3VtZW50SGFu
ZGxlcjsKKyAgICBzYXguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5hbFN1YnNldEhhbmRsZXI7Cisg
ICAgc2F4LmV4dGVybmFsU3Vic2V0ID0gZXh0ZXJuYWxTdWJzZXRIYW5kbGVyOworICAgIHNheC5p
Z25vcmFibGVXaGl0ZXNwYWNlID0gaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXI7CisgICAgc2F4
LmVudGl0eURlY2wgPSB4bWxTQVgyRW50aXR5RGVjbDsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBY
TUxfU0FYMl9NQUdJQzsKKyAgICBEb2N1bWVudFBhcnNlcjo6c3RhcnRQYXJzaW5nKCk7CisgICAg
bV9zYXdFcnJvciA9IGZhbHNlOworICAgIG1fc2F3Q1NTID0gZmFsc2U7CisgICAgbV9zYXdYU0xU
cmFuc2Zvcm0gPSBmYWxzZTsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IGZhbHNlOworCisgICAg
WE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpKTsKKyAgICBpZiAobV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fY29udGV4dCA9
IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBhcnNlcigmc2F4LCB0aGlzLCBjaHVuayk7
CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCghY2h1bmsuZGF0YSgpKTsKKyAgICAgICAgbV9j
b250ZXh0ID0gWE1MUGFyc2VyQ29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsIHRoaXMp
OworICAgIH0KK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworICAgIGlm
ICghaXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAg
Ly8gVGVsbCBsaWJ4bWwgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCkpOworICAgICAgICAgICAgICAgIHhtbFBhcnNlQ2h1bmsoY29udGV4dCgpLCAwLCAw
LCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKworI2lmIEVOQUJMRShYU0xUKQorICAgIFhNTFRyZWVWaWV3ZXIgeG1sVHJl
ZVZpZXdlcihkb2N1bWVudCgpKTsKKyAgICBib29sIHhtbFZpZXdlck1vZGUgPSAhbV9zYXdFcnJv
ciAmJiAhbV9zYXdDU1MgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmIHhtbFRyZWVWaWV3ZXIuaGFz
Tm9TdHlsZUluZm9ybWF0aW9uKCk7CisgICAgaWYgKHhtbFZpZXdlck1vZGUpCisgICAgICAgIHht
bFRyZWVWaWV3ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KCk7CisKKyAgICBpZiAobV9z
YXdYU0xUcmFuc2Zvcm0pIHsKKyAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5n
KGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JU
cmFuc2Zvcm0sIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgZG9jdW1lbnQo
KS0+c2V0VHJhbnNmb3JtU291cmNlKGFkb3B0UHRyKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSkp
OworCisgICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBk
b2N1bWVudCB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hlZXRz
LgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUlt
bWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKworICAg
ICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKKyAgICB9CisjZW5kaWYKK30KKwor
I2lmIEVOQUJMRShYU0xUKQordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRy
CisgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMgc28gdGhhdCBhIGZhaWx1cmUg
dG8gcGFyc2UgdGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgorICAgIC8vIGdvb2QgZXJyb3Ig
bWVzc2FnZXMuCisgICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgQk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oJkJPTSk7CisKKyAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlIHNjb3BlKGNhY2hlZFJl
c291cmNlTG9hZGVyLCBlcnJvckZ1bmMsIDApOworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4
bWxSZWFkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNvdXJjZS5jaGFyYWN0
ZXJzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsLmxhdGluMSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZC
RSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNMVF9QQVJTRV9P
UFRJT05TKTsKKyAgICByZXR1cm4gc291cmNlRG9jOworfQorI2VuZGlmCisKK2ludCBYTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZSBpbXBs
ZW1lbnRhdGlvbiBwcm9iYWJseSByZXR1cm5zIDEtYmFzZWQgaW50LCBidXQgbWV0aG9kIHNob3Vs
ZCByZXR1cm4gMC1iYXNlZC4KKyAgICByZXR1cm4gY29udGV4dCgpID8gY29udGV4dCgpLT5pbnB1
dC0+bGluZSA6IDE7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHJldHVy
bnMgMS1iYXNlZCBpbnQsIGJ1dCBtZXRob2Qgc2hvdWxkIHJldHVybiAwLWJhc2VkLgorICAgIHJl
dHVybiBjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxOworfQorCitUZXh0UG9z
aXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAoreworICAgIHht
bFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAg
ICAvLyBGSVhNRTogVGhlIGNvbnRleHQgcHJvYmFibHkgY29udGFpbnMgMS1iYXNlZCBudW1iZXJz
LCBidXQgd2UgdHJlYXQgdGhlbSBhcyAwLWJhc2VkLAorICAgIC8vICAgICAgICB0byBiZSBjb25z
aXN0ZW50IHdpdGggZml4bWUncyBpbiBsaW5lTnVtYmVyKCkgYW5kIGNvbHVtbk51bWJlcgorICAg
IC8vICAgICAgICBtZXRob2RzLgorICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jh
c2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KGNvbnRleHQtPmlucHV0LT5saW5lKSwKKyAgICAg
ICAgV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoY29udGV4dC0+aW5wdXQt
PmNvbCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9u
LCBpbiBjb250cmFzdCB0byB0ZXh0UG9zaXRpb24oKSBtZXRob2QuCisvLyBJdCBzaG91bGQgcmVw
bGFjZSB0ZXh0UG9zaXRpb24oKS4KK1RleHRQb3NpdGlvbjEgWE1MRG9jdW1lbnRQYXJzZXI6OnRl
eHRQb3NpdGlvbk9uZUJhc2VkKCkgY29uc3QKK3sKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRl
eHQgPSB0aGlzLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
VGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlv
bjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5s
aW5lKSwKKyAgICAgICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRl
eHQtPmlucHV0LT5jb2wpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNp
bmcoKQoreworICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOworICAgIGlmIChjb250
ZXh0KCkpCisgICAgICAgIHhtbFN0b3BQYXJzZXIoY29udGV4dCgpKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7CisgICAgQVNTRVJUKCFpc0RldGFjaGVk
KCkpOworICAgIEFTU0VSVChtX3BhcnNlclBhdXNlZCk7CisKKyAgICBtX3BhcnNlclBhdXNlZCA9
IGZhbHNlOworCisgICAgLy8gRmlyc3QsIGV4ZWN1dGUgYW55IHBlbmRpbmcgY2FsbGJhY2tzCisg
ICAgd2hpbGUgKCFtX3BlbmRpbmdDYWxsYmFja3MtPmlzRW1wdHkoKSkgeworICAgICAgICBtX3Bl
bmRpbmdDYWxsYmFja3MtPmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKHRoaXMpOworCisgICAg
ICAgIC8vIEEgY2FsbGJhY2sgcGF1c2VkIHRoZSBwYXJzZXIKKyAgICAgICAgaWYgKG1fcGFyc2Vy
UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZW4sIHdyaXRl
IGFueSBwZW5kaW5nIGRhdGEKKyAgICBTZWdtZW50ZWRTdHJpbmcgcmVzdCA9IG1fcGVuZGluZ1Ny
YzsKKyAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBhcHBlbmQocmVzdCk7CisKKyAgICAv
LyBGaW5hbGx5LCBpZiBmaW5pc2goKSBoYXMgYmVlbiBjYWxsZWQgYW5kIHdyaXRlKCkgZGlkbid0
IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBiZWluZyBxdWV1ZWQsIGNh
bGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgbV9wZW5kaW5nQ2FsbGJhY2tzLT5p
c0VtcHR5KCkpCisgICAgICAgIGVuZCgpOworfQorCitib29sIFhNTERvY3VtZW50UGFyc2VyOjph
cHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIGNodW5rKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0KTsKKyAgICBBU1NFUlQobV9wYXJzaW5nRnJhZ21lbnQpOworCisgICAgQ1N0cmlu
ZyBjaHVua0FzVXRmOCA9IGNodW5rLnV0ZjgoKTsKKyAgICAKKyAgICAvLyBsaWJ4bWwyIHRha2Vz
IGFuIGludCBmb3IgYSBsZW5ndGgsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgaGFuZGxlIFhNTCBjaHVu
a3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisgICAgaWYgKGNodW5rQXNVdGY4Lmxlbmd0aCgpID4gSU5U
X01BWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlhbGl6ZVBhcnNlckNvbnRl
eHQoY2h1bmtBc1V0ZjgpOworICAgIHhtbFBhcnNlQ29udGVudChjb250ZXh0KCkpOworICAgIGVu
ZERvY3VtZW50KCk7IC8vIENsb3NlIGFueSBvcGVuIHRleHQgbm9kZXMuCisKKyAgICAvLyBGSVhN
RTogSWYgdGhpcyBjb2RlIGlzIGFjdHVhbGx5IG5lZWRlZCwgaXQgc2hvdWxkIHByb2JhYmx5IG1v
dmUgdG8gZmluaXNoKCkKKyAgICAvLyBYTUxEb2N1bWVudFBhcnNlclF0IGhhcyBhIHNpbWlsYXIg
Y2hlY2sgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5k
T2ZEb2N1bWVudEVycm9yKSBpbiBkb0VuZCgpLgorICAgIC8vIENoZWNrIGlmIGFsbCB0aGUgY2h1
bmsgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICAgIGxvbmcgYnl0ZXNQcm9jZXNzZWQgPSB4bWxCeXRl
Q29uc3VtZWQoY29udGV4dCgpKTsKKyAgICBpZiAoYnl0ZXNQcm9jZXNzZWQgPT0gLTEgfHwgKCh1
bnNpZ25lZCBsb25nKWJ5dGVzUHJvY2Vzc2VkKSAhPSBjaHVua0FzVXRmOC5sZW5ndGgoKSkgewor
ICAgICAgICAvLyBGSVhNRTogSSBkb24ndCBiZWxpZXZlIHdlIGNhbiBoaXQgdGhpcyBjYXNlIHdp
dGhvdXQgYWxzbyBoYXZpbmcgc2VlbiBhbiBlcnJvciBvciBhIG51bGwgYnl0ZS4KKyAgICAgICAg
Ly8gSWYgd2UgaGl0IHRoaXMgQVNTRVJULCB3ZSd2ZSBmb3VuZCBhIHRlc3QgY2FzZSB3aGljaCBk
ZW1vbnN0cmF0ZXMgdGhlIG5lZWQgZm9yIHRoaXMgY29kZS4KKyAgICAgICAgQVNTRVJUKG1fc2F3
RXJyb3IgfHwgKGJ5dGVzUHJvY2Vzc2VkID49IDAgJiYgIWNodW5rQXNVdGY4LmRhdGEoKVtieXRl
c1Byb2Nlc3NlZF0pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5v
IGVycm9yIGlmIHRoZSBjaHVuayBpcyB3ZWxsIGZvcm1lZCBvciBpdCBpcyBub3QgYnV0IHdlIGhh
dmUgbm8gZXJyb3IuCisgICAgcmV0dXJuIGNvbnRleHQoKS0+d2VsbEZvcm1lZCB8fCAheG1sQ3R4
dEdldExhc3RFcnJvcihjb250ZXh0KCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0ZSB7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICBib29sIGdvdEF0dHJpYnV0ZXM7Cit9Owor
CitzdGF0aWMgdm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1
cmUsIGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogLyp4bWxQcmVm
aXgqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
eG1sQ2hhciogLyp4bWxVUkkqLywgaW50IC8qbmJfbmFtZXNwYWNlcyovLCBjb25zdCB4bWxDaGFy
KiogLypuYW1lc3BhY2VzKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgLypuYl9kZWZhdWx0ZWQqLywgY29uc3QgeG1s
Q2hhcioqIGxpYnhtbEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKHN0cmNtcChyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPih4bWxMb2NhbE5hbWUpLCAiYXR0cnMiKSAhPSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBzdGF0aWNfY2FzdDx4bWxQYXJz
ZXJDdHh0UHRyPihjbG9zdXJlKTsKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlKiBzdGF0ZSA9IHN0
YXRpY19jYXN0PEF0dHJpYnV0ZVBhcnNlU3RhdGUqPihjdHh0LT5fcHJpdmF0ZSk7CisKKyAgICBz
dGF0ZS0+Z290QXR0cmlidXRlcyA9IHRydWU7CisKKyAgICB4bWxTQVgyQXR0cmlidXRlcyogYXR0
cmlidXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eG1sU0FYMkF0dHJpYnV0ZXMqPihsaWJ4bWxBdHRy
aWJ1dGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2F0dHJpYnV0ZXM7IGkrKykgewor
ICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IHRvU3RyaW5nKGF0dHJpYnV0ZXNbaV0ubG9j
YWxuYW1lKTsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gKGludCkgKGF0dHJpYnV0ZXNbaV0u
ZW5kIC0gYXR0cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgPSB0
b1N0cmluZyhhdHRyaWJ1dGVzW2ldLnZhbHVlLCB2YWx1ZUxlbmd0aCk7CisgICAgICAgIFN0cmlu
ZyBhdHRyUHJlZml4ID0gdG9TdHJpbmcoYXR0cmlidXRlc1tpXS5wcmVmaXgpOworICAgICAgICBT
dHJpbmcgYXR0clFOYW1lID0gYXR0clByZWZpeC5pc0VtcHR5KCkgPyBhdHRyTG9jYWxOYW1lIDog
YXR0clByZWZpeCArICI6IiArIGF0dHJMb2NhbE5hbWU7CisKKyAgICAgICAgc3RhdGUtPmF0dHJp
YnV0ZXMuc2V0KGF0dHJRTmFtZSwgYXR0clZhbHVlKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcnNlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCYg
YXR0cnNPSykKK3sKKyAgICBBdHRyaWJ1dGVQYXJzZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLmdv
dEF0dHJpYnV0ZXMgPSBmYWxzZTsKKworICAgIHhtbFNBWEhhbmRsZXIgc2F4OworICAgIG1lbXNl
dCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisgICAgc2F4LnN0YXJ0RWxlbWVudE5zID0gYXR0cmli
dXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcjsKKyAgICBzYXguaW5pdGlhbGl6ZWQgPSBYTUxfU0FY
Ml9NQUdJQzsKKyAgICBSZWZQdHI8WE1MUGFyc2VyQ29udGV4dD4gcGFyc2VyID0gWE1MUGFyc2Vy
Q29udGV4dDo6Y3JlYXRlU3RyaW5nUGFyc2VyKCZzYXgsICZzdGF0ZSk7CisgICAgU3RyaW5nIHBh
cnNlU3RyaW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+PGF0dHJzICIgKyBzdHJpbmcgKyAi
IC8+IjsKKyAgICB4bWxQYXJzZUNodW5rKHBhcnNlci0+Y29udGV4dCgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBwYXJzZVN0cmluZy5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDEpOworICAgIGF0dHJzT0sgPSBzdGF0ZS5nb3RBdHRy
aWJ1dGVzOworICAgIHJldHVybiBzdGF0ZS5hdHRyaWJ1dGVzOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNWNmYTIzNDJkMGQ2NTBkMDRjMjBiYzM4ZDdmZWU2YjY4NWMwNmZhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApA
QCAtMCwwICsxLDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTERvY3VtZW50UGFy
c2VyLmgiCisKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDYWNoZWRTY3Jp
cHQuaCIKKyNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRN
TEVudGl0eVBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiU2NyaXB0
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFhIVE1M
TVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQu
aCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEVudGl0eVJlc29sdmVyIDogcHVibGljIFFYbWxTdHJlYW1FbnRpdHlSZXNvbHZl
ciB7CisgICAgdmlydHVhbCBRU3RyaW5nIHJlc29sdmVVbmRlY2xhcmVkRW50aXR5KGNvbnN0IFFT
dHJpbmcgJm5hbWUpOworfTsKKworUVN0cmluZyBFbnRpdHlSZXNvbHZlcjo6cmVzb2x2ZVVuZGVj
bGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSkKK3sKKyAgICBVQ2hhciBjID0gZGVjb2Rl
TmFtZWRFbnRpdHkobmFtZS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgcmV0dXJuIFFTdHJp
bmcoYyk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wg
WE1MRG9jdW1lbnRQYXJzZXI6OnN1cHBvcnRzWE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNp
b24pCit7CisgICAgcmV0dXJuIHZlcnNpb24gPT0gIjEuMCI7Cit9CisKK1hNTERvY3VtZW50UGFy
c2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIEZyYW1lVmlldyogZnJh
bWVWaWV3KQorICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwg
bV92aWV3KGZyYW1lVmlldykKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAgICwgbV9jdXJy
ZW50Tm9kZShkb2N1bWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3Nhd0NT
UyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwgbV9zYXdGaXJz
dEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJzZXJQYXVzZWQo
ZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2ZpbmlzaENh
bGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0RXJyb3JQb3Np
dGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fcGVuZGlu
Z1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJl
bG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCisgICAg
LCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQoreworICAg
IG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5ldyBFbnRpdHlSZXNvbHZlcik7Cit9CisKK1hN
TERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRWxlbWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
IHBlcm1pc3Npb24pCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRv
Y3VtZW50KCkpCisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQorICAg
ICwgbV9jdXJyZW50Tm9kZShmcmFnbWVudCkKKyAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAg
LCBtX3Nhd0NTUyhmYWxzZSkKKyAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQorICAgICwg
bV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisg
ICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgorICAgICwgbV9wYXJz
ZXJQYXVzZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKKyAgICAsIG1fZXJyb3JDb3VudCgwKQorICAgICwgbV9sYXN0
RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAs
IG1fcGVuZGluZ1NjcmlwdCgwKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3Np
dGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1
ZSkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihwZXJtaXNzaW9uKQoreworICAgIGZyYWdt
ZW50LT5yZWYoKTsKKworICAgIC8vIEFkZCBuYW1lc3BhY2VzIGJhc2VkIG9uIHRoZSBwYXJlbnQg
bm9kZQorICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNrOworICAgIHdoaWxlIChwYXJlbnRF
bGVtZW50KSB7CisgICAgICAgIGVsZW1TdGFjay5hcHBlbmQocGFyZW50RWxlbWVudCk7CisKKyAg
ICAgICAgTm9kZSogbiA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYg
KCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICB9CisKKyAgICBp
ZiAoZWxlbVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVhtbFN0cmVh
bU5hbWVzcGFjZURlY2xhcmF0aW9ucyBuYW1lc3BhY2VzOworICAgIGZvciAoRWxlbWVudCogZWxl
bWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2su
cmVtb3ZlTGFzdCgpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVu
dC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIg
PSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9j
YWxOYW1lKCkgPT0gInhtbG5zIikKKyAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNw
YWNlVVJJID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5w
cmVmaXgoKSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFwcGVu
ZChRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24oYXR0ci0+bG9jYWxOYW1lKCksIGF0dHIt
PnZhbHVlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX3N0cmVh
bS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9ucyhuYW1lc3BhY2VzKTsKKyAgICBtX3N0cmVh
bS5zZXRFbnRpdHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2ZXIpOworCisgICAgLy8gSWYgdGhl
IHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8g
eG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQgdG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4K
KyAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJLmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50
LT5pbkRvY3VtZW50KCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IHBhcmVudEVs
ZW1lbnQtPm5hbWVzcGFjZVVSSSgpOworfQorCitYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3Vt
ZW50UGFyc2VyKCkKK3sKKyAgICBjbGVhckN1cnJlbnROb2RlU3RhY2soKTsKKyAgICBpZiAobV9w
ZW5kaW5nU2NyaXB0KQorICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlz
KTsKKyAgICBkZWxldGUgbV9zdHJlYW0uZW50aXR5UmVzb2x2ZXIoKTsKK30KKwordm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQoreworICAg
IG1fd3JvdGVUZXh0ID0gdHJ1ZTsKKworICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYg
ZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CisgICAgICAgIC8vIElmIHRoZSBk
ZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQor
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRU3RyaW5n
IGRhdGEocGFyc2VTdHJpbmcpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gSmF2YVNjcmlwdCBtYXkgY2F1c2UgdGhlIHBhcnNlciB0byBkZXRhY2gsCisgICAgICAgIC8v
IGtlZXAgdGhpcyBhbGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGRvbmUuCisgICAgICAgIFJl
ZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICBtX3N0cmVh
bS5hZGREYXRhKGRhdGEpOworICAgICAgICBwYXJzZSgpOworICAgIH0KKworICAgIHJldHVybjsK
K30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29u
c3QgQ1N0cmluZyYpCit7CisgICAgRG9jdW1lbnRQYXJzZXI6OnN0YXJ0UGFyc2luZygpOworICAg
IG1fc2F3RXJyb3IgPSBmYWxzZTsKKyAgICBtX3Nhd0NTUyA9IGZhbHNlOworICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gZmFsc2U7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQoreworI2lmIEVOQUJMRShYU0xUKQorICAg
IGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zv
cm1Tb3VyY2UoYWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZShtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtKSkpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8g
TWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRz
LgorICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUlt
bWVkaWF0ZWx5KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyh0cnVlKTsKKyAgICAg
ICAgRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBp
ZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRv
Y3VtZW50RXJyb3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVu
dCAmJiAhbV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fc2F3RXJyb3IpKQorICAgICAgICBoYW5kbGVF
cnJvcihmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7Cit9CisKK2ludCBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51
bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmxpbmVOdW1iZXIoKTsKK30KKwor
aW50IFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKTsKK30KKworVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVu
dFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9u
MChXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lTnVtYmVyKCkpLCBX
VEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChjb2x1bW5OdW1iZXIoKSkpOwor
fQorCisvLyBUaGlzIG1ldGhvZCBpbmNvcnJlY3RseSByZWludGVycHJldHMgemVyby1iYXNlIGxp
bmVOdW1iZXIgbWV0aG9kIGFzIG9uZS1iYXNlZCBudW1iZXIuCisvLyBGSVhNRTogVGhpcyBlcnJv
ciBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LiBXZSBzaG91bGQgZml4IGl0IGV2ZW50dWFsbHku
IAorVGV4dFBvc2l0aW9uMSBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uT25lQmFzZWQo
KSBjb25zdAoreworICAgIHJldHVybiBUZXh0UG9zaXRpb24xKFdURjo6T25lQmFzZWROdW1iZXI6
OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKCkpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKCkpKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6c3RvcFBhcnNpbmcoKQoreworICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6c3RvcFBh
cnNpbmcoKTsKK30KKwordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZygpCit7
CisgICAgQVNTRVJUKG1fcGFyc2VyUGF1c2VkKTsKKworICAgIG1fcGFyc2VyUGF1c2VkID0gZmFs
c2U7CisKKyAgICAvLyBGaXJzdCwgZXhlY3V0ZSBhbnkgcGVuZGluZyBjYWxsYmFja3MKKyAgICBw
YXJzZSgpOworICAgIGlmIChtX3BhcnNlclBhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gVGhlbiwgd3JpdGUgYW55IHBlbmRpbmcgZGF0YQorICAgIFNlZ21lbnRlZFN0cmluZyByZXN0
ID0gbV9wZW5kaW5nU3JjOworICAgIG1fcGVuZGluZ1NyYy5jbGVhcigpOworICAgIGFwcGVuZChy
ZXN0KTsKKworICAgIC8vIEZpbmFsbHksIGlmIGZpbmlzaCgpIGhhcyBiZWVuIGNhbGxlZCBhbmQg
YXBwZW5kKCkgZGlkbid0IHJlc3VsdAorICAgIC8vIGluIGFueSBmdXJ0aGVyIGNhbGxiYWNrcyBi
ZWluZyBxdWV1ZWQsIGNhbGwgZW5kKCkKKyAgICBpZiAobV9maW5pc2hDYWxsZWQgJiYgIW1fcGFy
c2VyUGF1c2VkICYmICFtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgIGVuZCgpOworfQorCitib29s
IFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmRGcmFnbWVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZSkKK3sKKyAgICBBU1NFUlQoIW1fc2F3Rmlyc3RFbGVtZW50KTsKKyAgICBhcHBlbmQoU3Ry
aW5nKCI8cXhtbHN0cmVhbWR1bW15ZWxlbWVudD4iKSk7CisgICAgYXBwZW5kKHNvdXJjZSk7Cisg
ICAgYXBwZW5kKFN0cmluZygiPC9xeG1sc3RyZWFtZHVtbXllbGVtZW50PiIpKTsKKyAgICByZXR1
cm4gIWhhc0Vycm9yKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3N0cnVjdCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBhdHRyaWJ1dGVzOworICAgIGJvb2wgZ290QXR0cmlidXRlczsKK307CisKK3N0YXRpYyB2
b2lkIGF0dHJpYnV0ZXNTdGFydEVsZW1lbnROc0hhbmRsZXIoQXR0cmlidXRlUGFyc2VTdGF0ZSog
c3RhdGUsIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGVzJiBhdHRycykKK3sKKyAgICBpZiAoYXR0
cnMuY291bnQoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0ZS0+Z290QXR0cmli
dXRlcyA9IHRydWU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7IGkr
KykgeworICAgICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlJiBhdHRyID0gYXR0cnNbaV07
CisgICAgICAgIFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0
cmluZyBhdHRyVmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVS
SSAgICAgICA9IGF0dHIubmFtZXNwYWNlVXJpKCk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUg
ICAgID0gYXR0ci5xdWFsaWZpZWROYW1lKCk7CisgICAgICAgIHN0YXRlLT5hdHRyaWJ1dGVzLnNl
dChhdHRyUU5hbWUsIGF0dHJWYWx1ZSk7CisgICAgfQorfQorCitIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wmIGF0dHJzT0sp
Cit7CisgICAgQXR0cmlidXRlUGFyc2VTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5nb3RBdHRyaWJ1
dGVzID0gZmFsc2U7CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyIHN0cmVhbTsKKyAgICBRU3RyaW5n
IGR1bW15ID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/Pjxh
dHRycyAlMSAvPiIpKS5hcmcoc3RyaW5nKTsKKyAgICBzdHJlYW0uYWRkRGF0YShkdW1teSk7Cisg
ICAgd2hpbGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBzdHJlYW0ucmVhZE5leHQoKTsK
KyAgICAgICAgaWYgKHN0cmVhbS5pc1N0YXJ0RWxlbWVudCgpKSB7CisgICAgICAgICAgICBhdHRy
aWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKCZzdGF0ZSwgc3RyZWFtLmF0dHJpYnV0ZXMoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYXR0cnNPSyA9IHN0YXRlLmdvdEF0dHJpYnV0ZXM7Cisg
ICAgcmV0dXJuIHN0YXRlLmF0dHJpYnV0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHBy
ZWZpeEZyb21RTmFtZShjb25zdCBRU3RyaW5nJiBxTmFtZSkKK3sKKyAgICBjb25zdCBpbnQgb2Zm
c2V0ID0gcU5hbWUuaW5kZXhPZihRTGF0aW4xQ2hhcignOicpKTsKKyAgICBpZiAob2Zmc2V0IDw9
IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBx
TmFtZS5sZWZ0KG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50
TmFtZXNwYWNlcyhFbGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtTmFtZXNwYWNl
RGVjbGFyYXRpb25zICZucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlw
dGluZ1Blcm1pc3Npb24pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBucy5jb3VudCgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9uICZkZWNs
ID0gbnNbaV07CisgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBkZWNsLm5hbWVzcGFjZVVy
aSgpOworICAgICAgICBTdHJpbmcgbmFtZXNwYWNlUU5hbWUgPSBkZWNsLnByZWZpeCgpLmlzRW1w
dHkoKSA/IFN0cmluZygieG1sbnMiKSA6IFN0cmluZygieG1sbnM6Iik7CisgICAgICAgIG5hbWVz
cGFjZVFOYW1lLmFwcGVuZChkZWNsLnByZWZpeCgpKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0
QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgbmFtZXNwYWNlUU5h
bWUsIG5hbWVzcGFjZVVSSSwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBpZiAo
ZWMpIC8vIGV4Y2VwdGlvbiBzZXR0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhF
bGVtZW50KiBuZXdFbGVtZW50LCBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlcyAmYXR0cnMsIEV4
Y2VwdGlvbkNvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAgICAgICAgU3RyaW5n
IGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAg
ICAgPSBhdHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5u
YW1lc3BhY2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhhdHRyLm5hbWVzcGFj
ZVVyaSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5h
bWUoKTsKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVSSSwgYXR0clFO
YW1lLCBhdHRyVmFsdWUsIGVjLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgaWYgKGVj
KSAvLyBleGNlcHRpb24gc2V0dGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSgpCit7CisgICAgd2hpbGUg
KCFpc1N0b3BwZWQoKSAmJiAhbV9wYXJzZXJQYXVzZWQgJiYgIW1fc3RyZWFtLmF0RW5kKCkpIHsK
KyAgICAgICAgbV9zdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChtX3N0cmVhbS50
b2tlblR5cGUoKSkgeworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1l
bnQ6IHsKKyAgICAgICAgICAgIHN0YXJ0RG9jdW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6IHsK
KyAgICAgICAgICAgIGVuZERvY3VtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3Vt
ZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaGFu
ZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1l
bnQ6IHsKKyAgICAgICAgICAgIHBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJzOiB7
CisgICAgICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAg
Ly9jZGF0YQorICAgICAgICAgICAgICAgIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgcGFyc2VD
aGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAg
IHBhcnNlQ29tbWVudCgpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKKyAgICAgICAgICAgIC8vcURlYnVnKCk8PCIt
LS0tLS0tLS0tLS0tIERURCI7CisgICAgICAgICAgICBwYXJzZUR0ZCgpOworI2lmIEVOQUJMRShY
SFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSB0cnVlOworI2Vu
ZGlmCisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFYbWxTdHJl
YW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogeworICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0t
LS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCkKKyAgICAgICAg
ICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0KCkudG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAg
ICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgorICAgICAgICAgICAg
ICAgKSB7CisgICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBtX3N0cmVhbS5uYW1lKCku
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHko
ZW50aXR5LnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGVh
ZlRleHROb2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRlclRleHQoKTsKKyAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZj
LCAxKTsKKyAgICAgICAgICAgICAgICAvLyBxRGVidWcoKTw8IiAtLS0tLS0tIGFkZGluZyBlbnRp
dHkgIjw8c3RyOworICAgICAgICAgICAgICAgIG1fbGVhZlRleHROb2RlLT5hcHBlbmREYXRhKHN0
ciwgZWMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IHsKKyAg
ICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpZiAobV9zdHJl
YW0uZXJyb3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJy
b3IpIHsKKyAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigp
ID09IFFYbWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAgICAgICAgICAgIGhh
bmRsZUVycm9yKHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVO
dW1iZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KCkKK3sKKyAg
ICBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
CisgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICBkb2N1bWVudCgpLT5zZXRY
TUxTdGFuZGFsb25lKG1fc3RyZWFtLmlzU3RhbmRhbG9uZURvY3VtZW50KCksIGVjKTsKKworICAg
ICAgICBRU3RyaW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1bWVudFZlcnNpb24oKTsKKyAg
ICAgICAgaWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNl
dFhNTFZlcnNpb24odmVyc2lvbiwgZWMpOworICAgICAgICBRU3RyaW5nUmVmIGVuY29kaW5nID0g
bV9zdHJlYW0uZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKGVuY29kaW5nKTsK
KyAgICB9Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkK
K3sKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIG1fcGFyc2luZ0ZyYWdtZW50KSB7Cisg
ICAgICAgIC8vIHNraXAgZHVtbXkgZWxlbWVudCBmb3IgZnJhZ21lbnRzCisgICAgICAgIG1fc2F3
Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4aXRU
ZXh0KCk7CisKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJlYW0ubmFtZSgpOworICAgIFN0
cmluZyB1cmkgICAgICAgPSBtX3N0cmVhbS5uYW1lc3BhY2VVcmkoKTsKKyAgICBTdHJpbmcgcHJl
Zml4ICAgID0gcHJlZml4RnJvbVFOYW1lKG1fc3RyZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmlu
ZygpKTsKKworICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiB1cmkuaXNOdWxsKCkpIHsKKyAg
ICAgICAgUV9BU1NFUlQocHJlZml4LmlzTnVsbCgpKTsKKyAgICAgICAgdXJpID0gbV9kZWZhdWx0
TmFtZXNwYWNlVVJJOworICAgIH0KKworICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBs
b2NhbE5hbWUsIHVyaSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKKyAgICBpZiAoIW5ld0VsZW1lbnQpIHsK
KyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9j
dW1lbnQoKSkgeworICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRN
TE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUg
dGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZAorICAgICAgICAvLyBlbnN1
cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAn
aHRtbCcKKyAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcK
KyAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkp
IHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBl
Y3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJOworICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNl
VVJJOworICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihR
WG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFt
ZXNwYWNlVVJJKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJz
dEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0
cnVlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaGFuZGxlRWxlbWVudE5hbWVz
cGFjZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0ubmFtZXNwYWNlRGVjbGFyYXRpb25zKCks
IGVjLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGlmIChlYykgeworICAgICAgICBzdG9w
UGFyc2luZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlRWxlbWVudEF0
dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwgbV9zdHJlYW0uYXR0cmlidXRlcygpLCBlYywgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc3RvcFBhcnNpbmco
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVs
ZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHNjcmlw
dEVsZW1lbnQpCisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbk9u
ZUJhc2VkKCk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50
LmdldCgpKTsKKworICAgIHB1c2hDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKKyAgICBp
ZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50
LT5hdHRhY2goKTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAg
aWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkKKyAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5nZXQoKSktPmluc2VydGVk
QnlQYXJzZXIoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzRmlyc3RFbGVtZW50ICYmIGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kaXNw
YXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZUVuZEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBSZWZQdHI8
Q29udGFpbmVyTm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CisgICAgbi0+ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCk7CisKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2Ny
aXB0aW5nTm90QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAgICAgICAgcG9wQ3VycmVudE5v
ZGUoKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbi0+cmVtb3ZlKGVjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpIHx8
ICFtX3ZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obi5nZXQoKSk7CisK
KyAgICAvLyBUaGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3Zl
ZCBmcm9tIGRvY3VtZW50LgorICAgIC8vIFBhcnNpbmcgY29udGludWVzIGluIHRoaXMgY2FzZSwg
YnV0IHNjcmlwdHMgYXJlbid0IGV4ZWN1dGVkLgorICAgIGlmICghZWxlbWVudC0+aW5Eb2N1bWVu
dCgpKSB7CisgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50KGVs
ZW1lbnQpOworICAgIGlmICghc2NyaXB0RWxlbWVudCkgeworICAgICAgICBwb3BDdXJyZW50Tm9k
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5h
bCBzY3JpcHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKKyAgICBBU1NFUlQo
IW1fcGVuZGluZ1NjcmlwdCk7CisgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKKworICAg
IGJvb2wgc3VjY2Vzc2Z1bGx5UHJlcGFyZWQgPSBzY3JpcHRFbGVtZW50LT5wcmVwYXJlU2NyaXB0
KG1fc2NyaXB0U3RhcnRQb3NpdGlvbiwgU2NyaXB0RWxlbWVudDo6QWxsb3dMZWdhY3lUeXBlSW5U
eXBlQXR0cmlidXRlKTsKKyAgICBpZiAoIXN1Y2Nlc3NmdWxseVByZXBhcmVkKSB7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgICAgIGlmICghc2NyaXB0RWxlbWVudC0+aXNTY3JpcHRUeXBlU3Vw
cG9ydGVkKFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpCisg
ICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRy
dWUpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJl
YWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVj
dXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgp
LCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGVs
c2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOworICAg
ICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fcGVuZGlu
Z1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3Jp
cHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENsaWVudCgp
IGV4ZWN1dGVkIGl0LgorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAg
ICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Nj
cmlwdEVsZW1lbnQgPSAwOworICAgIH0KKyAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsK
KyAgICBwb3BDdXJyZW50Tm9kZSgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZUNoYXJhY3RlcnMoKQoreworICAgIGlmICghbV9sZWFmVGV4dE5vZGUpCisgICAgICAgIGVudGVy
VGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fbGVhZlRleHROb2RlLT5h
cHBlbmREYXRhKG1fc3RyZWFtLnRleHQoKSwgZWMpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCit7CisgICAgZXhpdFRleHQoKTsKKwor
ICAgIC8vICMjIyBoYW5kbGUgZXhjZXB0aW9ucworICAgIGludCBleGNlcHRpb24gPSAwOworICAg
IFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gZG9jdW1lbnQoKS0+Y3JlYXRlUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKAorICAgICAgICBtX3N0cmVhbS5wcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25UYXJnZXQoKSwKKyAgICAgICAgbV9zdHJlYW0ucHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YSgp
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IHBpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CisKKyAgICBtX2N1cnJlbnROb2RlLT5wYXJz
ZXJBZGRDaGlsZChwaS5nZXQoKSk7CisgICAgaWYgKG1fdmlldyAmJiAhcGktPmF0dGFjaGVkKCkp
CisgICAgICAgIHBpLT5hdHRhY2goKTsKKworICAgIHBpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KTsKKworICAgIGlmIChwaS0+aXNDU1MoKSkKKyAgICAgICAgbV9zYXdDU1MgPSB0cnVlOworI2lm
IEVOQUJMRShYU0xUKQorICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50
ICYmIHBpLT5pc1hTTCgpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhZG9jdW1lbnQo
KS0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyNl
bmRpZgorfQorCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNkYXRhKCkKK3sKKyAgICBl
eGl0VGV4dCgpOworCisgICAgUmVmUHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2Vj
dGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIG1fc3RyZWFtLnRleHQoKSk7CisKKyAgICBtX2N1cnJl
bnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdOb2RlLmdldCgpKTsKKyAgICBpZiAobV92aWV3ICYm
ICFuZXdOb2RlLT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKK30KKwor
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KCkKK3sKKyAgICBleGl0VGV4dCgp
OworCisgICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSwgbV9zdHJlYW0udGV4dCgpKTsKKworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENo
aWxkKG5ld05vZGUuZ2V0KCkpOworICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVk
KCkpCisgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworfQorCit2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjplbmREb2N1bWVudCgpCit7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NU
eXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFhNTERvY3VtZW50UGFy
c2VyOjpoYXNFcnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtLmhhc0Vycm9yKCk7
Cit9CisKK3ZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRHRkKCkKK3sKKyAgICBRU3RyaW5n
UmVmIG5hbWUgPSBtX3N0cmVhbS5kdGROYW1lKCk7CisgICAgUVN0cmluZ1JlZiBwdWJsaWNJZCA9
IG1fc3RyZWFtLmR0ZFB1YmxpY0lkKCk7CisgICAgUVN0cmluZ1JlZiBzeXN0ZW1JZCA9IG1fc3Ry
ZWFtLmR0ZFN5c3RlbUlkKCk7CisKKyAgICAvL3FEZWJ1ZygpIDw8IGR0ZCA8PCBuYW1lIDw8IHB1
YmxpY0lkIDw8IHN5c3RlbUlkOworICAgIGlmICgocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKSkKKyAgICAgICAgfHwgKHB1
YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKSkKKyAg
ICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEu
MCBTdHJpY3QvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIikpCisgICAgICAgIHx8IChwdWJsaWNJ
ZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCisg
ICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAx
LjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpKQorICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAx
LjEvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCAocHVibGljSWQgPT0g
UUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKQor
I2VuZGlmCisgICAgICAgKQorICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNv
bnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8v
RFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAgfHwgKHB1YmxpY0lkID09
IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkp
IHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcu
bG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBE
T0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxp
bmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIC8vIGNo
ZWNrIGlmIHRoZSBNSU1FIHR5cGUgaXMgY29ycmVjdCB3aXRoIHRoaXMgbWV0aG9kCisgICAgICAg
ICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOworICAgIH0KKyNlbmRpZgorICAgIGlmICghbV9w
YXJzaW5nRnJhZ21lbnQpCisgICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFkZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwor
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclNjb3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTQ3M2VkMjMwODJmMzdkMzkzYThkMTFmMWFkYTE1
ZWNjM2MzNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDYWNoZWRSZXNvdXJjZUxvYWRlciogWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6Y3VycmVudENh
Y2hlZFJlc291cmNlTG9hZGVyID0gMDsKKworWE1MRG9jdW1lbnRQYXJzZXJTY29wZTo6WE1MRG9j
dW1lbnRQYXJzZXJTY29wZShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpCisgICAgOiBtX29sZENhY2hlZFJlc291cmNlTG9hZGVyKGN1cnJlbnRDYWNoZWRSZXNvdXJj
ZUxvYWRlcikKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4
bWxHZW5lcmljRXJyb3IpCisgICAgLCBtX29sZFN0cnVjdHVyZWRFcnJvckZ1bmMoeG1sU3RydWN0
dXJlZEVycm9yKQorICAgICwgbV9vbGRFcnJvckNvbnRleHQoeG1sR2VuZXJpY0Vycm9yQ29udGV4
dCkKKyNlbmRpZgoreworICAgIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJl
c291cmNlTG9hZGVyOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitYTUxEb2N1bWVudFBhcnNlclNj
b3BlOjpYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJyb3JGdW5jLCB4bWxT
dHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMsIHZvaWQqIGVycm9yQ29udGV4
dCkKKyAgICA6IG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoY3VycmVudENhY2hlZFJlc291cmNl
TG9hZGVyKQorICAgICwgbV9vbGRHZW5lcmljRXJyb3JGdW5jKHhtbEdlbmVyaWNFcnJvcikKKyAg
ICAsIG1fb2xkU3RydWN0dXJlZEVycm9yRnVuYyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCisgICAgLCBt
X29sZEVycm9yQ29udGV4dCh4bWxHZW5lcmljRXJyb3JDb250ZXh0KQoreworICAgIGN1cnJlbnRD
YWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGlmIChnZW5l
cmljRXJyb3JGdW5jKQorICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQ29udGV4
dCwgZ2VuZXJpY0Vycm9yRnVuYyk7CisgICAgaWYgKHN0cnVjdHVyZWRFcnJvckZ1bmMpCisgICAg
ICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoZXJyb3JDb250ZXh0LCBzdHJ1Y3R1cmVkRXJy
b3JGdW5jKTsKK30KKyNlbmRpZgorCitYTUxEb2N1bWVudFBhcnNlclNjb3BlOjp+WE1MRG9jdW1l
bnRQYXJzZXJTY29wZSgpCit7CisgICAgY3VycmVudENhY2hlZFJlc291cmNlTG9hZGVyID0gbV9v
bGRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICB4bWxTZXRHZW5l
cmljRXJyb3JGdW5jKG1fb2xkRXJyb3JDb250ZXh0LCBtX29sZEdlbmVyaWNFcnJvckZ1bmMpOwor
ICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMobV9vbGRFcnJvckNvbnRleHQsIG1fb2xkU3Ry
dWN0dXJlZEVycm9yRnVuYyk7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDQwNDNi
NDhiMTFlYzViODgzNjBhZTNlMTc5YjVkMWVlMTJkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclNjb3BlLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgWE1MRG9jdW1lbnRQYXJzZXJTY29wZV9oCisjZGVmaW5lIFhNTERvY3VtZW50UGFyc2Vy
U2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBFTkFCTEUoWFNM
VCkKKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworICAgIGNsYXNzIFhN
TERvY3VtZW50UGFyc2VyU2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYTUxE
b2N1bWVudFBhcnNlclNjb3BlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAg
ICAgICAgflhNTERvY3VtZW50UGFyc2VyU2NvcGUoKTsKKworICAgICAgICBzdGF0aWMgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGN1cnJlbnRDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworI2lmIEVOQUJM
RShYU0xUKQorICAgICAgICBYTUxEb2N1bWVudFBhcnNlclNjb3BlKENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnZW5lcmljRXJy
b3JGdW5jLCB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHN0cnVjdHVyZWRFcnJvckZ1bmMgPSAwLCB2
b2lkKiBlcnJvckNvbnRleHQgPSAwKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fb2xkQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisKKyNpZiBF
TkFCTEUoWFNMVCkKKyAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBtX29sZEdlbmVyaWNFcnJv
ckZ1bmM7CisgICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgbV9vbGRTdHJ1Y3R1cmVkRXJy
b3JGdW5jOworICAgICAgICB2b2lkKiBtX29sZEVycm9yQ29udGV4dDsKKyNlbmRpZgorICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhNTERvY3VtZW50UGFyc2Vy
U2NvcGVfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>