<?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>165963</bug_id>
          
          <creation_ts>2016-12-16 11:14:33 -0800</creation_ts>
          <short_desc>The GC should be able to reflect upon its pipeline of work</short_desc>
          <delta_ts>2017-01-08 11:34:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>165910</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165910</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260659</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-16 11:14:33 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260941</commentid>
    <comment_count>1</comment_count>
      <attachid>297409</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-17 10:37:35 -0800</bug_when>
    <thetext>Created attachment 297409
a little something like this

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260942</commentid>
    <comment_count>2</comment_count>
      <attachid>297409</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-17 10:38:26 -0800</bug_when>
    <thetext>Comment on attachment 297409
a little something like this

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

&gt; Source/JavaScriptCore/heap/SpaceTimeScheduler.cpp:22
&gt; - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * (INCLUDING NEGfLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

Oops.  Reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261038</commentid>
    <comment_count>3</comment_count>
      <attachid>297442</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-18 11:14:33 -0800</bug_when>
    <thetext>Created attachment 297442
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262420</commentid>
    <comment_count>4</comment_count>
      <attachid>297678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-22 15:05:23 -0800</bug_when>
    <thetext>Created attachment 297678
so fun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263178</commentid>
    <comment_count>5</comment_count>
      <attachid>297865</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-30 17:24:28 -0800</bug_when>
    <thetext>Created attachment 297865
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263342</commentid>
    <comment_count>6</comment_count>
      <attachid>297909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-02 13:30:09 -0800</bug_when>
    <thetext>Created attachment 297909
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263343</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-02 13:32:14 -0800</bug_when>
    <thetext>Attachment 297909 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 4 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263346</commentid>
    <comment_count>8</comment_count>
      <attachid>297909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-02 13:36:17 -0800</bug_when>
    <thetext>Comment on attachment 297909
the patch

Ooops, did not mean to set r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264353</commentid>
    <comment_count>9</comment_count>
      <attachid>298173</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-05 21:51:18 -0800</bug_when>
    <thetext>Created attachment 298173
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264421</commentid>
    <comment_count>10</comment_count>
      <attachid>298202</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 08:29:40 -0800</bug_when>
    <thetext>Created attachment 298202
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264468</commentid>
    <comment_count>11</comment_count>
      <attachid>298216</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 11:17:12 -0800</bug_when>
    <thetext>Created attachment 298216
seems to work sorta</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264543</commentid>
    <comment_count>12</comment_count>
      <attachid>298232</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 15:18:28 -0800</bug_when>
    <thetext>Created attachment 298232
even more

This is getting fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264546</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-06 15:29:00 -0800</bug_when>
    <thetext>&lt;rdar://problem/29909896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264552</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 15:38:38 -0800</bug_when>
    <thetext>The initial implementation boosted splay-latency but hurt on retreating wavefront worst-case pathologies like hash-map, because the only scheduler was a tad bit quicker to choose a longer pause.  It looks like the old scheduler was getting luckier on hash-map, but was still having a bad time - lots of wasted iterations before finishing a GC cycle.

I&apos;m now adding some exponential backoff to the space-time scheduler.  This appears to preserve the patch&apos;s advantage on splay-latency while also progressing hash-map.

Ultimately, the goal of this patch is to create a framework that can be more easily extended, since it doesn&apos;t hide the cost of constraint evaluation from the scheduler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264623</commentid>
    <comment_count>15</comment_count>
      <attachid>298250</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 19:44:59 -0800</bug_when>
    <thetext>Created attachment 298250
giving up on the new scheduler

Going to go back to the old scheduler.  The new one is empirically worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264624</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-06 19:45:32 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created attachment 298250 [details]
&gt; giving up on the new scheduler
&gt; 
&gt; Going to go back to the old scheduler.  The new one is empirically worse.

I should clarify: the same configuration that led to better splay-latency performance also killed Speedometer performance.  We don&apos;t want that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264712</commentid>
    <comment_count>17</comment_count>
      <attachid>298280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-07 11:05:59 -0800</bug_when>
    <thetext>Created attachment 298280
reverted to the old scheduling algorithm

I think that what made the old scheduling algorithm so effective is that its decisions were so time-driven. It stayed in phase except when we &quot;snapped&quot; phase after a round of constraint solving. This meant that if we encountered jank while in some mode (resumed or suspended) and overran our budget then the scheduler would degrade to something like a coin flip. It turns out that having this kind of non-determinism is _good_ for the GC, since it protects us from many run-away scenarios. For example if a deterministic scheduler encounters a huge object, then we&apos;d yield to mutator unless the scheduler had some mechanism to detect this case.

Altogether it seems that the good things about the old scheduler are:
- Eventually stop-the-world, which we arrive at somewhat elastically.
- Periodic stop-the-world increments that have a chance of getting lucky and declaring termination.
- Prioritize collector progress. In a retreating wavefront collector, the mutator has the speed advantage - so we need to give the collector some unfair advantage.
- Allow constraint solving to take as long as it needs to take to generate work.
- Degrade to coin flip when we encounter jank.

I can&apos;t easily think of another scheduling algorithm that achieves these things while staying so simple. Every time I&apos;ve tried to dramatically change this scheduler, I&apos;ve gotten regressions all over the place. I think I&apos;ll stick to making only incremental improvements. Probably if I do come back to improving the scheduler, then I&apos;ll try to make the scheduler&apos;s period adapt to the time it took to run constraints. We should use a longer period when we took longer to run constraints so that the mutator has more time to itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264713</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-07 11:06:27 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created attachment 298280 [details]
&gt; reverted to the old scheduling algorithm
&gt; 
&gt; I think that what made the old scheduling algorithm so effective is that its
&gt; decisions were so time-driven. It stayed in phase except when we &quot;snapped&quot;
&gt; phase after a round of constraint solving. This meant that if we encountered
&gt; jank while in some mode (resumed or suspended) and overran our budget then
&gt; the scheduler would degrade to something like a coin flip. It turns out that
&gt; having this kind of non-determinism is _good_ for the GC, since it protects
&gt; us from many run-away scenarios. For example if a deterministic scheduler
&gt; encounters a huge object, then we&apos;d yield to mutator unless the scheduler
&gt; had some mechanism to detect this case.
&gt; 
&gt; Altogether it seems that the good things about the old scheduler are:
&gt; - Eventually stop-the-world, which we arrive at somewhat elastically.
&gt; - Periodic stop-the-world increments that have a chance of getting lucky and
&gt; declaring termination.
&gt; - Prioritize collector progress. In a retreating wavefront collector, the
&gt; mutator has the speed advantage - so we need to give the collector some
&gt; unfair advantage.
&gt; - Allow constraint solving to take as long as it needs to take to generate
&gt; work.
&gt; - Degrade to coin flip when we encounter jank.
&gt; 
&gt; I can&apos;t easily think of another scheduling algorithm that achieves these
&gt; things while staying so simple. Every time I&apos;ve tried to dramatically change
&gt; this scheduler, I&apos;ve gotten regressions all over the place. I think I&apos;ll
&gt; stick to making only incremental improvements. Probably if I do come back to
&gt; improving the scheduler, then I&apos;ll try to make the scheduler&apos;s period adapt
&gt; to the time it took to run constraints. We should use a longer period when
&gt; we took longer to run constraints so that the mutator has more time to
&gt; itself.

Still testing this new scheduler... so far I just confirmed that it does the right things on splay and hash-map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264830</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 11:34:10 -0800</bug_when>
    <thetext>The patch is actually fixing this and its parent bug.

*** This bug has been marked as a duplicate of bug 165910 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297409</attachid>
            <date>2016-12-17 10:37:35 -0800</date>
            <delta_ts>2016-12-18 11:14:33 -0800</delta_ts>
            <desc>a little something like this</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30670</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk2LDYgKzQ5Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
OyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFD
NEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUx
N0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmNwcCAqLzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLzsgfTsKKwkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07
CisJCTBGNjYwRTNBMUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4
MURBMzA0RUYwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEg
LyogQ29kZUJsb2NrU2V0SW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3
RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0yODc2LDYgKzI4ODAsMTAgQEAKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2
IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckFyZ0lubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM0MUUw
NTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNjFFMDUxN0I4
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjRDRTcxREEzMDRFRDAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTczNSw2ICs1
NzQzLDEwIEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLywK
IAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggKi8s
CisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAq
LywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3Bw
ICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywKIAkJ
CQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKQEAgLTg1
MzUsNyArODU0Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2MEUzQTFFMDUxN0Mx
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAyNDgxRTIgLyogSlNHZW5lcmF0
b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZG
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC05NzMwLDYgKzk3NDQsNyBAQAogCQkJCTE0N0YzOUM0MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjYwRTM5MUUwNTE3QkYwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3
IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkM4NEIzMUQx
RERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAzNzYsNiArMTAzOTEsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1
ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVD
OSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUw
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9m
ZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyog
VmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTUyQUEyMURGNzg2MEQw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA5OTU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgpAQCAt
NDc5LDEyICs0ODAsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFy
CiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCi17Ci0gICAg
Zm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCi0gICAg
ICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewog
ICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkgewpAQCAtNTYy
LDY3ICs1NTcsMTggQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAog
CiAgICAgU3BhY2VUaW1lU2NoZWR1bGVyIHNjaGVkdWxlcigqdGhpcyk7CiAgICAgCisgICAgbV9j
b25zdHJhaW50U2V0LT5yZXNldFN0YXRzKCk7CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpdGVy
YXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQogICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwotICAgICAgICAgICAg
bV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwotICAgICAgICAgICAg
Q29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwotICAgICAgICAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICAgICAg
Z2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJK
U1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVyU2NyYXRj
aEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIHZpc2l0Q29uc2Vy
dmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0IGJhcnJpZXJlZCwg
c28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cwotICAgICAgICAvLyBhbGwg
b2YgdGhlbS4KLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVj
dGlvblNjb3BlKSkKLSAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYg
cGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQocGFpci5rZXkpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChtX21hcmtM
aXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKLSAgICAg
ICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNl
cHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxh
c3RFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRT
dHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChz
bG90VmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVy
LT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQo
c2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVy
IGRhdGE6XG4iLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCi0gICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAg
ICAgIGJvb2wgcmFuQWxsOworICAgICAgICAKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVj
dXRlQUxsKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcmFuQWxsID0gdHJ1ZTsKIAotICAgICAgICBz
bG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAg
ICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLQotICAg
ICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwotICAgICAgICBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZp
c2l0b3IpOwotICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgYm9vbCBzaG91
bGRUZXJtaW5hdGUgPSByYW5BbGwgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRv
ck1hcmtTdGFjay0+aXNFbXB0eSgpOwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0
YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0
b3IubXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIC8gMTAyNCwgIiBrYiwgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNj
aGVkdWxlci5jdXJyZW50RGVjaXNpb24oKS50YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSwgIiAi
KTsKQEAgLTc0MCwxNyArNjg2LDYgQEAgdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcgogICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0
V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMjE1OCw4ICsyMDkz
LDExMiBAQCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5k
aWYgLy8gVVNFKENGKQogCit2b2lkIEhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCgpCit7CisgICAg
bV9jb25zdHJhaW50U2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4o
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAgIFRpbWlu
Z1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25z
ZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29u
c2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0
aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9v
dHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKKyAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9v
dHMpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1
bXB0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAorICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92
bSwgc2xvdFZpc2l0b3IpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0
cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAg
ICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3Rl
ZFZhbHVlcykKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChw
YWlyLmtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYm
IG1fbWFya0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0t
Pmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
OjpHcmV5ZWRCeVJlc3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3RvbmljVGltZSkg
eworICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAg
ICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCisgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
ciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAg
ICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90
VmlzaXRvcik7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkp
CisgICAgICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29u
c3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25p
Y1RpbWUpIHsKKyAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeVJlc3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3RvbmljVGlt
ZSkgeworICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5
KCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxT
bG90VmlzaXRvcnMpCisgICAgICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1
ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAgCisgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBNb25v
dG9uaWNUaW1lKSB7CisgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1
cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHQoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtS
ZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0
cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yLCBNb25vdG9uaWNUaW1lKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBE
Rkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCisgICAgICAgICAgICAgICAgREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0
YWlubHkgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3Jr
bGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6bm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCkKIHsKKyAgICBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKICAg
ICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmNvbGxl
Y3RDb250aW51b3VzbHkoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CiBjbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVy
OwpAQCAtNDk4LDYgKzQ5OSw4IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CiAgICAgCiAgICAgdm9pZCBzZXRN
dXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CisgICAgCisgICAgdm9pZCBidWlsZENv
bnN0cmFpbnRTZXQoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29u
c3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1MzcsOCBAQCBwcml2YXRlOgogICAgIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsK
KyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3Ry
YWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJh
bGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBl
bnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNv
bWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFp
bnQoCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91
dCk+JiYgZnVuY3Rpb24sCisgICAgVm9sYXRpbHRpeSB2b2xhdGlsaXR5KQorICAgIDogbV9mdW5j
dGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSkKK3sKK30KKworTWFy
a2luZ0NvbnN0cmFpbnQ6On5NYXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQoreworICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwor
fQorCitzaXplX3QgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBzaXplX3QgdmlzaXRDb3VudEJlZm9y
ZSA9IHZpc2l0b3IudmlzaXRDb3VudCgpOworICAgIG1fZnVuY3Rpb24odmlzaXRvciwgdGltZW91
dCk7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0b3IudmlzaXRDb3VudCgpIC0gdmlzaXRD
b3VudEJlZm9yZTsKKyAgICByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFNsb3RWaXNpdG9yOworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gVm9sYXRpbGl0eSB7CisgICAgICAgIEdyZXllZEJ5UmVz
dW1wdGlvbiwgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55dGlt
ZSB0aGUgbXV0YXRvciByZXN1bWVzLgorICAgICAgICBHcmV5ZWRCeU1hcmtpbmcgLy8gVGhlIGNv
bnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55IHRpbWUgYW55IG9iamVjdCBpcyBt
YXJrZWQgYW5kIGFueXRpbWUgdGhlIG11dGF0b3IgcmVzdW1lcy4KKyAgICB9OworICAgIAorICAg
IE1hcmtpbmdDb25zdHJhaW50KEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpPiwgVm9sYXRpbGl0eSk7CisgICAgCisgICAgfk1hcmtpbmdDb25zdHJhaW50
KCk7CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisgICAgc2l6ZV90IGxhc3RW
aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQorICAgIAorICAg
IHNpemVfdCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAg
ICAKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxp
dHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1v
bm90b25pY1RpbWUgdGltZW91dCk+IG1fZnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0
aWxpdHk7CisgICAgc2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtpbmdDb25zdHJhaW50U2V0
OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U2V0Ojp+
TWFya2luZ0NvbnN0cmFpbnRTZXQoKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3Jvb3RzLnJlc2l6ZSgwKTsKKyAgICBmb3IgKGF1dG8m
IGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25zdHJhaW50LT5yZXNldFN0YXRzKCk7
CisgICAgICAgIGlmIChjb25zdHJhaW50LT52b2xhdGlsaXR5KCkgPT0gTWFya2luZ0NvbnN0cmFp
bnQ6OkdyZXllZEJ5UmVzdW1wdGlvbikKKyAgICAgICAgICAgIG1fcm9vdHMuYXBwZW5kKGNvbnN0
cmFpbnQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KAorICAgIEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
PiBmdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjphZGQoCisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50
KQoreworICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZVJvb3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgd2hpbGUgKCFtX3Jvb3RzLmlzRW1wdHkoKSkg
eworICAgICAgICBNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCA9IG1fcm9vdHMudGFrZUxh
c3QoKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCB0aW1lb3V0KTsKKyAg
ICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK3sKKyAgICBzdGQ6OnNvcnQoCisgICAgICAgIG1fc2V0LmJlZ2luKCks
IG1fc2V0LmVuZCgpLAorICAgICAgICBbJl0gKGF1dG8mIGEsIGF1dG8mIGIpIC0+IGJvb2wgewor
ICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHJldHVybiB0cnVlIGlmIGEgc2hvdWxkIGNvbWUgYmVm
b3JlIGIuCisgICAgICAgICAgICBpZiAoYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGEtPmxh
c3RWaXNpdENvdW50KCkgPiBiLT5sYXN0VmlzaXRDb3VudCgpOworICAgICAgICB9KTsKKyAgICAK
KyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25zdHJhaW50
LT5leGVjdXRlKHZpc2l0b3IsIHRpbWVvdXQpOworICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1l
b3V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCisg
ICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKK3B1Ymxp
YzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNl
dCgpOworICAgIAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAgIAorICAgIHZvaWQgYWRkKAor
ICAgICAgICBGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2
b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgYWxsIHJvb3RzIGhhdmUgYmVlbiBleGVjdXRlZC4KKyAgICBib29s
IGV4ZWN1dGVSb290cyhTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwg
Y29uc3RyYWludHMgd2VyZSBleGVjdXRlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFl
ZHkKKyAgICAvLyB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCisgICAgICAgIFNsb3RWaXNpdG9yJiwKKyAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisg
ICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5z
LgorICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToKKyAg
ICBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiBtX3Jvb3RzOworICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5o
CShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVS
b290U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lk
IGFkZCh2b2lkKiByb290KQorICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewogICAgICAg
ICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKICAgICAgICAgICAgIG1fY29udGFpbnNM
YXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsKKyAgICAg
ICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAgICAgaW50
IHNpemUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjA5OTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsMTMgKzYwNSwxMyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0bHkg
aW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKKyAgICAgICAgbV92aXNpdENvdW50ICs9IG1faGVhcC5tX29wYXF1ZVJvb3RzLmFk
ZChyb290KS5pc05ld0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFB1dCBp
bnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9u
Y2UgaW4KICAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRv
bid0IGdyb3cgdG9vIGxhcmdlLgogICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsK
LSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICBtX3Zpc2l0Q291bnQgKz0gbV9vcGFx
dWVSb290cy5hZGQocm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiByb290KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3BhY2VUaW1lU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiAoSU5DTFVESU5HIE5FR2ZMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297442</attachid>
            <date>2016-12-18 11:14:33 -0800</date>
            <delta_ts>2016-12-22 15:05:23 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31751</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk2LDYgKzQ5Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
OyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFD
NEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUx
N0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmNwcCAqLzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLzsgfTsKKwkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07
CisJCTBGNjYwRTNBMUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4
MURBMzA0RUYwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEg
LyogQ29kZUJsb2NrU2V0SW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3
RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0yODc2LDYgKzI4ODAsMTAgQEAKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2
IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckFyZ0lubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM0MUUw
NTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNjFFMDUxN0I4
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjRDRTcxREEzMDRFRDAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTczNSw2ICs1
NzQzLDEwIEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLywK
IAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggKi8s
CisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAq
LywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3Bw
ICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywKIAkJ
CQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKQEAgLTg1
MzUsNyArODU0Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2MEUzQTFFMDUxN0Mx
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAyNDgxRTIgLyogSlNHZW5lcmF0
b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZG
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC05NzMwLDYgKzk3NDQsNyBAQAogCQkJCTE0N0YzOUM0MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjYwRTM5MUUwNTE3QkYwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3
IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkM4NEIzMUQx
RERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAzNzYsNiArMTAzOTEsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1
ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVD
OSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUw
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9m
ZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyog
VmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTUyQUEyMURGNzg2MEQw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA5OTU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgpAQCAt
NDc5LDEyICs0ODAsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFy
CiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCi17Ci0gICAg
Zm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCi0gICAg
ICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewog
ICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkgewpAQCAtNTYy
LDY3ICs1NTcsMTggQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAog
CiAgICAgU3BhY2VUaW1lU2NoZWR1bGVyIHNjaGVkdWxlcigqdGhpcyk7CiAgICAgCisgICAgbV9j
b25zdHJhaW50U2V0LT5yZXNldFN0YXRzKCk7CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpdGVy
YXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQogICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwotICAgICAgICAgICAg
bV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwotICAgICAgICAgICAg
Q29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwotICAgICAgICAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICAgICAg
Z2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJK
U1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVyU2NyYXRj
aEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIHZpc2l0Q29uc2Vy
dmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0IGJhcnJpZXJlZCwg
c28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cwotICAgICAgICAvLyBhbGwg
b2YgdGhlbS4KLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVj
dGlvblNjb3BlKSkKLSAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYg
cGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQocGFpci5rZXkpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChtX21hcmtM
aXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKLSAgICAg
ICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNl
cHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxh
c3RFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRT
dHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChz
bG90VmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVy
LT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQo
c2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVy
IGRhdGE6XG4iLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCi0gICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAg
ICAgIGJvb2wgcmFuQWxsOworICAgICAgICAKKyAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVj
dXRlQWxsKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcmFuQWxsID0gdHJ1ZTsKIAotICAgICAgICBz
bG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAg
ICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLQotICAg
ICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwotICAgICAgICBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZp
c2l0b3IpOwotICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgYm9vbCBzaG91
bGRUZXJtaW5hdGUgPSByYW5BbGwgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRv
ck1hcmtTdGFjay0+aXNFbXB0eSgpOwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0
YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0
b3IubXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIC8gMTAyNCwgIiBrYiwgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNj
aGVkdWxlci5jdXJyZW50RGVjaXNpb24oKS50YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSwgIiAi
KTsKQEAgLTc0MCwxNyArNjg2LDYgQEAgdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcgogICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0
V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMjE1OCw4ICsyMDkz
LDEyMCBAQCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5k
aWYgLy8gVVNFKENGKQogCit2b2lkIEhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCgpCit7CisgICAg
bV9jb25zdHJhaW50U2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4o
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkNvbnNlcnZhdGl2
ZSBTY2FuIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUpIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29uc2VydmF0
aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3Rh
Y2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIk1pc2MgU21hbGwgUm9vdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgTW9ub3RvbmljVGltZSkgeworI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90Vmlz
aXRvcik7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICAgICAgbV92bS0+
c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQor
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlz
dFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwor
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5
UmVzdW1wdGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJT
dHJvbmcgSGFuZGxlcyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lKSB7CisgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hh
bmRsZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90
VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eVJlc3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAi
RGVidWdnZXIiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9u
b3RvbmljVGltZSkgeworI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAg
IGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQ
cm9maWxlcigpKSB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQ
cm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5w
cm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQ
cm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAgICBt
X3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90Vmlz
aXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeVJl
c3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiSklU
IFN0dWIgUm91dGluZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciwgTW9ub3RvbmljVGltZSkgeworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbik7CisgICAgCisgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCisgICAgICAgICJXZWFrIFNldHMiLAorICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3RvbmljVGltZSkgeworICAgICAgICAgICAgc2xvdFZp
c2l0b3IubWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAg
ICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5
TWFya2luZyk7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJXZWFr
IFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICAgICAgICAgIGN1cnJl
bnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAg
ICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkRGRyBXb3JrbGlz
dHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3Rvbmlj
VGltZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KQorICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvcklu
ZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5
LgorICAgICAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIs
IHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6Okdy
ZXllZEJ5TWFya2luZyk7CisjZW5kaWYKK30KKwogdm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0Nv
bGxlY3QoKQogeworICAgIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAogICAgIG1faXNTYWZl
VG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDk5
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDcgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7
CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3Mg
U3BhY2VUaW1lU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CkBAIC00OTgs
NiArNDk5LDggQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFy
cmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91
bGRCZUZlbmNlZChib29sIHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNl
dCgpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3Qg
bV9yYW1TaXplOwpAQCAtNTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOworICAgIAorICAg
IHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0Owog
CiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtp
bmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBv
dmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBh
bW91bnQgb2YgbWVtb3J5IGZyb20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKKyAgICBD
U3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1Rp
bWUgdGltZW91dCk+JiYgZnVuY3Rpb24sCisgICAgVm9sYXRpbHRpeSB2b2xhdGlsaXR5KQorICAg
IDogbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rp
b24pKQorICAgICwgbV92b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6fk1h
cmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRT
dGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7Cit9CisKK3NpemVfdCBNYXJraW5n
Q29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQoreworICAgIHNpemVfdCB2aXNpdENvdW50QmVmb3JlID0gdmlzaXRvci52aXNpdENv
dW50KCk7CisgICAgbV9mdW5jdGlvbih2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBtX2xhc3RWaXNp
dENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCkgLSB2aXNpdENvdW50QmVmb3JlOworICAgIHJl
dHVybiBtX2xhc3RWaXNpdENvdW50OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJr
aW5nQ29uc3RyYWludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZW51bSBWb2xhdGlsaXR5IHsKKyAgICAgICAgR3JleWVkQnlSZXN1bXB0aW9uLCAvLyBUaGUg
Y29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBhbnl0aW1lIHRoZSBtdXRhdG9yIHJl
c3VtZXMuIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgdGhhdCB5b3UnZCBjYWxsIGEg
InJvb3QiIGluIGEgdHJhZGl0aW9uYWwgR0MsIGFuZCB3ZSB1c2UgdGhhdCB0ZXJtLgorICAgICAg
ICBHcmV5ZWRCeU1hcmtpbmcgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0
ZWQgYW55IHRpbWUgYW55IG9iamVjdCBpcyBtYXJrZWQgYW5kIGFueXRpbWUgdGhlIG11dGF0b3Ig
cmVzdW1lcy4KKyAgICB9OworICAgIAorICAgIE1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBD
U3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1vbm90
b25pY1RpbWUgdGltZW91dCk+LAorICAgICAgICBWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB+TWFy
a2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lLmRhdGEoKTsgfQorICAgIAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAgIAor
ICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291
bnQ7IH0KKyAgICAKKyAgICBzaXplX3QgZXhlY3V0ZShTbG90VmlzaXRvciYsIE1vbm90b25pY1Rp
bWUgdGltZW91dCk7CisgICAgCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92b2xhdGlsaXR5OyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgorICAgIAorICAg
IHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OworICAgIENTdHJpbmcgbV9uYW1lOworICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+IG1f
ZnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1fbGFz
dFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQu
aCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgp
Cit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQor
eworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBt
X3VuZXhlY3V0ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMu
Y2xlYXJBbGwoKTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAg
ICBjb25zdHJhaW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIGlmIChjb25zdHJhaW50LT52b2xh
dGlsaXR5KCkgPT0gTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbikKKyAgICAg
ICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5zZXQoY29uc3RyYWlu
dC0+aW5kZXgoKSk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQo
CisgICAgQ1N0cmluZyBuYW1lLAorICAgIEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpPiBmdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdD
b25zdHJhaW50PihXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkp
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAgc3RkOjp1bmlxdWVf
cHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQoreworICAgIGNvbnN0cmFpbnQtPm1f
aW5kZXggPSBtX3NldC5zaXplKCk7CisgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWlu
dCkpOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgQml0VmVj
dG9yIGlnbm9yZWQ7CisgICAgcmV0dXJuIGRyYWluKHZpc2l0b3IsIHRpbWVvdXQsIG1fdW5leGVj
dXRlZFJvb3RzLCBpZ25vcmVkKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCit7CisgICAgQml0VmVjdG9yIGV4ZWN1dGVkOworICAgIGlmICghZHJhaW4odmlzaXRvciwg
dGltZW91dCwgbV91bmV4ZWN1dGVkUm9vdHMsIGV4ZWN1dGVkKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZHJhaW4odmlzaXRvciwgdGltZW91dCwgbV91bmV4ZWN1dGVkT3V0Z3Jv
d3RocywgZXhlY3V0ZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3RkOjpz
b3J0KAorICAgICAgICBtX3NldC5iZWdpbigpLCBtX3NldC5lbmQoKSwKKyAgICAgICAgWyZdIChh
dXRvJiBhLCBhdXRvJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1
cm4gdHJ1ZSBpZiBhIHNob3VsZCBjb21lIGJlZm9yZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZv
bGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBhLT5sYXN0VmlzaXRDb3VudCgpID4gYi0+bGFzdFZpc2l0
Q291bnQoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChleGVjdXRlZC5nZXQoaSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2l6ZV90IG51bUV4ZWN1dGVkID0gbV9zZXRbaV0t
PmV4ZWN1dGUodmlzaXRvciwgdGltZW91dCk7CisgICAgICAgIGlmIChudW1FeGVjdXRlZCAmJiBo
YXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFp
bnQgOiBtX3NldCkKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZHJh
aW4oCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZSwgQml0VmVj
dG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkKQoreworICAgIGZvciAoc2l6ZV90
IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAgICBzaXplX3QgbnVtRXhlY3V0ZWQgPSBtX3Nl
dFtpbmRleF0tPmV4ZWN1dGUodmlzaXRvciwgdGltZSk7CisgICAgICAgIHVuZXhlY3V0ZWQuY2xl
YXIoaW5kZXgpOworICAgICAgICBleGVjdXRlZC5zZXQoaW5kZXgpOworICAgICAgICBpZiAobnVt
RXhlY3V0ZWQgJiYgaGFzRWxhcHNlZCh0aW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1
ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CitwdWJsaWM6CisgICAgTWFy
a2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICAK
KyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0
cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkp
OworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4p
OworICAgIAorICAgIC8vIEV4ZWN1dGVzIG9ubHkgcm9vdHMuIFJldHVybnMgdHJ1ZSBpZiBhbGwg
cm9vdHMgaGF2ZSBiZWVuIGV4ZWN1dGVkLiBJdCdzIGV4cGVjdGVkCisgICAgLy8gdGhhdCB5b3Un
bGwgZG8gc29tZSBkcmFpbmluZyBhZnRlciB0aGlzIGFuZCB0aGVuIHVzZSBleGVjdXRlQ29udmVy
Z2VuY2UoKS4KKyAgICBib29sIGV4ZWN1dGVCb290c3RyYXAoU2xvdFZpc2l0b3ImLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbnN0cmFpbnRzIHdlcmUgZXhlY3V0ZWQuIFRoaXMgYXNz
dW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5CisgICAgLy8gdmlzaXRlZCByb290cyBhbmQgZHJhaW5l
ZCBmcm9tIHRoZXJlLgorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAorICAgICAgICBTbG90
VmlzaXRvciYsCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3
aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KKyAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3Im
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25p
Y1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCk7CisgICAg
CisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOworICAgIEJpdFZlY3RvciBtX3VuZXhl
Y3V0ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0
cmFpbnQ+PiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMDk5NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29udGFpbnNMYXN0UXVl
cmllZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZCh2b2lkKiByb290KQorICAg
IGJvb2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewogICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RR
dWVyaWVkUm9vdCkKICAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVl
OwotICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRk
KHJvb3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAgICAgaW50IHNpemUoKSBjb25zdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA5
OTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDUsMTMgKzYwNSwxMyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KHZvaWQqIHJvCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJz
KCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hT
ZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAgbV92
aXNpdENvdW50ICs9IG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KS5pc05ld0VudHJ5Owog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1
dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KICAgICAvLyBhIHdoaWxl
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgog
ICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKKyAgICBtX3Zpc2l0Q291bnQgKz0gbV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiB9
CiAKIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25z
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297678</attachid>
            <date>2016-12-22 15:05:23 -0800</date>
            <delta_ts>2016-12-30 17:24:28 -0800</delta_ts>
            <desc>so fun</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51573</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk2LDYgKzQ5Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
OyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFD
NEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUx
N0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmNwcCAqLzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLzsgfTsKKwkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07
CisJCTBGNjYwRTNBMUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4
MURBMzA0RUYwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEg
LyogQ29kZUJsb2NrU2V0SW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3
RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0yODc2LDYgKzI4ODAsMTAgQEAKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2
IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckFyZ0lubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM0MUUw
NTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNjFFMDUxN0I4
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjRDRTcxREEzMDRFRDAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTczNSw2ICs1
NzQzLDEwIEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLywK
IAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggKi8s
CisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAq
LywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3Bw
ICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywKIAkJ
CQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKQEAgLTg1
MzUsNyArODU0Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2MEUzQTFFMDUxN0Mx
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAyNDgxRTIgLyogSlNHZW5lcmF0
b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZG
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC05NzMwLDYgKzk3NDQsNyBAQAogCQkJCTE0N0YzOUM0MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjYwRTM5MUUwNTE3QkYwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3
IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkM4NEIzMUQx
RERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAzNzYsNiArMTAzOTEsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1
ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVD
OSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUw
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9m
ZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyog
VmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTUyQUEyMURGNzg2MEQw
MEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA5OTU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgpAQCAt
OTEsNDEgKzkyLDYgQEAgZG91YmxlIG1heFBhdXNlTVMoZG91YmxlIHRoaXNQYXVzZU1TKQogICAg
IHJldHVybiBtYXhQYXVzZU1TOwogfQogCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotY2xh
c3MgSGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZSB7Ci1wdWJsaWM6Ci0gICAgUmVzdW1lVGhlV29y
bGRTY29wZShIZWFwJiBoZWFwKQotICAgICAgICA6IG1faGVhcChoZWFwKQotICAgIHsKLSAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBk
b3VibGUgdGhpc1BhdXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9w
VGltZSkubWlsbGlzZWNvbmRzKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJwPSIsIHRoaXNQYXVz
ZU1TLCAiIG1zIChtYXggIiwgbWF4UGF1c2VNUyh0aGlzUGF1c2VNUyksICIpLi4uXVxuIik7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5yZXN1bWVUaGVXb3JsZCgpOwotICAg
IH0KLSAgICAKLSAgICB+UmVzdW1lVGhlV29ybGRTY29wZSgpCi0gICAgewotICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOwotICAgICAgICAKLSAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJbR0M6ICIpOwotICAgIH0K
LSAgICAKLXByaXZhdGU6Ci0gICAgSGVhcCYgbV9oZWFwOwotfTsKLQotbmFtZXNwYWNlIHsKLQog
c2l6ZV90IG1pbkhlYXBTaXplKEhlYXBUeXBlIGhlYXBUeXBlLCBzaXplX3QgcmFtU2l6ZSkKIHsK
ICAgICBpZiAoaGVhcFR5cGUgPT0gTGFyZ2VIZWFwKSB7CkBAIC0zMTYsNiArMjgyLDcgQEAgSGVh
cDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5Pigp
KQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCisgICAgLCBtX3NjaGVk
dWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZVNjaGVkdWxlcj4oKnRoaXMpKQogICAgICwg
bV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlv
bihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQogewpAQCAtNDc5LDEyICs0NDYs
NiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQog
Ci12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCi0gICAgICAgIGN1cnJlbnQt
PnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwotfQotCiB2b2lk
IEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewogICAgIHdoaWxlICht
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkgewpAQCAtNTYwLDEzMiArNTIxLDc4
IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBzbG90Vmlz
aXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAotICAgIFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVs
ZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWludFNldC0+cmVzZXRTdGF0cygpOworICAgIG1fc2No
ZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVCb290c3RyYXAoc2xvdFZpc2l0b3IsIG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7
CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7
CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICAgICAgZGF0YUxvZygiaSMi
LCBpdGVyYXRpb24sICIgIik7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHBy
ZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25z
ZXJ2YXRpdmUgc2NhbiIpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29u
c2VydmF0aXZlU2NhbigpOwotICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0
aXZlUm9vdHMoKnRoaXMpOwotICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOwotICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9v
dHMpOwotICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKLSAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9v
dHMpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gd29yayB0byBkbywgdGhl
biB3ZSBtYXkgaGF2ZSB0byBjcmVhdGUgc29tZSB3b3JrLgorICAgICAgICBpZiAoc2xvdFZpc2l0
b3IuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBUaGUgZWFzaWVzdCB3YXkgdG8gY3JlYXRl
IHdvcmsgaXMgdG8gY29uc2lkZXIgdGhlIG11dGF0b3Igc3RhY2suCisgICAgICAgICAgICBtX211
dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RW
aXNpdG9yLCBtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOworICAgICAgICAKKyAgICAgICAg
aWYgKHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53
cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7CisgICAgICAgICAgICBERkc6OnJl
bWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CiAgICAgICAgICAgICAKLSAgICAgICAgLy8gTm93IHdl
IHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0IGJhcnJpZXJlZCwgc28gZWFjaCBmaXhwb2ludCBp
dGVyYXRpb24ganVzdCByZXZpc2l0cwotICAgICAgICAvLyBhbGwgb2YgdGhlbS4KLSNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAotICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3Zt
LCBzbG90VmlzaXRvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+
c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAg
ICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVk
VmFsdWVzKQotICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5r
ZXkpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xp
c3RTZXQtPnNpemUoKSkKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlz
dHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICBz
bG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0gICAgICAg
IHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RW
aXNpdG9yKTsKLSAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7Ci0KLSNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVy
KiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygp
OwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOwotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB3cml0ZS1iYXJyaWVyaW5n
IHRoZW1zZWx2ZXMgdG8gcmUtZXhlY3V0ZSB0aGVpciB2aXNpdENoaWxkcmVuCisgICAgICAgICAg
ICAvLyBtZXRob2RzLCBDb2RlQmxvY2tzIHNob3VsZCBqdXN0IHJlZ2lzdGVyIHRoZW1zZWx2ZXMg
YXMgYSBjb25zdHJhaW50LiBUaGVuIHdlCisgICAgICAgICAgICAvLyB3b3VsZG4ndCBuZWVkIHRo
aXMgdGVycmlibGUgaGFjay4KKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cihzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWwo
KTsKICAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgIG1fdm0t
PnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9y
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKLQotICAgICAgICBzbG90VmlzaXRvci5tZXJn
ZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFyYWxsZWxWaXNp
dG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLQotICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwotICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVy
ZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsK
LSAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZpc2l0b3IpOwotICAgICAg
ICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1wdHkoKSAmJiBtX211dGF0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0
YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0
b3IubXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIC8gMTAyNCwgIiBrYiwgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNj
aGVkdWxlci5jdXJyZW50RGVjaXNpb24oKS50YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSwgIiAi
KTsKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChtX3Nj
aGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAv
LyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVz
Y2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5v
dy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0
aGUgY29kZSBibG9jawotICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQg
cmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRo
ZQotICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZv
cmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKLSAgICAgICAgLy8g
YXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3Qg
R0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKLSAgICAgICAgLy8gR0MuCi0gICAgICAgIG1f
Y29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAg
ICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIG1fc2NoZWR1bGVyLT53
aWxsUmVzdW1lKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgU2xvdFZpc2l0b3IncyBt
YXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3RvciB0aHJlYWQgKGkuZS4gdGhp
cyB0aHJlYWQpCi0gICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRoYXQncyB3aHkgd2UgZG91Ymxl
LWJ1ZmZlci4KLSAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNp
dG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZl
IFdlYWsgSGFuZGxlczpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRHQygpKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewor
ICAgICAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25vdG9uaWNUaW1lOjpub3co
KSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJwPSIsIHRoaXNQYXVzZU1TLCAiIG1zIChtYXggIiwgbWF4UGF1c2VNUyh0aGlzUGF1
c2VNUyksICIpLi4uXVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlc3VtZVRoZVdvcmxkKCk7CisgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKICAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0Zp
eHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cihzbG90VmlzaXRvcik7CisgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRy
YWluSW5QYXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVkRHJh
aW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBz
dG9wLiBCdXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2VzIG5vdCB3YW50CisgICAgICAgICAgICAv
LyB0aGF0LgorICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gZGVjaXNpb24udGlt
ZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgICAgICAvLyBJdCdzIHRv
dGFsbHkgdW5jbGVhciB3aGF0IHRoZSB2YWx1ZSBvZiBjb2xsZWN0UGVybWl0dGVkSWRsZVJhdGlv
CisgICAgICAgICAgICAvLyBzaG91bGQgYmUsIG90aGVyIHRoYW4gaXQgc2hvdWxkIGJlIGdyZWF0
ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZlbgorICAgICAgICAgICAgLy8gYXJndWUgZm9yIGl0IGJl
aW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBpdC4KKyAgICAgICAgICAgIHNsZWVw
KHNjaGVkdWxlZElkbGUgKiBPcHRpb25zOjpjb2xsZWN0b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkgeworICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29sbGVjdG9yVGltZXNsaWNpbmcoKSkgewot
ICAgICAgICAgICAgICAgIHNjaGVkdWxlci5zbmFwUGhhc2UoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1
bHQ7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRlY2lz
aW9uID0gc2NoZWR1bGVyLmN1cnJlbnREZWNpc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZGVjaXNpb24uc2hvdWxkQmVSZXN1bWVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3Vt
ZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWlu
UmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KGRlY2lzaW9uLnRp
bWVUb1N0b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0
ID09IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0IG1h
eWJlIHRoZSBzY2hlZHVsZXIgZG9lcyBub3Qgd2FudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRz
IHNjaGVkdWxlZElkbGUgPSBkZWNpc2lvbi50aW1lVG9TdG9wKCkgLSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5IHVu
Y2xlYXIgd2hhdCB0aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUsIG90aGVyIHRoYW4gaXQgc2hv
dWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZlbgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcmd1ZSBmb3IgaXQgYmVpbmcgZ3JlYXRlciB0aGFuIDEuIFdlIHNo
b3VsZCB0dW5lIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcChzY2hl
ZHVsZWRJZGxlICogT3B0aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2Vjb25kcyB3YWtlVXBMYXRlbmN5ID0gTW9ub3RvbmljVGltZTo6
bm93KCkgLSBkZWNpc2lvbi50aW1lVG9TdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHdha2VVcExhdGVuY3kgPj0gMV9tcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygid3VsIT0iLCB3YWtlVXBMYXRlbmN5Lm1pbGxpc2Vjb25kcygpLCAiIG1z
ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJh
aW5JblBhcmFsbGVsKGRlY2lzaW9uLnRpbWVUb1Jlc3VtZSgpKTsKLSAgICAgICAgICAgICAgICB9
IHdoaWxlIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRv
bmUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEaXNhYmxpbmcg
Y29sbGVjdG9yIHRpbWVzbGljaW5nIGlzIG1lYW50IHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAot
ICAgICAgICAgICAgICAgIC8vIC0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIHRvIG1heGltaXpl
IHRoZSBvcHBvcnR1bml0eSBmb3IgaGFybWZ1bCByYWNlcy4KLSAgICAgICAgICAgICAgICBSZXN1
bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbCgpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiW0dD
OiAiKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPmRpZFN0b3Ao
KTsKICAgICB9CiAKICAgICB7CkBAIC02OTQsNiArNjAxLDEwIEBAIHZvaWQgSGVhcDo6bWFya1Rv
Rml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7CiAgICAgfQogICAgIG1faGVscGVyQ2xpZW50LmZpbmlzaCgpOworCisg
ICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Cisg
ICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAgICAKICAgICB1cGRhdGVP
YmplY3RDb3VudHMoZ2NTdGFydFRpbWUpOwogICAgIGVuZE1hcmtpbmcoKTsKIH0KQEAgLTczMiwy
NSArNjQzLDYgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIG1fYmFycmllcnNFeGVj
dXRlZCA9IDA7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYgcm9vdHMpCi17Ci0gICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5k
KHJvb3RzKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xp
c3RFbnRyaWVzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTEzNTQsNiArMTI0Niw3IEBA
IHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdygpCiAgICAgCiAgICAgaGFuZGxlR0NEaWRK
SVQoKTsKICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAgICBtX211dGF0b3JEaWRSdW4gPSB0
cnVlOwogfQogCiBib29sIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQgb2xkU3Rh
dGUpCkBAIC0xMzY2LDcgKzEyNTksNyBAQCBib29sIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3co
dW5zaWduZWQgCiAgICAgICAgICYmIGhhbmRsZU5lZWRGaW5hbGl6ZShvbGRTdGF0ZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJp
dCkpIHsKKyAgICBpZiAoIShvbGRTdGF0ZSAmIHNob3VsZFN0b3BCaXQpICYmICFtX3NjaGVkZWR1
bGVyLT5zaG91bGRTdG9wKCkpIHsKICAgICAgICAgaWYgKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV93b3JsZFN0YXRlLmNvbXBh
cmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+c3RvcHBlZEJpdCk7CkBAIC0x
NDM5LDYgKzEzMzIsNyBAQCB2b2lkIEhlYXA6OmFjcXVpcmVBY2Nlc3NTbG93KCkKICAgICAgICAg
aWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkp
IHsKICAgICAgICAgICAgIGhhbmRsZUdDRGlkSklUKCk7CiAgICAgICAgICAgICBoYW5kbGVOZWVk
RmluYWxpemUoKTsKKyAgICAgICAgICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDgzLDggKzE5NzcsMTAgQEAgYm9v
bCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRAogICAgIGlmIChkZWZlcnJhbENv
bnRleHQpIHsKICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDIHw9CiAgICAgICAg
ICAgICAhIShtX3dvcmxkU3RhdGUubG9hZCgpICYgKHNob3VsZFN0b3BCaXQgfCBuZWVkRmluYWxp
emVCaXQgfCBnY0RpZEpJVEJpdCkpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CiAgICAgICAg
IHN0b3BJZk5lY2Vzc2FyeSgpOworICAgICAgICBzdG9wSWZSZXF1ZXN0ZWRCeVNjaGVkdWxlcigp
OworICAgIH0KICAgICAKICAgICBpZiAoIXNob3VsZENvbGxlY3RIZXVyaXN0aWMoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE1OCw4ICsyMDU0LDEyMCBAQCB2b2lkIEhlYXA6OnNldFJ1
bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2b2lkIEhl
YXA6OmJ1aWxkQ29uc3RyYWludFNldCgpCit7CisgICAgbV9jb25zdHJhaW50U2V0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKKyAgICAgICAgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKKyAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAg
IFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50
OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJl
Rm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29u
c2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25z
ZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0
aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVS
b290cyk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeVJl
c3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiTWlz
YyBTbWFsbCBSb290cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lKSB7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgICAg
IHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKKyNlbmRpZgor
CisgICAgICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1f
Y29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3Mudmlz
aXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisg
ICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRv
ciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzbG90VmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOworICAgICAg
ICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIlN0cm9uZyBIYW5kbGVzIiwK
KyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUp
IHsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRv
cik7CisgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbik7Cisg
ICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJEZWJ1Z2dlciIsCisgICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lKSB7Cisj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJv
ZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2Nr
KCkpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVk
U3RhY2tUcmFjZXMoKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChz
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQ
cm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG1fdm0tPnR5cGVQcm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxl
ckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
dm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
fSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbik7CisgICAg
CisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJKSVQgU3R1YiBSb3V0aW5lcyIs
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1l
KSB7CisgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAg
ICAgICAgIldlYWsgU2V0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yLCBNb25vdG9uaWNUaW1lKSB7CisgICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZU9wYXF1
ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAg
ICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAK
KyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldlYWsgUmVmZXJlbmNlIEhhcnZl
c3RlcnMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3Rv
bmljVGltZSkgeworICAgICAgICAgICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJy
ZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVm
ZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiREZHIFdvcmtsaXN0cyIsCisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCisg
ICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFr
UmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICBE
Rkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOwor
ICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsK
KyNlbmRpZgorfQorCiB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiB7CisgICAg
YnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVl
OwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFy
a1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTcGFjZVRpbWVTY2hlZHVs
ZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKQEAgLTM0MSw2ICszNDIsOSBAQCBwdWJs
aWM6CiAgICAgLy8gYWxyZWFkeSBiZSBjYWxsZWQgZm9yIHlvdSBhdCB0aGUgcmlnaHQgdGltZXMu
CiAgICAgdm9pZCBzdG9wSWZOZWNlc3NhcnkoKTsKICAgICAKKyAgICAvLyBGSVhNRQorICAgIHZv
aWQgc3RvcElmUmVxdWlyZWRCeVNjaGVkdWxlcigpOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBt
dWNoIHN0cm9uZ2VyIGtpbmQgb2Ygc3RvcHBpbmcgb2YgdGhlIGNvbGxlY3RvciwgYW5kIGl0IG1h
eSByZXF1aXJlIHdhaXRpbmcgZm9yIGEKICAgICAvLyB3aGlsZS4gVGhpcyBpcyBtZWFudCB0byBi
ZSBhIGxlZ2FjeSBBUEkgZm9yIGNsaWVudHMgb2YgY29sbGVjdEFsbEdhcmJhZ2UgdGhhdCBleHBl
Y3QgdGhhdCB0aGVyZQogICAgIC8vIGlzIG5vIEdDIGJlZm9yZSBvciBhZnRlciB0aGF0IGZ1bmN0
aW9uIGNhbGwuIEFmdGVyIGNhbGxpbmcgdGhpcywgeW91IGFyZSBmcmVlIHRvIHN0YXJ0IEdDcwpA
QCAtNDEzLDkgKzQxNyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29ybGQoKTsKICAg
ICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCi0gICAgY2xhc3MgUmVzdW1lVGhlV29ybGRT
Y29wZTsKLSAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKLSAgICAKICAgICB2
b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9yKCk7CiAgICAg
CkBAIC00NTUsNyArNDU2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290
cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lk
IHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZp
c2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFk
Q29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhk
b3VibGUgZ2NTdGFydFRpbWUpOwpAQCAtNDk4LDYgKzQ5OCw4IEBAIHByaXZhdGU6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CiAg
ICAgCiAgICAgdm9pZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CisgICAg
CisgICAgdm9pZCBidWlsZENvbnN0cmFpbnRTZXQoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1f
aGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1MzYsOCBA
QCBwcml2YXRlOgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1f
bXV0YXRvck1hcmtTdGFjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0
cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3Qgdmlz
aXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJl
IGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8g
aGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02MTUs
NiArNjE5LDggQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRlcm5hbE1lbW9yeVNpemUgeyAw
IH07CiAjZW5kaWYKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BhY2VUaW1lU2NoZWR1bGVy
PiBtX3NjaGVkdWxlcjsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvdWxkU3Rv
cEJpdCA9IDF1IDw8IDB1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdG9wcGVkQml0ID0g
MXUgPDwgMXU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGhhc0FjY2Vzc0JpdCA9IDF1IDw8
IDJ1OwpAQCAtNjMwLDYgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgVGlja2V0IG1fbGFzdEdyYW50
ZWRUaWNrZXQgeyAwIH07CiAgICAgYm9vbCBtX3RocmVhZFNob3VsZFN0b3AgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV90aHJlYWRJc1N0b3BwaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0YXRv
ckRpZFJ1biB7IHRydWUgfTsKICAgICBCb3g8TG9jaz4gbV90aHJlYWRMb2NrOwogICAgIFJlZlB0
cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhyZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0
YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suCiAg
ICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0Nv
bnN0cmFpbnQoCisgICAgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+IGZ1bmN0aW9uLAorICAgIFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKKyAgICA6IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICwgbV9mdW5jdGlv
bihXVEZNb3ZlKGZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorewor
fQorCitNYXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3Vu
dCA9IDA7Cit9CisKK3NpemVfdCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRv
ciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIHNpemVfdCB2aXNpdENv
dW50QmVmb3JlID0gdmlzaXRvci52aXNpdENvdW50KCk7CisgICAgbV9mdW5jdGlvbih2aXNpdG9y
LCB0aW1lb3V0KTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCkg
LSB2aXNpdENvdW50QmVmb3JlOworICAgIHJldHVybiBtX2xhc3RWaXNpdENvdW50OworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50
U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBWb2xhdGlsaXR5IHsKKyAgICAgICAg
R3JleWVkQnlSZXN1bXB0aW9uLCAvLyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1
YXRlZCBhbnl0aW1lIHRoZSBtdXRhdG9yIHJlc3VtZXMuIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyBz
b21ldGhpbmcgdGhhdCB5b3UnZCBjYWxsIGEgInJvb3QiIGluIGEgdHJhZGl0aW9uYWwgR0MsIGFu
ZCB3ZSB1c2UgdGhhdCB0ZXJtLgorICAgICAgICBHcmV5ZWRCeU1hcmtpbmcgLy8gVGhlIGNvbnN0
cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55IHRpbWUgYW55IG9iamVjdCBpcyBtYXJr
ZWQgYW5kIGFueXRpbWUgdGhlIG11dGF0b3IgcmVzdW1lcy4KKyAgICB9OworICAgIAorICAgIE1h
cmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+LAorICAgICAgICBW
b2xhdGlsaXR5KTsKKyAgICAKKyAgICB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICBjb25z
dCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQorICAgIAorICAg
IHZvaWQgcmVzZXRTdGF0cygpOworICAgIAorICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICAKKyAgICBzaXplX3QgZXhlY3V0
ZShTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgCisgICAgVm9sYXRp
bGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQg
Y2FuIHNldCBtX2luZGV4LgorICAgIAorICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9
OworICAgIENTdHJpbmcgbV9uYW1lOworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IE1vbm90b25pY1RpbWUgdGltZW91dCk+IG1fZnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3Zv
bGF0aWxpdHk7CisgICAgc2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtpbmdDb25zdHJhaW50
U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U2V0
Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3VuZXhlY3V0ZWRSb290cy5jbGVhckFsbCgpOwor
ICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuY2xlYXJBbGwoKTsKKyAgICBmb3IgKGF1dG8mIGNv
bnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25zdHJhaW50LT5yZXNldFN0YXRzKCk7Cisg
ICAgICAgIGlmIChjb25zdHJhaW50LT52b2xhdGlsaXR5KCkgPT0gTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5UmVzdW1wdGlvbikKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNldChj
b25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV91bmV4ZWN1
dGVkT3V0Z3Jvd3Rocy5zZXQoY29uc3RyYWludC0+aW5kZXgoKSk7CisgICAgfQorfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAgQ1N0cmluZyBuYW1lLAorICAgIEZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpPiBmdW5jdGlvbiwK
KyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjphZGQoCisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJh
aW50KQoreworICAgIGNvbnN0cmFpbnQtPm1faW5kZXggPSBtX3NldC5zaXplKCk7CisgICAgbV9z
ZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOworfQorCitib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCit7CisgICAgQml0VmVjdG9yIGlnbm9yZWQ7CisgICAgcmV0dXJuIGRyYWlu
KHZpc2l0b3IsIHRpbWVvdXQsIG1fdW5leGVjdXRlZFJvb3RzLCBpZ25vcmVkKTsKK30KKworYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgQml0VmVjdG9yIGV4ZWN1dGVk
OworICAgIGlmICghZHJhaW4odmlzaXRvciwgdGltZW91dCwgbV91bmV4ZWN1dGVkUm9vdHMsIGV4
ZWN1dGVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZHJhaW4odmlzaXRvciwg
dGltZW91dCwgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RocywgZXhlY3V0ZWQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgc3RkOjpzb3J0KAorICAgICAgICBtX3NldC5iZWdpbigpLCBt
X3NldC5lbmQoKSwKKyAgICAgICAgWyZdIChhdXRvJiBhLCBhdXRvJiBiKSAtPiBib29sIHsKKyAg
ICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1cm4gdHJ1ZSBpZiBhIHNob3VsZCBjb21lIGJlZm9y
ZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhLT5sYXN0
VmlzaXRDb3VudCgpID4gYi0+bGFzdFZpc2l0Q291bnQoKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChleGVjdXRlZC5nZXQoaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2l6
ZV90IG51bUV4ZWN1dGVkID0gbV9zZXRbaV0tPmV4ZWN1dGUodmlzaXRvciwgdGltZW91dCk7Cisg
ICAgICAgIGlmIChudW1FeGVjdXRlZCAmJiBoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKKyAgICAgICAgY29uc3RyYWlu
dC0+ZXhlY3V0ZSh2aXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKK30KKworYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZHJhaW4oCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IE1vbm90b25pY1RpbWUgdGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4
ZWN1dGVkKQoreworICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAg
ICBzaXplX3QgbnVtRXhlY3V0ZWQgPSBtX3NldFtpbmRleF0tPmV4ZWN1dGUodmlzaXRvciwgdGlt
ZSk7CisgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOworICAgICAgICBleGVjdXRlZC5z
ZXQoaW5kZXgpOworICAgICAgICBpZiAobnVtRXhlY3V0ZWQgJiYgaGFzRWxhcHNlZCh0aW1lKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJN
YXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNldCB7CitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICB+TWFy
a2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAK
KyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpPiwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5p
cXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOworICAgIAorICAgIC8vIEV4ZWN1dGVzIG9ubHkg
cm9vdHMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcm9vdHMgaGF2ZSBiZWVuIGV4ZWN1dGVkLiBJdCdz
IGV4cGVjdGVkCisgICAgLy8gdGhhdCB5b3UnbGwgZG8gc29tZSBkcmFpbmluZyBhZnRlciB0aGlz
IGFuZCB0aGVuIHVzZSBleGVjdXRlQ29udmVyZ2VuY2UoKS4KKyAgICBib29sIGV4ZWN1dGVCb290
c3RyYXAoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbnN0cmFp
bnRzIHdlcmUgZXhlY3V0ZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5CisgICAg
Ly8gdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgorICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlKAorICAgICAgICBTbG90VmlzaXRvciYsCisgICAgICAgIE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFNp
bXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KKyAgICB2
b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBk
cmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwg
Qml0VmVjdG9yJiBleGVjdXRlZCk7CisgICAgCisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJv
b3RzOworICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9v
dFNldC5oCShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9P
cGFxdWVSb290U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICB2b2lkIGFkZCh2b2lkKiByb290KQorICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewog
ICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKICAgICAgICAgICAgIG1fY29u
dGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsK
KyAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAg
ICAgaW50IHNpemUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA5OTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogICAgIAogICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9yaWdodFRvUnVuKTsKICAgICAKLSAgICB3aGlsZSAoKCFtX2Nv
bGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAh
aGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAgIHdoaWxlICghaGFzRWxhcHNlZCh0aW1lb3V0KSkg
ewogICAgICAgICB1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGxvY2tlcik7CiAgICAgICAgIGlmICgh
bV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fY29sbGVjdG9yU3Rh
Y2sucmVmaWxsKCk7CkBAIC00NzYsNyArNDc2LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
TW9ub3RvbmljVGltZSB0aQogICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0g
dHJ1ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWlu
aW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJl
bW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJl
bihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOwotICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsK
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KQEAgLTYwNSwxMyArNjA2LDEz
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm8KICAgICAKICAgICBp
ZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7CiAgICAgICAgIC8vIFB1dCBk
aXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVl
Um9vdHMuYWRkKHJvb3QpOworICAgICAgICBtX3Zpc2l0Q291bnQgKz0gbV9oZWFwLm1fb3BhcXVl
Um9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUg
ZXZlcnkgb25jZSBpbgogICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2Fs
IHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0
YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgIG1fdmlzaXRDb3VudCAr
PSBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFp
bnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDk5ICszMCwxMDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWRv
dWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRp
b24oKSBjb25zdAotewotICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9Ci0g
ICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBtYXhIZWFk
cm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzID0KLSAgICAgICAgYnl0ZXNT
aW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKLSAgICAKLSAgICAvLyBoZWFkcm9v
bUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAg
IC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2Vl
IHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQotICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBh
bGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAgICAKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxu
ZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKLSAgICBpZiAoIShoZWFk
cm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMTsKLSAgICAK
LSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Ci0g
ICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0
dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICBPcHRpb25zOjpt
aW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24g
KiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQot
ICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKLSAgICAK
LSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOwotfQotCi1kb3VibGUgU3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAorU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKKyAgICA6IG1f
aGVhcChoZWFwKQogewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7
CiB9CiAKLVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVy
aW9kKCkgY29uc3QKK3ZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQog
ewotICAgIHJldHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBtX3Nj
aGVkdWxlci0+bV9wZXJpb2Q7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwp
OworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiB9CiAKLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFz
ZSgpIGNvbnN0Cit2b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6ZGlkU3RvcCgpCiB7Ci0gICAgcmV0
dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0YXRlID09IFJlc3VtZWQpOworICAg
IG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiB9CiAKLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1
bWVkKCkgY29uc3QKK3ZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjp3aWxsUmVzdW1lKCkKIHsKLSAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0
dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBo
YXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0YXRlID09IFJlc3VtZWQpOworICAgIG1fc3RhdGUg
PSBSZXN1bWVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAK
LU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1l
KCkgY29uc3QKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkK
IHsKLSAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29s
bGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNl
ZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0g
ZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0
b3JVdGlsaXphdGlvbigpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9ybWFs
OgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKTsKKyAgICBjYXNlIFN0
b3BwZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFJl
c3VtZWQ6CisgICAgICAgIHJldHVybiBtX3N0YXJ0VGltZSArIFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoT3B0aW9uczo6bXV0YXRvclRpbWVzbGljZU1TKCkpOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7
CiB9CiAKLU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRv
U3RvcCgpIGNvbnN0CitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6dGltZVRvUmVz
dW1lKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25z
Ojpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBl
bGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JV
dGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9z
Y2hlZHVsZXItPm1fcGVyaW9kOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9y
bWFsOgorICAgIGNhc2UgUmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIGNhc2UgU3RvcHBlZDogeworICAgICAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lu
bmluZ09mQ3ljbGUgPQorICAgICAgICAgICAgbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgLSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgICAgIAor
ICAgICAgICBkb3VibGUgbWF4SGVhZHJvb20gPQorICAgICAgICAgICAgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MgPQorICAgICAg
ICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKKyAgICAgICAg
CisgICAgICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJl
c3RpbmcgdGhpbmdzIGlmCisgICAgICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQor
ICAgICAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCisg
ICAgICAgIAorICAgICAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQorICAgICAgICAg
ICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7CisgICAgICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3Mg
PD0gMSkpCisgICAgICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMTsKKyAgICAgICAgCisgICAg
ICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKKyAg
ICAgICAgCisgICAgICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhl
IHBlcm1pdHRlZCB3aW5kb3cuCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAg
ICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKworICAgICAgICAgICAg
bXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1N
dXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11
dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICAgICAgCisgICAgICAgIFNlY29uZHMgdGltZVNwZW50
U3RvcHBlZCA9CisgICAgICAgICAgICBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6
Om11dGF0b3JUaW1lc2xpY2VNUygpKSAqCisgICAgICAgICAgICAoMSAvIG11dGF0b3JVdGlsaXph
dGlvbiAtIDEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgdGltZVNw
ZW50U3RvcHBlZDsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7CiB9CiAKLVNwYWNlVGltZVNjaGVkdWxl
cjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAg
ICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVu
dEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdp
bm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhI
ZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCitib29sIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6c2hvdWxkU3RvcCgpCiB7Ci0gICAgc25hcFBoYXNlKCk7CisgICAgcmV0dXJu
IGhhc0VsYXBzZWQodGltZVRvU3RvcCgpKTsKIH0KIAotdm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6
OnNuYXBQaGFzZSgpCitib29sIFNwYWNlVGltZVNjaGVkdWxlcjo6c2hvdWxkUmVzdW1lKCkKIHsK
LSAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgcmV0dXJuIGhh
c0VsYXBzZWQodGltZVRvUmVzdW1lKCkpOwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lz
aW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKK3ZvaWQgU3BhY2VUaW1l
U2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKIHsKLSAgICBEZWNpc2lvbiByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKLSAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgIHJlc3VsdC5t
X25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9z
dGF0ZSA9IE5vcm1hbDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNDQgKzM0LDM3IEBAIGNsYXNzIEhlYXA7CiAKIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxl
ciB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0K
LSAgICAgICAgCi0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25z
dDsKLSAgICAgICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0g
ICAgICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBw
aGFzZSgpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAg
ICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9u
aWNUaW1lIHRpbWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVT
Y2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsK
KyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgTm9ybWFsLCAvLyBOb3QgY29sbGVjdGluZy4KKyAg
ICAgICAgU3RvcHBlZCwKKyAgICAgICAgUmVzdW1lZAogICAgIH07CiAgICAgCi0gICAgLy8gQ29u
c3RydWN0IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCiAgICAgU3Bh
Y2VUaW1lU2NoZWR1bGVyKEhlYXAmKTsKICAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhh
c2UgdG8gc3RhcnQgbm93LgotICAgIHZvaWQgc25hcFBoYXNlKCk7CisgICAgU3RhdGUgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rp
b24oKTsKKyAgICAKKyAgICB2b2lkIGRpZFN0b3AoKTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKTsK
KyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKTsKKyAgICBNb25vdG9uaWNUaW1l
IHRpbWVUb1Jlc3VtZSgpOworICAgIAorICAgIGJvb2wgc2hvdWxkU3RvcCgpOworICAgIGJvb2wg
c2hvdWxkUmVzdW1lKCk7CiAgICAgCi0gICAgLy8gUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBj
dXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwgYmUgdmFsaWQgc28gbG9uZyBh
cwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFuZCB5b3UgaGF2ZW4ndCBjYWxs
ZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERlY2lzaW9uKCk7CisgICAgdm9p
ZCBlbmRDb2xsZWN0aW9uKCk7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEZWNp
c2lvbjsKIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBTZWNvbmRzIG1fcGVyaW9kOworICAgIFN0
YXRlIG1fc3RhdGUgeyBOb3JtYWwgfTsKICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZUF0VGhlQmVnaW5uaW5nOwogICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
QXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOworICAgIE1vbm90b25p
Y1RpbWUgbV9zdGFydFRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297865</attachid>
            <date>2016-12-30 17:24:28 -0800</date>
            <delta_ts>2017-01-02 13:30:09 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71518</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk2LDYgKzQ5Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEwIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZFNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkU2NoZWR1bGVyLmggKi87IH07CisJCTBGMUZCMzkwMUUxNzNBNkIw
MEE5QkU1MCAvKiBXb3JsZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogV29ybGRTY2hl
ZHVsZXIuY3BwICovOyB9OworCQkwRjFGQjM5MTFFMTczQTZGMDBBOUJFNTAgLyogV29ybGRTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhEMUUxNzNBNjIwMEE5QkU1MCAvKiBXb3JsZFNjaGVkdWxlci5oICovOyB9OwogCQkwRjFG
RTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBB
Ym9ydFJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0QxRENB
REMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi87IH07CiAJCTBGMjAxNzgwMURD
QURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdG
bG93SW5kZXhpbmcuaCAqLzsgfTsKQEAgLTQ1NSw2ICs0NTksMTAgQEAKIAkJMEY2NEIyNzkxQTc5
NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdC
MjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRF
QUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggKi87IH07CisJCTBGNjYwRTM3
MUUwNTE3QjkwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMg
LyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovOyB9OworCQkwRjY2MEUzODFFMDUxN0JCMDAzMTQ2
MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5oICovOyB9OworCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0
cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LzsgfTsKKwkJMEY2NjBFM0ExRTA1MTdDMTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUz
NjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLzsgfTsKIAkJMEY2
NjRDRTgxREEzMDRFRjAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY0Q0U3MURBMzA0RUQwMEIw
MEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi87IH07CiAJCTBGNjY2RUMwMTgzNTY2Rjkw
MEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3
RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdG
MSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTI1NTEsNiArMjU1OSwxMCBAQAogCQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyog
REZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYg
LyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFG
QjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9w
VGhlV29ybGRTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFG
QjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29y
bGRTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3
M0E2MjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdvcmxkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYxRkIzOEQxRTE3M0E2MjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmxkU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJl
YXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYm9ydFJlYXNvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5NTAgLyog
REZHRmxvd0luZGV4aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0Zsb3dJbmRleGluZy5jcHA7IHBhdGggPSBkZmcvREZHRmxvd0luZGV4aW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERG
R0Zsb3dJbmRleGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93
SW5kZXhpbmcuaDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI4NzYsNiArMjg4OCwxMCBAQAogCQkwRjY0QjI3NzFBNzk1N0IyMDA2
RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFB
Nzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEVBRjIx
QzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5n
Q29uc3RyYWludFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
YXJraW5nQ29uc3RyYWludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJs
b2NrU2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxv
Y2tTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJFMTgz
NTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkYxODM1NjZGOTAwRDAx
N0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzM1LDYgKzU3NTEsMTAgQEAKIAkJCQkxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEgLyog
TWFya2VkU3BhY2UuY3BwICovLAogCQkJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJr
ZWRTcGFjZS5oICovLAogCQkJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFj
ZUlubGluZXMuaCAqLywKKwkJCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5n
Q29uc3RyYWludC5oICovLAorCQkJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5n
Q29uc3RyYWludFNldC5jcHAgKi8sCisJCQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50U2V0LmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAwQjAyRTg2IC8q
IE1hcmtTdGFjay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUu
Y3BwICovLApAQCAtNTc1MSw2ICs1NzcxLDggQEAKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIuY3BwICovLAorCQkJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlci5oICovLAogCQkJCTE0
MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVG
MDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAogCQkJ
CTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLApAQCAtNTc2
Nyw2ICs1Nzg5LDggQEAKIAkJCQkxNEU4NEY5QjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5j
cHAgKi8sCiAJCQkJMTRFODRGOUMxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuaCAqLywKIAkJ
CQkxNDE1MDEzMjE1NEJCMTNGMDA1RDhDOTggLyogV2Vha1NldElubGluZXMuaCAqLywKKwkJCQkw
RjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogV29ybGRTY2hlZHVsZXIuY3BwICovLAorCQkJCTBG
MUZCMzhEMUUxNzNBNjIwMEE5QkU1MCAvKiBXb3JsZFNjaGVkdWxlci5oICovLAogCQkJCTJBNEVD
OTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICovLAogCQkJCTJB
NEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCAqLywKIAkJCQkw
RkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8sCkBA
IC04NTM1LDcgKzg1NTksOSBAQAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRjBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFM0ExRTA1
MTdDMTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzIwMjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOUMxQzAyNEE0OTAwMjQ4MUUyIC8qIEpTR2Vu
ZXJhdG9yRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODY0Nyw2ICs4NjczLDcgQEAKIAkJCQlBRDJGQ0JFQjFE
QjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZE
NjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovLApAQCAt
ODY4MSw2ICs4NzA4LDcgQEAKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYwMEFGQURCNSAvKiBM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExv
Y2FsU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkxMUUxNzNBNkYwMEE5QkU1MCAv
KiBXb3JsZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMDhBRDcxREYwOTI1RDAw
N0QzMjY5IC8qIExvY2tEdXJpbmdNYXJraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQz
NzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBD
RDE0QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC05NzE1LDYgKzk3NDMsNyBAQAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBD
b21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2
MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjFGQjM4RTFFMTczQTY1MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hl
ZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQw
MDc5MTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTk3MzAsNiArOTc1OSw3IEBACiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4IC8qIERh
dGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxs
RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGQzg0QjMxRDFEREFEOTAwNkI1QzQ2IC8q
IERlYnVnZ2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDMyNSw2ICsxMDM1NSw3
IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJp
bmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBC
NkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUQxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ1Byb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyog
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzc2LDYgKzEw
NDA3LDcgQEAKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFi
bGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBC
RTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY2NjBFMzcxRTA1MTdCOTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdp
c3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk1MkFBMjFERjc4NjBEMDBFMDZGQkQgLyog
VmlzaXRSYWNlS2V5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwOTk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAi
SlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVk
ZSAiTWFya2VkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQu
aCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKQEAgLTkxLDQxICs5Miw2
IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4
UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJl
c3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgotICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVh
cCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0
aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgZG91YmxlIHRoaXNQ
YXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxp
c2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAo
bWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0KLW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5I
ZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhl
YXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2LDExICsyODIsMjAgQEAgSGVhcDo6SGVhcChW
TSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwg
bV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6
Om1ha2VfdW5pcXVlPFNwYWNlVGltZVNjaGVkdWxlcj4oKnRoaXMpKQogICAgICwgbV90aHJlYWRM
b2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgw
KTsKICAgICAKKyAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgIG1f
c2NoZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTcGFjZVRpbWVTY2hlZHVsZXI+KCp0aGlzKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2Ugc2ltdWxhdGUgdHVybmluZyBvZmYgY29uY3VycmVu
dCBHQyBieSBtYWtpbmcgdGhlIHNjaGVkdWxlciBzYXkgdGhhdCB0aGUgd29ybGQKKyAgICAgICAg
Ly8gc2hvdWxkIGFsd2F5cyBiZSBzdG9wcGVkIHdoZW4gdGhlIGNvbGxlY3RvciBpcyBydW5uaW5n
LgorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNTdG9w
VGhlV29ybGRTY2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJp
ZnlIZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJp
Zmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0
aW9uKCkpOwogICAgIApAQCAtNDc5LDEyICs0NTQsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpCi17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0g
bV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhh
c05leHQoKSkgewpAQCAtNTYwLDEzMiArNTI5LDgxIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9p
bnQoZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAot
ICAgIFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWlu
dFNldC0+cmVzZXRTdGF0cygpOworICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24oKTsK
KyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVCb290c3RyYXAoc2xvdFZpc2l0b3Is
IG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgCisgICAgLy8gQWZ0ZXIgdGhpcywg
d2Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhbGwgdGhyb3VnaCBhbGwgb2YgdGhlICJzbG90Vmlz
aXRvci5pc0VtcHR5KCkiCisgICAgLy8gY2hlY2tzIGJlY2F1c2UgYm9vdHN0cmFwIHdvdWxkIGhh
dmUgcHV0IHRoaW5ncyBpbnRvIHRoZSB2aXNpdG9yLiBTbywgd2Ugc2hvdWxkIGZhbGwKKyAgICAv
LyB0aHJvdWdoIHRvIGRyYWluaW5nLgogICAgIAogICAgIGZvciAodW5zaWduZWQgaXRlcmF0aW9u
ID0gMTsgOyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAg
ICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAgICAgIG1fb2Jq
ZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKLSAgICAgICAgICAgIENvbnNl
cnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAgICAgIFN1cGVy
U2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgICAgIGdhdGhl
clN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVySlNTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZm
ZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2
ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZXJl
IGlzIG5vIHdvcmsgdG8gZG8sIHRoZW4gd2UgbWF5IGhhdmUgdG8gY3JlYXRlIHNvbWUgd29yay4K
KyAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gVGhl
IGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSB3b3JrIGlzIHRvIGNvbnNpZGVyIHRoZSBtdXRhdG9yIHN0
YWNrLgorICAgICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNp
dG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChzbG90VmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgbV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
OworICAgICAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwogICAgICAgICAg
ICAgCi0gICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVy
ZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKLSAgICAgICAgLy8g
YWxsIG9mIHRoZW0uCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldCgqbV92bSwgc2xvdFZpc2l0b3IpOwotI2VuZGlmCi0gICAgICAgICAg
ICAKLSAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2Nv
bGxlY3Rpb25TY29wZSkpCi0gICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJv
bmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9t
YXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+
ZXhjZXB0aW9uKCkpOwotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Zt
LT5sYXN0RXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIG1faGFuZGxlU2V0LnZp
c2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7Ci0gICAgICAgIG1faGFuZGxlU3RhY2sudmlz
aXQoc2xvdFZpc2l0b3IpOwotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAg
ICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5n
UHJvZmlsZXIoKSkgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9m
aWxlci0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NV
bnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZp
c2l0KHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9m
aWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgLy8gRklYTUU6IEluc3Rl
YWQgb2Ygd3JpdGUtYmFycmllcmluZyB0aGVtc2VsdmVzIHRvIHJlLWV4ZWN1dGUgdGhlaXIgdmlz
aXRDaGlsZHJlbgorICAgICAgICAgICAgLy8gbWV0aG9kcywgQ29kZUJsb2NrcyBzaG91bGQganVz
dCByZWdpc3RlciB0aGVtc2VsdmVzIGFzIGEgY29uc3RyYWludC4gVGhlbiB3ZQorICAgICAgICAg
ICAgLy8gd291bGRuJ3QgbmVlZCB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgICAgICAgICBQYXJh
bGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2xvdFZp
c2l0b3IuZHJhaW5JblBhcmFsbGVsKCk7CiAgICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCi0gICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgc2xvdFZpc2l0b3IubWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
IGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAg
ICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7
Ci0KLSAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKLSAg
ICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3Jr
bGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0s
IHNsb3RWaXNpdG9yKTsKLSAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBzbG90VmlzaXRv
ci5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIGlm
IChzbG90VmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0g
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKHNsb3RW
aXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JNYXJrU3Rh
Y2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIsIGE9
IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9iYXJyaWVy
c0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzbG90VmlzaXRv
ci5kcmFpbkluUGFyYWxsZWwobV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2
ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAgICAg
ICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBk
byBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgLy8gc28gdGhhdCB3
ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMg
aGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKLSAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhl
cndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0
byBkbyB0aGlzCi0gICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBh
dCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0Ci0gICAg
ICAgIC8vIEdDLgotICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwor
ICAgICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBtX3NjaGVkdWxlci0+d2lsbFJlc3VtZSgpOwogICAgICAgICAK
LSAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5
IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQotICAgICAgICAvLyB3aXRo
b3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCi0gICAgICAgIG1fbXV0YXRv
ck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwor
ICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgeworICAgICAgICAgICAgZG91YmxlIHRoaXNQ
YXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxp
c2Vjb25kcygpOworICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAo
bWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOworICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIHNsb3RWaXNp
dG9yKTsKKyAgICAgICAgcmVzdW1lVGhlV29ybGQoKTsKICAgICAgICAgCisgICAgICAgIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKICAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0Zp
eHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp1
c2VDb2xsZWN0b3JUaW1lc2xpY2luZygpKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVyLnNu
YXBQaGFzZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gZGVjaXNpb24gPSBzY2hlZHVsZXIuY3VycmVudERlY2lz
aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpc2lvbi5zaG91bGRCZVJlc3VtZWQo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbklu
UGFyYWxsZWxQYXNzaXZlbHkoZGVjaXNpb24udGltZVRvU3RvcCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgPT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0OjpEb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQgd2Ugd2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2VzIG5vdCB3
YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNlY29uZHMgc2NoZWR1bGVkSWRsZSA9IGRlY2lzaW9uLnRp
bWVUb1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0IHRoZSB2YWx1ZSBvZiBjb2xs
ZWN0UGVybWl0dGVkSWRsZVJhdGlvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNob3VsZCBiZSwgb3RoZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIFlvdSBj
b3VsZCBldmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VlIGZvciBp
dCBiZWluZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUgaXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUgKiBPcHRpb25zOjpjb2xsZWN0
b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRzIHdh
a2VVcExhdGVuY3kgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIGRlY2lzaW9uLnRpbWVUb1N0b3Ao
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FrZVVwTGF0ZW5jeSA+PSAxX21z
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJ3dWwhPSIsIHdha2VV
cExhdGVuY3kubWlsbGlzZWNvbmRzKCksICIgbXMgIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWwoZGVjaXNpb24udGltZVRv
UmVzdW1lKCkpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGRyYWluUmVzdWx0ICE9IFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIERpc2FibGluZyBjb2xsZWN0b3IgdGltZXNsaWNpbmcgaXMgbWVh
bnQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCi0gICAgICAgICAgICAgICAgLy8gLS1jb2xsZWN0
Q29udGludW91c2x5PXRydWUgdG8gbWF4aW1pemUgdGhlIG9wcG9ydHVuaXR5IGZvciBoYXJtZnVs
IHJhY2VzLgotICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29y
bGRTY29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFs
bGVsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNp
dG9yLmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ug
d2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2VzIG5vdCB3YW50CisgICAgICAg
ICAgICAvLyB0aGF0LgorICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gbV9zY2hl
ZHVsZXItPnRpbWVUb1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICAgICAg
Ly8gSXQncyB0b3RhbGx5IHVuY2xlYXIgd2hhdCB0aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRl
ZElkbGVSYXRpbworICAgICAgICAgICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3Vs
ZCBiZSBncmVhdGVyIHRoYW4gMC4gWW91IGNvdWxkIGV2ZW4KKyAgICAgICAgICAgIC8vIGFyZ3Vl
IGZvciBpdCBiZWluZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUgaXQuCisgICAgICAg
ICAgICBzbGVlcChzY2hlZHVsZWRJZGxlICogT3B0aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRs
ZVJhdGlvKCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2hlYXAuc3RvcFRoZVdv
cmxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIltHQzogIik7CisgICAgICAgIAorICAgICAgICBtX3NjaGVkdWxlci0+ZGlk
U3RvcCgpOwogICAgIH0KIAogICAgIHsKQEAgLTY5NCw2ICs2MTIsMTAgQEAgdm9pZCBIZWFwOjpt
YXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICBtX21hcmtpbmdDb25kaXRpb25W
YXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7
CisKKyAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlz
KTsKKyAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAogICAgIHVw
ZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgZW5kTWFya2luZygpOwogfQpAQCAt
NzMyLDI1ICs2NTQsNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5h
cHBlbmQocm9vdHMpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0
V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTM1NCw2ICsxMjU3
LDcgQEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICAKICAgICBoYW5kbGVH
Q0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgIG1fbXV0YXRvckRpZFJ1
biA9IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCBv
bGRTdGF0ZSkKQEAgLTEzNjYsNyArMTI3MCw3IEBAIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5
U2xvdyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0YXRlKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCEob2xkU3RhdGUgJiBzaG91bGRT
dG9wQml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYgIW1fc2No
ZWRlZHVsZXItPnNob3VsZFN0b3AoKSkgewogICAgICAgICBpZiAoIShvbGRTdGF0ZSAmIHN0b3Bw
ZWRCaXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX3dvcmxkU3RhdGUu
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5zdG9wcGVkQml0KTsK
QEAgLTE0MzksNiArMTM0Myw3IEBAIHZvaWQgSGVhcDo6YWNxdWlyZUFjY2Vzc1Nsb3coKQogICAg
ICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG5ld1N0
YXRlKSkgewogICAgICAgICAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICAgICAgICAgIGhhbmRs
ZU5lZWRGaW5hbGl6ZSgpOworICAgICAgICAgICAgbV9tdXRhdG9yRGlkUnVuID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIwODMsOCArMTk4OCwxMCBA
QCBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NECiAgICAgaWYgKGRlZmVy
cmFsQ29udGV4dCkgewogICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgfD0KICAg
ICAgICAgICAgICEhKG1fd29ybGRTdGF0ZS5sb2FkKCkgJiAoc2hvdWxkU3RvcEJpdCB8IG5lZWRG
aW5hbGl6ZUJpdCB8IGdjRGlkSklUQml0KSk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKICAg
ICAgICAgc3RvcElmTmVjZXNzYXJ5KCk7CisgICAgICAgIHN0b3BJZlJlcXVlc3RlZEJ5U2NoZWR1
bGVyKCk7CisgICAgfQogICAgIAogICAgIGlmICghc2hvdWxkQ29sbGVjdEhldXJpc3RpYygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTU4LDggKzIwNjUsMTIwIEBAIHZvaWQgSGVhcDo6
c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3Zv
aWQgSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkKK3sKKyAgICBtX2NvbnN0cmFpbnRTZXQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpOworICAgIAorICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAorICAgICAgICAiQ29uc2VydmF0aXZlIFNjYW4iLAorICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3RvbmljVGltZSkgeworICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0
cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnBy
ZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CisgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290
cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CisgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25z
ZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXll
ZEJ5UmVzdW1wdGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAg
ICJNaXNjIFNtYWxsIFJvb3RzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgICAg
ICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgc2xvdFZpc2l0b3IpOworI2Vu
ZGlmCisKKyAgICAgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRl
ZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5n
cy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNsb3RW
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7Cisg
ICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeVJlc3VtcHRpb24p
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiU3Ryb25nIEhhbmRs
ZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgTW9ub3Rvbmlj
VGltZSkgeworICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9u
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkRlYnVnZ2VyIiwK
KyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUp
IHsKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
eworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKSk7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZp
c2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBs
aW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICB9CisjZW5k
aWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgbV92bS0+dHlwZVBy
b2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOworICAg
ICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsK
KyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkpJVCBTdHViIFJvdXRp
bmVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25p
Y1RpbWUpIHsKKyAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcyhzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeVJlc3VtcHRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiV2VhayBTZXRzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLm1lcmdl
T3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxl
bFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgICAgIHBhcmFs
bGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7Cisg
ICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOwor
ICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiV2VhayBSZWZlcmVuY2Ug
SGFydmVzdGVycyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBN
b25vdG9uaWNUaW1lKSB7CisgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIq
IGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHQoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdl
YWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJERkcgV29ya2xpc3RzIiwKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWUpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKKyAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNp
dFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSB1bm5lY2Vzc2FyeS4KKyAgICAgICAg
ICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRv
cik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtp
bmcpOworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKIHsK
KyAgICBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9
IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA5OTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCAr
NzMsMTIgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNs
YXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1l
U2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKK2NsYXNz
IFdvcmxkU2NoZWR1bGVyOwogCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNwZWN1bGF0aXZlSklU
OwpAQCAtMzQxLDYgKzM0Myw5IEBAIHB1YmxpYzoKICAgICAvLyBhbHJlYWR5IGJlIGNhbGxlZCBm
b3IgeW91IGF0IHRoZSByaWdodCB0aW1lcy4KICAgICB2b2lkIHN0b3BJZk5lY2Vzc2FyeSgpOwog
ICAgIAorICAgIC8vIEZJWE1FCisgICAgdm9pZCBzdG9wSWZSZXF1aXJlZEJ5U2NoZWR1bGVyKCk7
CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIga2luZCBvZiBzdG9wcGluZyBv
ZiB0aGUgY29sbGVjdG9yLCBhbmQgaXQgbWF5IHJlcXVpcmUgd2FpdGluZyBmb3IgYQogICAgIC8v
IHdoaWxlLiBUaGlzIGlzIG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQSSBmb3IgY2xpZW50cyBvZiBj
b2xsZWN0QWxsR2FyYmFnZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJlCiAgICAgLy8gaXMgbm8gR0Mg
YmVmb3JlIG9yIGFmdGVyIHRoYXQgZnVuY3Rpb24gY2FsbC4gQWZ0ZXIgY2FsbGluZyB0aGlzLCB5
b3UgYXJlIGZyZWUgdG8gc3RhcnQgR0NzCkBAIC00MTMsOSArNDE4LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhlV29ybGQoKTsKICAgICAK
LSAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOwotICAgIGZyaWVuZCBjbGFzcyBSZXN1bWVU
aGVXb3JsZFNjb3BlOwotICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0b3IoKTsKICAgICB2b2lk
IHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQ1NSw3ICs0NTcsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9p
ZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lk
IGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKICAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAg
IHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CkBAIC00OTgsNiAr
NDk5LDggQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmll
ck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRC
ZUZlbmNlZChib29sIHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgp
OwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9y
YW1TaXplOwpAQCAtNTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOworICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OwogCiAg
ICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcg
dGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVy
IHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91
bnQgb2YgbWVtb3J5IGZyb20KQEAgLTYxNSw2ICs2MjAsOCBAQCBwcml2YXRlOgogICAgIHNpemVf
dCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRpZgogICAgIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxTcGFjZVRpbWVTY2hlZHVsZXI+IG1fc2NoZWR1bGVyOworICAgIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaG91bGRTdG9wQml0ID0gMXUgPDwgMHU7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHN0b3BwZWRCaXQgPSAxdSA8PCAxdTsKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaGFzQWNjZXNzQml0ID0gMXUgPDwgMnU7CkBAIC02MzAsNiArNjM3LDcgQEAgcHJpdmF0
ZToKICAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKICAgICBib29sIG1fdGhy
ZWFkU2hvdWxkU3RvcCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAgIEJveDxMb2Nr
PiBtX3RocmVhZExvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV90
aHJlYWRDb25kaXRpb247IC8vIFRoZSBtdXRhdG9yIG11c3Qgbm90IHdhaXQgb24gdGhpcy4gSXQg
d291bGQgY2F1c2UgYSBkZWFkbG9jay4KICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkPiBtX3Ro
cmVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01h
cmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIG5hbWUsCisg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KT4g
ZnVuY3Rpb24sCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogbV9uYW1lKFdURk1v
dmUobmFtZSkpCisgICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKQorICAgICwgbV92
b2xhdGlsaXR5KHZvbGF0aWxpdHkpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50Ojp+TWFya2lu
Z0NvbnN0cmFpbnQoKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRz
KCkKK3sKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKK30KKworc2l6ZV90IE1hcmtpbmdDb25z
dHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCit7CisgICAgc2l6ZV90IHZpc2l0Q291bnRCZWZvcmUgPSB2aXNpdG9yLnZpc2l0Q291bnQo
KTsKKyAgICBtX2Z1bmN0aW9uKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIG1fbGFzdFZpc2l0Q291
bnQgPSB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIHZpc2l0Q291bnRCZWZvcmU7CisgICAgcmV0dXJu
IG1fbGFzdFZpc2l0Q291bnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdD
b25zdHJhaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
bnVtIFZvbGF0aWxpdHkgeworICAgICAgICBHcmV5ZWRCeVJlc3VtcHRpb24sIC8vIFRoZSBjb25z
dHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueXRpbWUgdGhlIG11dGF0b3IgcmVzdW1l
cy4gVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHNvbWV0aGluZyB0aGF0IHlvdSdkIGNhbGwgYSAicm9v
dCIgaW4gYSB0cmFkaXRpb25hbCBHQywgYW5kIHdlIHVzZSB0aGF0IHRlcm0uCisgICAgICAgIEdy
ZXllZEJ5TWFya2luZyAvLyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBh
bnkgdGltZSBhbnkgb2JqZWN0IGlzIG1hcmtlZCBhbmQgYW55dGltZSB0aGUgbXV0YXRvciByZXN1
bWVzLgorICAgIH07CisgICAgCisgICAgTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJp
bmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KT4sCisgICAgICAgIFZvbGF0aWxpdHkpOworICAgIAorICAgIH5NYXJraW5n
Q29uc3RyYWludCgpOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisgICAg
c2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsg
fQorICAgIAorICAgIC8vIFJldHVybnMgdGhlIGxhc3RWaXNpdENvdW50LCBmb3IgY29udmVuaWVu
Y2UuCisgICAgc2l6ZV90IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpOworICAgIAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
dm9sYXRpbGl0eTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KKyAgICAKKyAgICB1bnNpZ25l
ZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpPiBtX2Z1bmN0aW9u
OworICAgIFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIHNpemVfdCBtX2xhc3RWaXNpdENv
dW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCisKKyNp
bmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7CitwdWJs
aWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKKyAgICAgICAgOiBt
X3NldChzZXQpCisgICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgICwgbV90aW1l
b3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgJiYgaGFz
RWxhcHNlZChtX3RpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IGl0IHRpbWVzIG91dC4KKyAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAgICAg
ICAgZXhlY3V0ZShpbmRleCk7CisgICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVk
LmdldChpbmRleCk7IH0KKworICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgewor
ICAgICAgICBzaXplX3QgbnVtVmlzaXRlZCA9IG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZSht
X3Zpc2l0b3IsIG1fdGltZW91dCk7CisgICAgICAgIG1fZGlkVmlzaXRTb21ldGhpbmcgfD0gISFu
dW1WaXNpdGVkOworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgU2xvdFZpc2l0
b3ImIG1fdmlzaXRvcjsKKyAgICBNb25vdG9uaWNUaW9tZSBtX3RpbWVvdXQ7CisgICAgQml0VmVj
dG9yIG1fZXhlY3V0ZWQ7CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsK
K307CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9
CisKK01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQoreworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3VuZXhl
Y3V0ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuY2xlYXJB
bGwoKTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25z
dHJhaW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIGlmIChjb25zdHJhaW50LT52b2xhdGlsaXR5
KCkgPT0gTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbikKKyAgICAgICAgICAg
IG1fdW5leGVjdXRlZFJvb3RzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5zZXQoY29uc3RyYWludC0+aW5k
ZXgoKSk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAg
Q1N0cmluZyBuYW1lLAorICAgIEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpPiBmdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQoreworICAgIGNvbnN0cmFpbnQtPm1faW5kZXgg
PSBtX3NldC5zaXplKCk7CisgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwor
fQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgLy8gQm9vdHN0cmFw
IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndCBkb25lIGFueSBvYmplY3QgdmlzaXRpbmcgeWV0LiBUaGlz
IG1lYW5zIHRoYXQgd2Ugd2FudCB0bworICAgIC8vIG9ubHkgZXhlY3V0ZSByb290IGNvbnN0cmFp
bnRzICh3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgdGhvc2UgdGhhdCB3ZSBzYXkgYXJlIGdyZXll
ZCBieQorICAgIC8vIHJlc3VtcHRpb24pLCBzaW5jZSB0aGUgb3RoZXIgY29uc3RyYWludHMgYXJl
IHN1cGVyIHVubGlrZWx5IHRvIHRyaWdnZXIgd2l0aG91dCBzb21lIG9iamVjdAorICAgIC8vIHZp
c2l0aW5nLiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZ28gc3RyYWln
aHQgdG8gb2JqZWN0IHZpc2l0aW5nIGFmdGVyCisgICAgLy8gdGhpcy4KKyAgICBFeGVjdXRpb25D
b250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIHJl
dHVybiBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKK30KKworYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgRXhlY3V0aW9uQ29udGV4dCBl
eGVjdXRpb25Db250ZXh0KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICAKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQg
YWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCisgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhv
c2Ugbm93LgorICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBzdGQ6OnNvcnQoCisgICAgICAgIG1fc2V0LmJlZ2luKCksIG1fc2V0LmVuZCgpLAorICAg
ICAgICBbJl0gKGF1dG8mIGEsIGF1dG8mIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gUmVt
ZW1iZXI6IHJldHVybiB0cnVlIGlmIGEgc2hvdWxkIGNvbWUgYmVmb3JlIGIuCisgICAgICAgICAg
ICBpZiAoYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGEtPmxhc3RWaXNpdENvdW50KCkgPiBi
LT5sYXN0VmlzaXRDb3VudCgpOworICAgICAgICB9KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChleGVjdXRpb25Db250
ZXh0LmRpZEV4ZWN1dGUoaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZXhlY3V0
aW9uQ29udGV4dC5leGVjdXRlKGkpOworICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5zaG91
bGRUaW1lT3V0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1f
c2V0KQorICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgeworcHVibGljOgorICAgIE1hcmtpbmdDb25zdHJh
aW50U2V0KCk7CisgICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgCisgICAgdm9pZCBy
ZXNldFN0YXRzKCk7CisgICAgCisgICAgdm9pZCBhZGQoCisgICAgICAgIENTdHJpbmcgbmFtZSwK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1l
b3V0KT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAg
ICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAg
ICAvLyBFeGVjdXRlcyBvbmx5IHJvb3RzLiBSZXR1cm5zIHRydWUgaWYgYWxsIHJvb3RzIGhhdmUg
YmVlbiBleGVjdXRlZC4gSXQncyBleHBlY3RlZAorICAgIC8vIHRoYXQgeW91J2xsIGRvIHNvbWUg
ZHJhaW5pbmcgYWZ0ZXIgdGhpcyBhbmQgdGhlbiB1c2UgZXhlY3V0ZUNvbnZlcmdlbmNlKCkuCisg
ICAgYm9vbCBleGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGFsbCBjb25zdHJhaW50cyB3ZXJlIGV4ZWN1dGVkLiBUaGlzIGFzc3VtZXMgdGhhdCB5
b3UndmUgYWxyYWVkeQorICAgIC8vIHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVy
ZS4KKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKKyAgICAgICAgU2xvdFZpc2l0b3ImLAor
ICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAKKyAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkg
c2hlbmFuaWdhbnMuCisgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgCitw
cml2YXRlOgorICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIEV4
ZWN1dGlvbkNvbnRleHQ7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1Rp
bWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlk
VmlzaXRTb21ldGhpbmcpOworICAgIAorICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsK
KyAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQu
aAkocmV2aXNpb24gMjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVl
Um9vdFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9p
ZCBhZGQodm9pZCogcm9vdCkKKyAgICBib29sIGFkZCh2b2lkKiByb290KQogICAgIHsKICAgICAg
ICAgaWYgKHJvb3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCiAgICAgICAgICAgICBtX2NvbnRhaW5z
TGFzdFF1ZXJpZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgbV9yb290cy5hZGQocm9vdCk7CisgICAg
ICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwogICAgIH0KIAogICAgIGlu
dCBzaXplKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAJKHJldmlzaW9uIDIwOTk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICAKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7CiAgICAgCi0gICAgd2hpbGUgKCghbV9jb2xsZWN0
b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0Vs
YXBzZWQodGltZW91dCkpIHsKKyAgICB3aGlsZSAoIWhhc0VsYXBzZWQodGltZW91dCkpIHsKICAg
ICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBlZChsb2NrZXIpOwogICAgICAgICBpZiAoIW1fY29s
bGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJl
ZmlsbCgpOwpAQCAtNDc2LDcgKzQ3Niw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90
b25pY1RpbWUgdGkKICAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1O
dW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVM
YXN0KCkgJiYgY291bnRkb3duLS07KQogICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9t
dXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7CiAgICAg
ICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CkBAIC02MDUsMTMgKzYwNiwxMyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiAgICAgCiAgICAgaWYgKE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0
bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmFkZChyb290KTsKKyAgICAgICAgbV92aXNpdENvdW50ICs9IG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmFkZChyb290KS5pc05ld0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFB1
dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5
IG9uY2UgaW4KICAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRz
IGRvbid0IGdyb3cgdG9vIGxhcmdlLgogICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KTsKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICBtX3Zpc2l0Q291bnQgKz0gbV9v
cGFxdWVSb290cy5hZGQocm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3Bh
cXVlUm9vdCh2b2lkKiByb290KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMDk5NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw5OSArMzAsMTExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1kb3VibGUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkg
Y29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQotICAgICAg
ICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgbWF4SGVhZHJvb20g
PQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5k
IC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsK
LSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0gICAgICAgIGJ5dGVzU2luY2VC
ZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0gICAgLy8gaGVhZHJvb21GdWxs
bmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKLSAgICAvLyBi
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0
IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZs
b2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+
PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAgaWYgKCEoaGVhZHJvb21G
dWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Ci0gICAgCi0gICAg
ZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOwotICAgIAot
ICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3
aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAgT3B0aW9uczo6bWluaW11
bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAot
ICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KLSAgICAg
ICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Ci0gICAgCi0gICAg
cmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KKy8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBwYXJ0IG9mIGEgaGllcmFyY2h5IG9mIHNjaGVkdWxlcnM/IEluIHN1Y2ggYSB3b3JsZCwg
d2Ugd291bGQKKy8vIHByb2JhYmx5IHJlcHJlc2VudCBjb25jdXJyZW50LUdDLW9mZiBhcyBhIHNj
aGVkdWxlci4gSXQgd291bGQgdGhlbiBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIGtlZXAKKy8vIHRo
ZSBvbGQgc2NoZWR1bGVyIGFyb3VuZC4gSSB3b25kZXIgaWYgd2UgY291bGQgYWxzbyBzaW11bGF0
ZSB0aGUgb2xkIHNjaGVkdWxlcidzIHRyZWF0bWVudCBvZgorLy8gZml4cG9pbnQgaXRlcmF0aW9u
cyBhbmQgaWRsZSB0aW1lLiBUaGF0IHNvdW5kcyBhbm5veWluZyBhbmQgaGFyZCwgc28gbWF5YmUg
d2UgZG9uJ3Qgd2FudCB0byBnbworLy8gdGhlcmUuCiAKLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVs
ZXI6OkRlY2lzaW9uOjp0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0CitTcGFjZVRp
bWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFw
KGhlYXApCiB7Ci0gICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKIH0K
IAotU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJpb2Qo
KSBjb25zdAorU3BhY2VUaW1lU2NoZWR1bGVyOjp+U3BhY2VUaW1lU2NoZWR1bGVyKCkKIHsKLSAg
ICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kOwogfQogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
cGhhc2UoKSBjb25zdAorV29ybGRTY2hlZHVsZXI6OlN0YXRlIFNwYWNlVGltZVNjaGVkdWxlcjo6
c3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1
bGVyLT5tX3BlcmlvZDsKKyAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAotYm9vbCBTcGFjZVRpbWVT
Y2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAordm9pZCBTcGFjZVRp
bWVTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxl
Y3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdl
dE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IE5vcm1hbCk7
CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
Ojp0aW1lVG9SZXN1bWUoKSBjb25zdAordm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OmRpZFN0b3Ao
KQogewotICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFw
c2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLSAgICByZXR1cm4gbV9ub3cg
LSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENvbGxl
Y3RvclV0aWxpemF0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVk
IHx8IG1fc3RhdGUgPT0gUmVzdW1lZCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9z
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFj
ZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK3ZvaWQgU3BhY2VU
aW1lU2NoZWR1bGVyOjp3aWxsUmVzdW1lKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVk
KCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAg
ICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3Bl
cmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVs
YXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0YXRlID09IFJlc3VtZWQpOworICAgIG1fc3Rh
dGUgPSBSZXN1bWVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9
CiAKLVNwYWNlVGltZVNjaGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0g
ICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29u
ZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
KQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRp
b25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91Ymxl
PihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVu
U2l6ZSkpCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6dGltZVRvU3RvcCgpCiB7
Ci0gICAgc25hcFBoYXNlKCk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb3Jt
YWw6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOworICAgIGNhc2Ug
U3RvcHBlZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGNhc2Ug
UmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyhPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSk7CisgICAgfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUo
KTsKIH0KIAotdm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSgpCitNb25vdG9uaWNU
aW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKIHsKLSAgICBtX2luaXRpYWxU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBOb3JtYWw6CisgICAgY2FzZSBSZXN1bWVkOgorICAgICAgICByZXR1cm4gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgY2FzZSBTdG9wcGVkOiB7CisgICAgICAgIGRvdWJsZSBieXRlc1Np
bmNlQmVnaW5uaW5nT2ZDeWNsZSA9CisgICAgICAgICAgICBtX2hlYXAubV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAg
ICAgICAgCisgICAgICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9CisgICAgICAgICAgICBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmc7CisgICAgICAgIAorICAgICAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9
CisgICAgICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOwor
ICAgICAgICAKKyAgICAgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhl
ciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhp
cyBjb2RlCisgICAgICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJh
Z29ucy4KKyAgICAgICAgCisgICAgICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCisg
ICAgICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKKyAgICAgICAgaWYgKCEoaGVhZHJvb21G
dWxsbmVzcyA8PSAxKSkKKyAgICAgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOworICAgICAg
ICAKKyAgICAgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxu
ZXNzOworICAgICAgICAKKyAgICAgICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24g
aW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uID0K
KyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCisgICAg
ICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCisgICAgICAgICAgICAgICAgT3B0aW9uczo6
bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAgICAgICBPcHRpb25zOjpt
aW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgICAgICAKKyAgICAgICAgU2Vjb25kcyB0
aW1lU3BlbnRTdG9wcGVkID0KKyAgICAgICAgICAgIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMo
T3B0aW9uczo6bXV0YXRvclRpbWVzbGljZU1TKCkpICoKKyAgICAgICAgICAgICgxIC8gbXV0YXRv
clV0aWxpemF0aW9uIC0gMSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9zdGFydFRpbWUg
KyB0aW1lU3BlbnRTdG9wcGVkOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsKIH0KIAotU3BhY2VUaW1l
U2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lvbigp
Cit2b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCiB7Ci0gICAgRGVjaXNp
b24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7Ci0gICAgcmVzdWx0Lm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIG1fc3RhdGUgPSBOb3JtYWw7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkocmV2aXNpb24gMjA5
OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDUzICsyNSw1MCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKyNp
bmNsdWRlICJXb3JsZFNjaGVkdWxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVh
cDsKIAotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKKy8vIFRoZSBKU0MgY29uY3VycmVudCBH
QyBzb21ldGltZXMgc3RvcHMgdGhlIHdvcmxkIGluIG9yZGVyIHRvIHN0YXkgYWhlYWQgb2YgaXQu
IFRoZXNlIGRlbGliZXJhdGUsCisvLyBzeW50aGV0aWMgcGF1c2VzIGVuc3VyZSB0aGF0IHRoZSBH
QyB3b24ndCBoYXZlIHRvIGRvIG9uZSBodWdlIHBhdXNlIGluIG9yZGVyIHRvIGNhdGNoIHVwIHRv
IHRoZQorLy8gcmV0cmVhdGluZyB3YXZlZnJvbnQuIFRoZSBzY2hlZHVsZXIgaXMgY2FsbGVkICJz
cGFjZS10aW1lIiBiZWNhdXNlIGl0IGxpbmtzIHRoZSBhbW91bnQgb2YgdGltZQorLy8gdGhhdCB0
aGUgd29ybGQgaXMgcGF1c2VkIGZvciB0byB0aGUgYW1vdW50IG9mIHNwYWNlIHRoYXQgdGhlIHdv
cmxkIGFsbG9jYXRlZCBzaW5jZSB0aGUgR0MgY3ljbGUKKy8vIGJlZ2FuLgorCitjbGFzcyBTcGFj
ZVRpbWVTY2hlZHVsZXIgOiBwdWJsaWMgV29ybGRTY2hlZHVsZXIgewogcHVibGljOgotICAgIGNs
YXNzIERlY2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBk
b3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0
YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBz
ZWRJblBlcmlvZCgpIGNvbnN0OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0
aW1lVG9SZXN1bWUoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkg
Y29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFj
ZVRpbWVTY2hlZHVsZXI7Ci0KLSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxl
ciB7IG51bGxwdHIgfTsKLSAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUg
eyAwIH07Ci0gICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAgZW51bSBTdGF0ZSB7Cisg
ICAgICAgIE5vcm1hbCwgLy8gTm90IGNvbGxlY3RpbmcuCisgICAgICAgIFN0b3BwZWQsCisgICAg
ICAgIFJlc3VtZWQKICAgICB9OwogICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVy
IGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgogICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFw
Jik7CisgICAgflNwYWNlVGltZVNjaGVkdWxlcigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlk
ZTsKICAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8gc3RhcnQgbm93LgotICAg
IHZvaWQgc25hcFBoYXNlKCk7CisgICAgdm9pZCBkaWRTdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCB3aWxsUmVzdW1lKCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgLy8gUmV0dXJucyBhIHNuYXBzaG90
IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwgYmUgdmFsaWQg
c28gbG9uZyBhcwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFuZCB5b3UgaGF2
ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERlY2lzaW9uKCk7
CisgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgb3ZlcnJpZGU7CisgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAgICBib29sIHNob3VsZFN0b3Ao
KSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFJlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAg
IHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgRGVjaXNpb247Ci0KICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25kcyBtX3Bl
cmlvZDsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgTm9ybWFsIH07CiAgICAgZG91YmxlIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKICAgICBkb3VibGUgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsK
KyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkU2NoZWR1bGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXI6OlN5bmNocm9ub3VzU3RvcFRoZVdv
cmxkU2NoZWR1bGVyKCkKK3sKK30KKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXI6
On5TeW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlcigpCit7Cit9CisKK1dvcmxkU2NoZWR1
bGVyOjpTdGF0ZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlcjo6c3RhdGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdv
cmxkU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3RhdGUgPT0gTm9ybWFsKTsKKyAgICBtX3N0YXRlID09IFN0b3BwZWQ7Cit9CisKK01vbm90b25p
Y1RpbWUgU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQorewor
ICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkg
OiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1Rv
cFRoZVdvcmxkU2NoZWR1bGVyOjp0aW1lVG9SZXN1bWUoKQoreworICAgIHJldHVybiBtX3N0YXRl
ID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6Om5vdygpIDogTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZFNjaGVkdWxlcjo6ZW5kQ29s
bGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAg
ICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZFNjaGVkdWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldvcmxkU2NoZWR1bGVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgSlNDIGNvbmN1cnJlbnQgR0MgcmVsaWVzIG9uIHN0
b3BwaW5nIHRoZSB3b3JsZCB0byBzdGF5IGFoZWFkIG9mIHRoZSByZXRyZWF0aW5nIHdhdmVmcm9u
dC4KKy8vIEl0IHNvIGhhcHBlbnMgdGhhdCB0aGUgc2FtZSBBUEkgY2FuIGJlIHJldXNlZCB0byBp
bXBsZW1lbnQgYSBub24tY29uY3VycmVudCBHQyBtb2RlLCB3aGljaCB3ZQorLy8gdXNlIG9uIHBs
YXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlIEdDJ3MgYXRvbWljaXR5IHByb3RvY29scy4g
VGhhdCBtZWFucyBhbnl0aGluZyBvdGhlcgorLy8gdGhhbiBYODYtNjQgYW5kIEFSTTY0LiBUaGlz
IHNjaGVkdWxlciBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBjb25jdXJyZW50IEdD
J3MKKy8vIFNwYWNlVGltZVNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3Vt
ZSB0aGUgd29ybGQgb25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZFNjaGVkdWxlciA6IHB1YmxpYyBXb3JsZFNjaGVkdWxlciB7CitwdWJsaWM6
CisgICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRTY2hlZHVsZXIoKTsKKyAgICB+U3luY2hyb25v
dXNTdG9wVGhlV29ybGRTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgb3ZlcnJpZGU7CisgICAgTW9ub3Rv
bmljVGltZSB0aW1lVG9SZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGVuZENvbGxl
Y3Rpb24oKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBTdGF0ZSBtX3N0YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dv
cmxkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Xb3JsZFNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV29ybGRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldvcmxkU2NoZWR1bGVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitXb3JsZFNjaGVkdWxlcjo6V29ybGRTY2hlZHVsZXIoKQoreworfQorCitXb3JsZFNj
aGVkdWxlcjo6fldvcmxkU2NoZWR1bGVyKCkKK3sKK30KKwordm9pZCBXb3JsZFNjaGVkdWxlcjo6
ZGlkU3RvcCgpCit7Cit9CisKK3ZvaWQgV29ybGRTY2hlZHVsZXI6OmRpZFJlc3VtZSgpCit7Cit9
CisKK2Jvb2wgV29ybGRTY2hlZHVsZXI6OnNob3VsZFN0b3AoKQoreworICAgIHJldHVybiBoYXNF
bGFwc2VkKHRpbWVUb1N0b3AoKSk7Cit9CisKK2Jvb2wgV29ybGRTY2hlZHVsZXI6OnNob3VsZFJl
c3VtZSgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvUmVzdW1lKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV29y
bGRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
b3JsZFNjaGVkdWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dvcmxkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIFdvcmxkU2NoZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JsZFNj
aGVkdWxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51
bSBTdGF0ZSB7CisgICAgICAgIE5vcm1hbCwgLy8gTm90IGNvbGxlY3RpbmcuCisgICAgICAgIFN0
b3BwZWQsCisgICAgICAgIFJlc3VtZWQKKyAgICB9OworICAgIAorICAgIFdvcmxkU2NoZWR1bGVy
KCk7CisgICAgdmlydHVhbCB+V29ybGRTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0
ZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkg
PSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlc3VtZSgpOworICAgIAorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9w
KCkgPSAwOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayB3aGVuIHRvIHN0b3AuCisgICAg
dmlydHVhbCBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpID0gMDsgLy8gQ2FsbCB3aGlsZSBz
dG9wcGVkLCB0byBhc2sgd2hlbiB0byByZXN1bWUuCisgICAgCisgICAgYm9vbCBzaG91bGRTdG9w
KCk7IC8vIENhbGwgd2hpbGUgcmVzdW1lZCwgdG8gYXNrIGlmIHdlIHNob3VsZCBzdG9wIG5vdy4K
KyAgICBib29sIHNob3VsZFJlc3VtZSgpOyAvLyBDYWxsIHdoaWxlIHN0b3BwZWQsIHRvIGFzayBp
ZiB3ZSBzaG91bGQgcmVzdW1lIG5vdy4KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ29sbGVj
dGlvbigpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297909</attachid>
            <date>2017-01-02 13:30:09 -0800</date>
            <delta_ts>2017-01-05 21:51:18 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>118922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk2LDYgKzQ5Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkxMUUxNzNBNkYwMEE5QkU1MCAvKiBXb3JsZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEQxRTE3M0E2MjAwQTlCRTUwIC8q
IFdvcmxkU2NoZWR1bGVyLmggKi87IH07CisJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBW
aXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsg
fTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RG
MDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsgfTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAw
QTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmts
aXN0SW5saW5lcy5oICovOyB9OwogCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRS
ZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1
MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGlu
Zy5jcHAgKi87IH07CiAJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAx
NzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLzsgfTsKQEAgLTQ1NSw2
ICs0NjIsMTAgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjYwRTM3MUUwNTE3QjkwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwICovOyB9
OworCQkwRjY2MEUzODFFMDUxN0JCMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM0MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovOyB9OworCQkwRjY2MEUzOTFFMDUx
N0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKKwkJMEY2NjBFM0ExRTA1MTdDMTAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaCAqLzsgfTsKIAkJMEY2NjRDRTgxREEzMDRFRjAwQjAwQTExIC8qIENvZGVC
bG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmgg
Ki87IH07CiAJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1
NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc1Myw4ICs3NjQsOCBAQAogCQkwRkRE
QkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBG
RERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyB9OwogCQkwRkRF
ODdGOTFERkQwQzc2MDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGODFERkQwQzZEMDA2NEMzOTAg
LyogQ2VsbENvbnRhaW5lci5jcHAgKi87IH07Ci0JCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAv
KiBTcGFjZVRpbWVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVs
ZXIuaCAqLzsgfTsKLQkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCAqLzsgfTsK
KwkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4N0ZC
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CisJ
CTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4N0ZB
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsK
IAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8q
IEIzS2luZC5oICovOyB9OwogCQkwRkRGNjdEMzFEOUM2RDJBMDAxQjk4MjUgLyogQjNLaW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0Qw
MUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuY3BwICovOyB9OwogCQkwRkRGNjdENjFEOURDNDQw
MDAxQjk4MjUgLyogQWlyS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi87
IH07CkBAIC0yNTUxLDYgKzI1NjIsMTMgQEAKIAkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8q
IERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHRG91YmxlRm9ybWF0U3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2
IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5
NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
RkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2No
ZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEQxRTE3M0E2
MjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdvcmxkU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRo
ID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcv
REZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZF
NTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBYm9ydFJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5jcHA7IHBhdGgg
PSBkZmcvREZHRmxvd0luZGV4aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93SW5kZXhpbmcuaDsgcGF0aCA9IGRmZy9ERkdG
bG93SW5kZXhpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzYsNiArMjg5
NCwxMCBAQAogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYw
RTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXJraW5nQ29uc3RyYWludFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2
NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTg1LDggKzMyMDcsOCBAQAogCQkw
RkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERTg3RjgxREZE
MEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2VsbENvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhY2VUaW1lU2NoZWR1bGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkIxREZFNkU1MDAwNjRD
MzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGFjZVRpbWVTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREU4N0ZCMURGRTZF
NTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRo
ID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDEx
RDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0tpbmQuaDsgcGF0aCA9IGIzL0IzS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJLaW5kLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MzUsOCArNTc1Nywx
MyBAQAogCQkJCTE0RDJGM0Q4MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8s
CiAJCQkJMTREMkYzRDkxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggKi8sCiAJCQkJ
MEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovLAorCQkJ
CTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJ
CQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8sCisJ
CQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LywKKwkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
aCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywK
IAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8sCisJCQkJMEYx
RkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBG
QTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2
MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJCQlBRERCMUY2MjE4
RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovLApAQCAtNTc0NSwxNCArNTc3Miwx
NyBAQAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8s
CiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJ
MEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAotCQkJ
CTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3BwICovLAot
CQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuaCAqLywK
KwkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi8sCisJCQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRjdDRjk1MDFEQzAyN0Q3MDA5OENDMTIgLyogU3RvcElm
TmVjZXNzYXJ5VGltZXIuY3BwICovLAogCQkJCTBGN0NGOTUxMURDMDI3RDcwMDk4Q0MxMiAvKiBT
dG9wSWZOZWNlc3NhcnlUaW1lci5oICovLAogCQkJCTE0MkUzMTMyMTM0RkYwQTYwMEFGQURCNSAv
KiBTdHJvbmcuaCAqLywKIAkJCQkxNDU3MjI4NTE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5s
aW5lcy5oICovLAorCQkJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAorCQkJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJ
CQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAq
LywKKwkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8s
CiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJ
CQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLAogCQkJCTFB
Q0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTU3NjcsNiArNTc5Nyw3
IEBACiAJCQkJMTRFODRGOUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwICovLAogCQkJ
CTE0RTg0RjlDMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0LmggKi8sCiAJCQkJMTQxNTAxMzIx
NTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi8sCisJCQkJMEYxRkIzOEQxRTE3
M0E2MjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmggKi8sCiAJCQkJMkE0RUM5MDkxODYwRDZD
MjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCiAJCQkJMkE0RUM5MEExODYw
RDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJCTBGQzgxNTA4MTQw
NDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKQEAgLTY5NzUsNiAr
NzAwNiw3IEBACiAJCQkJMEYyQjlDREYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVu
LmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAog
CQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggKi8sCisJCQkJMEYxRkIz
OTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8sCiAJCQkJREMwMDAzOTAx
OUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkw
RkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmggKi8sCkBAIC03MDYzLDYgKzcwOTUsNyBAQAogCQkJCTBGQzk3RjNDMTgyMDIx
MTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZE
QjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLywKIAkJCQkwRkRCMkNF
NjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLywKKwkJCQkwRjFGQjM5NTFFMUFG
N0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
IGRmZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC03OTIxLDYgKzc5NTQsNyBAQAog
CQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0
ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOTMxRTE3N0E3MjAw
QTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MjMw
RUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzI4REFFODFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29k
ZUdyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTg0NTEsNiArODQ4NSw3IEBACiAJCQkJQTFENzkz
MDExQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExMjU4NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0
QjY5IC8qIEludGxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk3MUUxQUY3RTMw
MEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVC
RTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOEI5RjZENTYxRDU5MTJGQTAwMUM3MzlGIC8qIEl0ZXJhdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtODUzNSw3ICs4NTcwLDkgQEAKIAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYwMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjYwRTNBMUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2MEUzODFFMDUxN0JCMDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlDMUMwMjRBNDkwMDI0
ODFFMiAvKiBKU0dlbmVyYXRvckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZG
MTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NDcsNiArODY4NCw3IEBACiAJ
CQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVy
TWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEgLyogS2V5d29yZExvb2t1cC5o
IGluIEhlYWRlcnMgKi8sCkBAIC04NjgxLDYgKzg3MTksNyBAQAogCQkJCTBGMEI4MzlEMTRCQ0Y0
NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzkx
MzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQTEz
NEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIz
OTExRTE3M0E2RjAwQTlCRTUwIC8qIFdvcmxkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIwOEFENzFERjA5MjVEMDA3RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDM3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMb29rdXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MENEMTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJl
dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg2OTIsNiArODczMSw3IEBACiAJCQkJODYzQjIzRTAw
RkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNz
ZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUw
IC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYzNzFCOTBERTA0
MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5o
IGluIEhlYWRlcnMgKi8sCkBAIC04ODc1LDcgKzg5MTUsNyBAQAogCQkJCUJDMThDNDYzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMx
NkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRl
bS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNl
VGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRD
MzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNp
YWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk3MTUsNiArOTc1NSw3IEBACiAJCQkJQTdF
NUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3Rh
dHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMUZCMzhFMUUxNzNBNjUwMEE5QkU1MCAvKiBT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDc5MTg5QjA1MTAwMDYzMzIzMSAvKiBD
b25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3MzAsNiArOTc3MSw3IEBACiAJ
CQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3
RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlF
RTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGQzg0QjMxRDFEREFEOTAwNkI1QzQ2IC8qIERlYnVnZ2VyTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xMDMxNSw3ICsxMDM1Nyw3IEBACiAJCQkJOTMzMDQwMkMwRTZBNzY0
MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ5M0FG
QTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTQ5REMxNkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNlVGltZVNj
aGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAg
LyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBD
RDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0
ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAzMjUsNiArMTAzNjcsNyBAQAogCQkJCUE3
MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMUZCMzkwMUUx
NzNBNkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlERUQxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ1Byb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyogU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzc2LDYgKzEwNDE5LDcgQEAK
IAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyog
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjBFMzcx
RTA1MTdCOTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjk1MkFBMjFERjc4NjBEMDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9u
S2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3Rz
IG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBl
eHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1l
IHRoYXQKLSAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBH
Qy4KLQotICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
LSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1l
bWJlckNvZGVCbG9ja3MoVk0mIHZtKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBs
b3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBh
biBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNz
dW1lIHRoYXQKLSAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmlu
ZyBHQy4KLQotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKLX0KLQogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA5
OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZQogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKGNvbnN0IEZ1bmMmKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAg
IHZvaWQgY2FuY2VsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5J
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2
b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAg
ICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sg
d2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5l
ZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2Rl
QmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCisKKyAgICB2bS0+aGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIHZt
LT5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksMjggKzM0OSw2IEBAIHZv
aWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJl
YWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZN
JiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOwotICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVn
aW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxh
biA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNp
dG9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0pCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgZm9yIChQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAg
ICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
cGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKLSAgICB9Ci19Ci0KIHZvaWQgV29ya2xpc3Q6
OnN1c3BlbmRBbGxUaHJlYWRzKCkKIHsKICAgICBtX3N1c3BlbnNpb25Mb2NrLmxvY2soKTsKQEAg
LTU2NCwyMiArNTQyLDYgQEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mIHZtKQogICAg
IH0KIH0KIAotdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+bWFy
a0NvZGVCbG9ja3Modm0sIHNsb3RWaXNpdG9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgcmVtZW1iZXJD
b2RlQmxvY2tzKFZNJiB2bSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9m
V29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0
ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3
b3JrbGlzdC0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKLSAgICB9Ci19Ci0KICNlbHNlIC8vIEVO
QUJMRShERkdfSklUKQogCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCkBAIC01OTAs
MTAgKzU1Miw2IEBAIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCiB7CiB9
CiAKLXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKLXsKLX0KLQogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDk5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDgg
KzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNG
b3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAotICAgIHZv
aWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgcmVtZW1iZXJD
b2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRV
bnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVh
ZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAg
LTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2b2lkIG1hcmtDb2RlQmxvY2tz
KFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBj
b25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5n
V29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29u
c3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBm
b3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9w
bGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5n
ZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAgIH0KK30K
KworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikKK3sKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNp
b24gMjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE1ICsxMTQsNiBAQCBib29sIENvZGVCbG9ja1NldDo6
Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xkQ29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1f
Y3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgQ29kZUJs
b2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcoSGVhcCogaGVhcCkKLXsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNv
ZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVu
dGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLX0K
LQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhlY3V0aW5nKCkKIHsKICAgICBt
X2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMCArNjks
NiBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhpcyBzZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVu
IG1hcmtlZC4KICAgICB2b2lkIGRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKENvbGxlY3Rp
b25TY29wZSk7CiAgICAgCi0gICAgLy8gQWRkIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVC
bG9ja3MgdG8gdGhlIHJlbWVtYmVyZWQgc2V0IHRvIGJlIAotICAgIC8vIHJlLXNjYW5uZWQgZHVy
aW5nIHRoZSBuZXh0IGNvbGxlY3Rpb24uCi0gICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcoSGVhcCopOwotCiAgICAgdm9pZCBjbGVhckN1cnJlbnRseUV4ZWN1dGluZygpOwog
CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBMb2NrSG9sZGVyJiwgdm9pZCogY2FuZGlkYXRlQ29k
ZUJsb2NrKTsKQEAgLTgxLDIxICs3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBWaXNpdHMgZWFjaCBD
b2RlQmxvY2sgaW4gdGhlIGhlYXAgdW50aWwgdGhlIHZpc2l0b3IgZnVuY3Rpb24gcmV0dXJucyB0
cnVlCiAgICAgLy8gdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBkb25lIGl0ZXJhdGluZywgb3IgdW50
aWwgZXZlcnkgQ29kZUJsb2NrIGhhcyBiZWVuCiAgICAgLy8gdmlzaXRlZC4KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
LSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGZvciAo
YXV0byYgY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKSB7Ci0gICAgICAgICAgICBib29sIGRv
bmUgPSBmdW5jdG9yKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9j
ayA6IG1fbmV3Q29kZUJsb2NrcykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
aXRlcmF0ZShjb25zdCBGdW5jdG9yJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBpdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGNvbnN0IEZ1bmN0b3ImKTsKICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkocmV2aXNpb24g
MjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw1ICs2MCwzMCBAQCBpbmxpbmUgdm9pZCBDb2RlQmxv
Y2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNvZGVC
bG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1Nl
dDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3Mp
IHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAo
ZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvJiBj
b2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rv
cihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6
aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2spOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDIwOTk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJN
YXJrZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgog
I2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1By
b2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGlt
ZVNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNp
bmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5o
IgorI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1T
KGRvdWJsZSB0aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewot
cHVibGljOgotICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBt
X2hlYXAoaGVhcCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdD
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkgewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1Rp
bWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAg
ICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhp
c1BhdXNlTVMpLCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hl
YXAucmVzdW1lVGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2Nv
cGUoKQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQo
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAg
ZGF0YUxvZygiW0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVh
cDsKLX07Ci0KLW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFw
VHlwZSwgc2l6ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkg
ewpAQCAtMzE2LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBU
eXBlKQogICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxN
YXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBI
ZWxwZXJQb29sKCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46
OmNyZWF0ZSgpKQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAg
aWYgKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0
ZDo6bWFrZV91bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVs
c2UgeworICAgICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5
IG1ha2luZyB0aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91
bGQgYWx3YXlzIGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAg
ICAgIG1fc2NoZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZE11dGF0b3JTY2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJp
ZnlIZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJp
Zmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0
aW9uKCkpOwogICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpCi17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0g
bV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhh
c05leHQoKSkgewpAQCAtNTExLDYgKzQ4MSwyNSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklU
UGxhbnMoKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0
ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKCptX3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQg
SGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGlu
Z0xvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4g
Y29kZUJsb2NrczsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dp
dGhvdXRIb2xkaW5nTG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
KyAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0pOwor
ICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBjb2RlQmxvY2tzKQorICAgICAgICBmdW5j
KGNvZGVCbG9jayk7Cit9CisKIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3Rh
cnRUaW1lKQogewogICAgIFRpbWluZ1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCIpOwpAQCAtNTYwLDEzMiArNTQ5LDY0IEBAIHZvaWQg
SGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRT
dGFydE1hcmtpbmcoKTsKIAotICAgIFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMp
OworICAgIG1fY29uc3RyYWludFNldC0+cmVzZXRTdGF0cygpOworICAgIG1fc2NoZWR1bGVyLT5i
ZWdpbkNvbGxlY3Rpb24oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVCb290
c3RyYXAoc2xvdFZpc2l0b3IsIG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgCisg
ICAgLy8gQWZ0ZXIgdGhpcywgd2Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhbGwgdGhyb3VnaCBh
bGwgb2YgdGhlICJzbG90VmlzaXRvci5pc0VtcHR5KCkiCisgICAgLy8gY2hlY2tzIGJlY2F1c2Ug
Ym9vdHN0cmFwIHdvdWxkIGhhdmUgcHV0IHRoaW5ncyBpbnRvIHRoZSB2aXNpdG9yLiBTbywgd2Ug
c2hvdWxkIGZhbGwKKyAgICAvLyB0aHJvdWdoIHRvIGRyYWluaW5nLgogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaXRlcmF0aW9uID0gMTsgOyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIp
OwotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWlu
Z1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsK
LSAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsK
LSAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsK
LSAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
LSAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAg
ICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAg
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAg
ICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29uc3Ry
YWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBtX3NjaGVkdWxlci0+dGlt
ZVRvUmVzdW1lKCkpOworICAgICAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8v
IE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4
cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKLSAgICAgICAgLy8gYWxsIG9mIHRoZW0uCi0j
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dCgqbV92bSwgc2xvdFZpc2l0b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkp
Ci0gICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNs
b3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3By
b3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHBhaXIua2V5KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBt
X21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6
bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwot
ICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9u
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxl
cyhzbG90VmlzaXRvcik7Ci0gICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3Ip
OwotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQ
cm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewot
ICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygp
KTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tU
cmFjZXMoKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9y
KTsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwg
c2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9y
LmRyYWluSW5QYXJhbGxlbChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOwogICAgICAgICB9
Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAKLSAgICAgICAg
aWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVy
TG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMoc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwotCi0gICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFr
U2V0cyhzbG90VmlzaXRvcik7Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwotICAg
ICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBERkc6
Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIGJvb2wgc2hvdWxk
VGVybWluYXRlID0gc2xvdFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+
aXNFbXB0eSgpOworICAgICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxS
ZXN1bWUoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nKHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwg
IisiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJr
U3RhY2soKS5zaXplKCksICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQs
ICIga2IsIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVu
dERlY2lzaW9uKCkudGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAg
ICBkb3VibGUgdGhpc1BhdXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9z
dG9wVGltZSkubWlsbGlzZWNvbmRzKCk7CisgICAgICAgICAgICBkYXRhTG9nKCJwPSIsIHRoaXNQ
YXVzZU1TLCAiIG1zIChtYXggIiwgbWF4UGF1c2VNUyh0aGlzUGF1c2VNUyksICIpLi4uXVxuIik7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBj
b25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQg
YXJlCi0gICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJl
IHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0gICAgICAgIC8v
IHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBB
bHNvLCB0aGlzIGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCi0gICAgICAgIC8vIGZpeHBvaW50IGNo
ZWNrIC0gb3RoZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBh
bHNvIHdhbnQgdG8gZG8gdGhpcwotICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQg
YW55dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUg
bmV4dAotICAgICAgICAvLyBHQy4KLSAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJD
dXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tz
KCptX3ZtKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsg
c3RhY2tzIGFyZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRo
cmVhZCkKLSAgICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVm
ZmVyLgotICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3Iu
bXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2Vh
ayBIYW5kbGVzOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICByZXN1bWVUaGVXb3JsZCgpOwog
ICAgICAgICAKKyAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVz
dWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3Bl
KCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2luZyIpOwogICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvbGxlY3RvclRpbWVzbGljaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBzY2hlZHVsZXIuc25hcFBoYXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0Owot
ICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkZWNpc2lvbiA9
IHNjaGVkdWxlci5jdXJyZW50RGVjaXNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRl
Y2lzaW9uLnNob3VsZEJlUmVzdW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVX
b3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3Vs
dCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShkZWNpc2lvbi50aW1lVG9T
dG9wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0
aGUgc2NoZWR1bGVyIGRvZXMgbm90IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyBzY2hl
ZHVsZWRJZGxlID0gZGVjaXNpb24udGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFy
IHdoYXQgdGhlIHZhbHVlIG9mIGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBi
ZSBncmVhdGVyIHRoYW4gMC4gWW91IGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXJndWUgZm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQg
dHVuZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVk
SWRsZSAqIE9wdGlvbnM6OmNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNlY29uZHMgd2FrZVVwTGF0ZW5jeSA9IE1vbm90b25pY1RpbWU6Om5vdygp
IC0gZGVjaXNpb24udGltZVRvU3RvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh3YWtlVXBMYXRlbmN5ID49IDFfbXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coInd1bCE9Iiwgd2FrZVVwTGF0ZW5jeS5taWxsaXNlY29uZHMoKSwgIiBtcyAiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5Q
YXJhbGxlbChkZWNpc2lvbi50aW1lVG9SZXN1bWUoKSk7Ci0gICAgICAgICAgICAgICAgfSB3aGls
ZSAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxl
Y3RvciB0aW1lc2xpY2luZyBpcyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKLSAgICAg
ICAgICAgICAgICAvLyAtLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUg
b3Bwb3J0dW5pdHkgZm9yIGhhcm1mdWwgcmFjZXMuCi0gICAgICAgICAgICAgICAgUmVzdW1lVGhl
V29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBz
bG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KG1fc2No
ZWR1bGVyLT50aW1lVG9TdG9wKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYWluUmVz
dWx0ID09IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1bGVy
IGRvZXMgbm90IHdhbnQKKyAgICAgICAgICAgIC8vIHRoYXQuCisgICAgICAgICAgICBTZWNvbmRz
IHNjaGVkdWxlZElkbGUgPSBtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgICAgICAgICAvLyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0IHRoZSB2
YWx1ZSBvZiBjb2xsZWN0UGVybWl0dGVkSWRsZVJhdGlvCisgICAgICAgICAgICAvLyBzaG91bGQg
YmUsIG90aGVyIHRoYW4gaXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZl
bgorICAgICAgICAgICAgLy8gYXJndWUgZm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBz
aG91bGQgdHVuZSBpdC4KKyAgICAgICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUgKiBPcHRpb25z
Ojpjb2xsZWN0b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICAgICAgCisg
ICAgICAgIG1fc2NoZWR1bGVyLT5kaWRTdG9wKCk7CiAgICAgfQogCiAgICAgewpAQCAtNjk0LDYg
KzYxNSwxMiBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAg
ICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICBt
X2hlbHBlckNsaWVudC5maW5pc2goKTsKKworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzKAorICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgICAgIAog
ICAgIHVwZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgZW5kTWFya2luZygpOwog
fQpAQCAtNzMyLDI1ICs2NTksNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgbV9i
YXJyaWVyc0V4ZWN1dGVkID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJv
b3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5hcHBlbmQocm9vdHMpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldv
cmtsaXN0V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAo
dW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZH
OjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29t
cGlsZXJXb3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTM1NCw2
ICsxMjYyLDcgQEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICAKICAgICBo
YW5kbGVHQ0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgIG1fbXV0YXRv
ckRpZFJ1biA9IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNp
Z25lZCBvbGRTdGF0ZSkKQEAgLTEzNjYsNyArMTI3NSw3IEBAIGJvb2wgSGVhcDo6c3RvcElmTmVj
ZXNzYXJ5U2xvdyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0
YXRlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCEob2xkU3RhdGUgJiBz
aG91bGRTdG9wQml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYg
IW1fc2NoZWRlZHVsZXItPnNob3VsZFN0b3AoKSkgewogICAgICAgICBpZiAoIShvbGRTdGF0ZSAm
IHN0b3BwZWRCaXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX3dvcmxk
U3RhdGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5zdG9wcGVk
Qml0KTsKQEAgLTE0MzksNiArMTM0OCw3IEBAIHZvaWQgSGVhcDo6YWNxdWlyZUFjY2Vzc1Nsb3co
KQogICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUs
IG5ld1N0YXRlKSkgewogICAgICAgICAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICAgICAgICAg
IGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgICAgICAgICAgbV9tdXRhdG9yRGlkUnVuID0gdHJ1
ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIwODMsOCArMTk5
MywxMCBAQCBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NECiAgICAgaWYg
KGRlZmVycmFsQ29udGV4dCkgewogICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0Mg
fD0KICAgICAgICAgICAgICEhKG1fd29ybGRTdGF0ZS5sb2FkKCkgJiAoc2hvdWxkU3RvcEJpdCB8
IG5lZWRGaW5hbGl6ZUJpdCB8IGdjRGlkSklUQml0KSk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNl
IHsKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5KCk7CisgICAgICAgIHN0b3BJZlJlcXVlc3RlZEJ5
U2NoZWR1bGVyKCk7CisgICAgfQogICAgIAogICAgIGlmICghc2hvdWxkQ29sbGVjdEhldXJpc3Rp
YygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTU4LDggKzIwNzAsMTQxIEBAIHZvaWQg
SGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0KICNlbmRpZiAvLyBVU0UoQ0Yp
CiAKK3ZvaWQgSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkKK3sKKyAgICBtX2NvbnN0cmFpbnRT
ZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpOworICAgIAorICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiQ29uc2VydmF0aXZlIFNjYW4iLAorICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRvclRpbWVv
dXQmKSB7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3Bl
KCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIG1f
b2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKKyAgICAgICAgICAgIENv
bnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKKyAgICAgICAgICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAgICAgICAgIGdh
dGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVySlNT
dGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hC
dWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5h
cHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29u
c3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAorICAgICAgICAiTWlzYyBTbWFsbCBSb290cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdG9yVGltZW91dCYpIHsKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAorICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92
bSwgc2xvdFZpc2l0b3IpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0
cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAg
ICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3Rl
ZFZhbHVlcykKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChw
YWlyLmtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYm
IG1fbWFya0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0t
Pmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisg
ICAgICAgICJTdHJvbmcgSGFuZGxlcyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdG9yVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1faGFuZGxl
U2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2hhbmRs
ZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKKyAgICAgICAgIkRlYnVnZ2VyIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0JikgeworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1By
b2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAg
ICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Cisg
ICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIs
IHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmls
ZXIoKSkKKyAgICAgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2Vu
KCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCisgICAgICAgICJKSVQgU3R1YiBSb3V0aW5lcyIsCisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdG9yVGltZW91dCYpIHsKKyAgICAg
ICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90Vmlz
aXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4
ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJXZWFr
IFNldHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRvclRpbWVvdXQmKSB7CisgICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9y
IDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgICAgICBwYXJhbGxlbFZpc2l0
b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICB9
LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3Rl
cnMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlz
aXRvclRpbWVvdXQmKSB7CisgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIq
IGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHQoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdl
YWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJERkcgV29ya2xpc3RzIiwKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0
JikgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0
cygpOyBpLS07KQorICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5Lgor
ICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAg
ICptX3ZtLAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAg
ICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworI2VuZGlmCisgICAgCisg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDb2RlQmxvY2tzIiwKKyAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0Jikg
eworICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbik7CisgICAgCisgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCisgICAgICAgICJNdXRhdG9yIE1hcmsgU3RhY2siLAorICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRvclRpbWVvdXQmKSB7Cisg
ICAgICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5UmVzdW1wdGlvbik7Cit9CisKIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xs
ZWN0KCkKIHsKKyAgICBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKICAgICBtX2lzU2FmZVRv
Q29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3Vz
bHkoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA5OTUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw4ICs3MywxMCBAQCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgTXV0YXRvclNjaGVkdWxlcjsKIGNs
YXNzIFNsb3RWaXNpdG9yOwotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworY2xhc3MgU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3Mg
Vk07CiAKQEAgLTM0MSw2ICszNDMsOSBAQCBwdWJsaWM6CiAgICAgLy8gYWxyZWFkeSBiZSBjYWxs
ZWQgZm9yIHlvdSBhdCB0aGUgcmlnaHQgdGltZXMuCiAgICAgdm9pZCBzdG9wSWZOZWNlc3Nhcnko
KTsKICAgICAKKyAgICAvLyBGSVhNRQorICAgIHZvaWQgc3RvcElmUmVxdWlyZWRCeVNjaGVkdWxl
cigpOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBtdWNoIHN0cm9uZ2VyIGtpbmQgb2Ygc3RvcHBp
bmcgb2YgdGhlIGNvbGxlY3RvciwgYW5kIGl0IG1heSByZXF1aXJlIHdhaXRpbmcgZm9yIGEKICAg
ICAvLyB3aGlsZS4gVGhpcyBpcyBtZWFudCB0byBiZSBhIGxlZ2FjeSBBUEkgZm9yIGNsaWVudHMg
b2YgY29sbGVjdEFsbEdhcmJhZ2UgdGhhdCBleHBlY3QgdGhhdCB0aGVyZQogICAgIC8vIGlzIG5v
IEdDIGJlZm9yZSBvciBhZnRlciB0aGF0IGZ1bmN0aW9uIGNhbGwuIEFmdGVyIGNhbGxpbmcgdGhp
cywgeW91IGFyZSBmcmVlIHRvIHN0YXJ0IEdDcwpAQCAtMzc2LDcgKzM4MSw3IEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgTWFy
a2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwotICAgIGZyaWVuZCBjbGFz
cyBTcGFjZVRpbWVTY2hlZHVsZXI7CisgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI7CiAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICBmcmll
bmQgY2xhc3MgSGVhcFN0YXRpc3RpY3M7CiAgICAgZnJpZW5kIGNsYXNzIFZNOwpAQCAtNDEzLDkg
KzQxOCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29ybGQoKTsKICAgICB2b2lkIHJl
c3VtZVRoZVdvcmxkKCk7CiAgICAgCi0gICAgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKLSAg
ICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKLSAgICAKICAgICB2b2lkIHN0b3BU
aGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9yKCk7CiAgICAgCkBAIC00NTUs
NyArNDU3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2
YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0Q29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGls
ZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NT
dGFydFRpbWUpOwpAQCAtNDk4LDYgKzQ5OSwxNCBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3codm9pZCopOwogICAgIAogICAg
IHZvaWQgc2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpOworICAgIAorICAgIHZv
aWQgYnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
YyY+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25z
dCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYyY+CisgICAgdm9pZCBp
dGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3Mo
Y29uc3QgRnVuYyYpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25z
dCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNTM0LDYgKzU0Myw4IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwor
ICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJh
aW50U2V0OwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFs
bGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVu
dW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29t
ZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTYxNSw2ICs2MjYsOCBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRpZgogICAgIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNdXRhdG9yU2NoZWR1bGVyPiBtX3NjaGVkdWxlcjsKKyAgICAK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvdWxkU3RvcEJpdCA9IDF1IDw8IDB1OwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGhhc0FjY2Vzc0JpdCA9IDF1IDw8IDJ1OwpAQCAtNjMwLDYgKzY0Myw3
IEBAIHByaXZhdGU6CiAgICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CiAgICAg
Ym9vbCBtX3RocmVhZFNob3VsZFN0b3AgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90aHJlYWRJc1N0
b3BwaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0YXRvckRpZFJ1biB7IHRydWUgfTsKICAg
ICBCb3g8TG9jaz4gbV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25k
aXRpb24+IG1fdGhyZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9u
IHRoaXMuIEl0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1Ro
cmVhZD4gbV90aHJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlz
aXRpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+IGZ1bmN0aW9uLAorICAg
IFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICA6IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAg
ICwgbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xh
dGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25zdHJhaW50KCkK
K3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7CisgICAgbV9s
YXN0VmlzaXRDb3VudCA9IDA7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCit7CisgICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNp
dG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7CisgICAgbV9mdW5jdGlvbih2aXNpdG9y
LCB2aXNpdGluZ1RpbWVvdXQpOworICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1l
b3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIE1hcmtpbmdDb25z
dHJhaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBWb2xhdGlsaXR5
IHsKKyAgICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55
dGltZSB0aGUgbXV0YXRvciByZXN1bWVzIGFmdGVyIHRoZSBHQyBoYWQKKyAgICAgICAgLy8gc3Rh
cnRlZC4KKyAgICAgICAgR3JleWVkQnlSZXN1bXB0aW9uLAorICAgICAgICAKKyAgICAgICAgLy8g
VGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55dGltZSB0aGUgbXV0YXRv
ciBydW5zOiBzbyBhdCBHQyBzdGFydCBhbmQKKyAgICAgICAgLy8gd2hlbmV2ZXIgdGhlIEdDIHJl
c3VzcGVuZHMgYWZ0ZXIgYSByZXN1bXB0aW9uLiBUaGlzIGlzIGFsbW9zdCBhbHdheXMgc29tZXRo
aW5nIHRoYXQKKyAgICAgICAgLy8geW91J2QgY2FsbCBhICJyb290IiBpbiBhIHRyYWRpdGlvbmFs
IEdDLgorICAgICAgICBHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueSB0aW1lIGFueSBvYmplY3Qg
aXMgbWFya2VkIGFuZCBhbnl0aW1lIHRoZQorICAgICAgICAvLyBtdXRhdG9yIHJlc3VtZXMuCisg
ICAgICAgIEdyZXllZEJ5TWFya2luZworICAgIH07CisgICAgCisgICAgTWFya2luZ0NvbnN0cmFp
bnQoCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0KT4sCisgICAgICAgIFZvbGF0
aWxpdHkpOworICAgIAorICAgIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIAorICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9p
ZCByZXNldFN0YXRzKCk7CisgICAgCisgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShTbG90
VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
OworICAgIAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9s
YXRpbGl0eTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KKyAgICAKKyAgICB1bnNpZ25lZCBt
X2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2Z1
bmN0aW9uOworICAgIFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIHNpemVfdCBtX2xhc3RW
aXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0Lmgi
CisKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7
CitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoTWFya2luZ0NvbnN0cmFpbnRTZXQm
IHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKKyAgICAg
ICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgICwg
bV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRpZFZpc2l0
U29tZXRoaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRo
aW5nOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVv
dXQpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4K
KyAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAgICAgICAgZXhlY3V0ZShpbmRl
eCk7CisgICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKKyAgICAgICAgICAgIGlm
IChzaG91bGRUaW1lT3V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGRpZEV4ZWN1
dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0K
KworICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBtX3NldC5t
X3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3Rp
bWVvdXQpOworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgU2xvdFZpc2l0b3Im
IG1fdmlzaXRvcjsKKyAgICBNb25vdG9uaWNUaW9tZSBtX3RpbWVvdXQ7CisgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKK307
CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisK
K01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQoreworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3VuZXhlY3V0
ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuY2xlYXJBbGwo
KTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25zdHJh
aW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIHN3aXRjaCAoY29uc3RyYWludC0+dm9sYXRpbGl0
eSgpKSB7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9u
OgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkUm9vdHMuc2V0KGNvbnN0cmFpbnQtPmluZGV4KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6Okdy
ZXllZEJ5TWFya2luZzoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuc2V0KGNv
bnN0cmFpbnQtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbjoKKyAgICAgICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0byBleGVjdXRlIHRoaXMgb25jZSB3ZSd2ZSBleGhhdXN0ZWQgZXZlcnl0aGluZyBl
bHNlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAgICBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+IGZ1bmN0aW9uLAorICAg
IE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAgYWRkKHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUobmFtZSksIFdURk1vdmUo
ZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZCgKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQp
Cit7CisgICAgY29uc3RyYWludC0+bV9pbmRleCA9IG1fc2V0LnNpemUoKTsKKyAgICBtX3NldC5h
cHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVCb290c3RyYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUg
dGltZW91dCkKK3sKKyAgICAvLyBCb290c3RyYXAgbWVhbnMgdGhhdCB3ZSBoYXZlbid0IGRvbmUg
YW55IG9iamVjdCB2aXNpdGluZyB5ZXQuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvCisgICAg
Ly8gb25seSBleGVjdXRlIHJvb3QgY29uc3RyYWludHMgKHdoaWNoIGFsc28gaGFwcGVucyB0byBi
ZSB0aG9zZSB0aGF0IHdlIHNheSBhcmUgZ3JleWVkIGJ5CisgICAgLy8gcmVzdW1wdGlvbiksIHNp
bmNlIHRoZSBvdGhlciBjb25zdHJhaW50cyBhcmUgc3VwZXIgdW5saWtlbHkgdG8gdHJpZ2dlciB3
aXRob3V0IHNvbWUgb2JqZWN0CisgICAgLy8gdmlzaXRpbmcuIFRoZSBleHBlY3RhdGlvbiBpcyB0
aGF0IHRoZSBjYWxsZXIgd2lsbCBnbyBzdHJhaWdodCB0byBvYmplY3QgdmlzaXRpbmcgYWZ0ZXIK
KyAgICAvLyB0aGlzLgorICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhp
cywgdmlzaXRvciwgdGltZW91dCk7CisgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4o
bV91bmV4ZWN1dGVkUm9vdHMpOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKK3sKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0
b3IsIHRpbWVvdXQpOworICAgIAorICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMg
dGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4K
KyAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCisgICAgaWYgKCFleGVjdXRpb25D
b250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN0ZDo6c29ydCgKKyAgICAgICAgbV9z
ZXQuYmVnaW4oKSwgbV9zZXQuZW5kKCksCisgICAgICAgIFsmXSAoYXV0byYgYSwgYXV0byYgYikg
LT4gYm9vbCB7CisgICAgICAgICAgICAvLyBSZW1lbWJlcjogcmV0dXJuIHRydWUgaWYgYSBzaG91
bGQgY29tZSBiZWZvcmUgYi4KKyAgICAgICAgICAgIGlmIChhLT52b2xhdGlsaXR5KCkgPiBiLT52
b2xhdGlsaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gYS0+bGFzdFZpc2l0Q291bnQoKSA+IGItPmxhc3RWaXNpdENvdW50KCk7CisgICAgICAg
IH0pOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zZXQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7CisgICAg
ICAgIAorICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUg
bW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCisgICAgICAgIC8v
IHdlIGZpbmQgd29yay4KKyAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21l
dGhpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNl
OworICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQorICAgICAgICBjb25zdHJhaW50
LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0IHsKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNl
dCgpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHZvaWQgcmVzZXRT
dGF0cygpOworICAgIAorICAgIHZvaWQgYWRkKAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAg
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk+
LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9p
ZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CisgICAgCisgICAgLy8g
RXhlY3V0ZXMgb25seSByb290cy4gUmV0dXJucyB0cnVlIGlmIGFsbCByb290cyBoYXZlIGJlZW4g
ZXhlY3V0ZWQuIEl0J3MgZXhwZWN0ZWQKKyAgICAvLyB0aGF0IHlvdSdsbCBkbyBzb21lIGRyYWlu
aW5nIGFmdGVyIHRoaXMgYW5kIHRoZW4gdXNlIGV4ZWN1dGVDb252ZXJnZW5jZSgpLgorICAgIGJv
b2wgZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgY29uc3RyYWludHMgd2VyZSBleGVjdXRlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91J3Zl
IGFscmFlZHkKKyAgICAvLyB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCisgICAgICAgIFNsb3RWaXNpdG9yJiwKKyAgICAg
ICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgCisgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5h
bmlnYW5zLgorICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0
ZToKKyAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRp
b25Db250ZXh0OworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBC
aXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nKTsKKyAgICAKKyAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CisgICAg
Qml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVs
ZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0
b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK011
dGF0b3JTY2hlZHVsZXI6Ok11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1
bGVyOjp+TXV0YXRvclNjaGVkdWxlcigpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6
ZGlkU3RvcCgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6ZGlkUmVzdW1lKCkKK3sK
K30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRTdG9wKCkKK3sKKyAgICByZXR1cm4g
aGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQorCitib29sIE11dGF0b3JTY2hlZHVsZXI6OnNo
b3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvUmVzdW1lKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24g
MjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTEgQEAgcHVibGljOgogICAgICAgICBtX2NvbnRh
aW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBhZGQodm9pZCog
cm9vdCkKKyAgICBib29sIGFkZCh2b2lkKiByb290KQogICAgIHsKICAgICAgICAgaWYgKHJvb3Qg
PT0gbV9sYXN0UXVlcmllZFJvb3QpCiAgICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRS
b290ID0gdHJ1ZTsKLSAgICAgICAgbV9yb290cy5hZGQocm9vdCk7CisgICAgICAgIHJldHVybiBt
X3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwogICAgIH0KIAogICAgIGludCBzaXplKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJl
dmlzaW9uIDIwOTk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDYgKzM0NywxMSBAQCBwcml2YXRlOgogICAgIFNs
b3RWaXNpdG9yJiBtX3Zpc2l0b3I7CiB9OwogCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX2lzVmlz
aXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0Nl
bGwqIGNlbGwpCiB7CkBAIC00NjEsNyArNDY2LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
TW9ub3RvbmljVGltZSB0aQogICAgIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9yaWdo
dFRvUnVuKTsKICAgICAKLSAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8
fCAhbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgewor
ICAgIHdoaWxlICghaGFzRWxhcHNlZCh0aW1lb3V0KSkgewogICAgICAgICB1cGRhdGVNdXRhdG9y
SXNTdG9wcGVkKGxvY2tlcik7CiAgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CkBAIC00NzYsNyAr
NDgxLDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogICAgICAg
ICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVu
UmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24t
LTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVM
YXN0KCkpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJh
bGxlbCgpOwogICAgIH0KQEAgLTYwNSwxMyArNjExLDEzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFk
ZE9wYXF1ZVJvb3Qodm9pZCogcm8KICAgICAKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01h
cmtlcnMoKSA9PSAxKSB7CiAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQg
SGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgICAg
ICBtX3Zpc2l0Q291bnQgKz0gbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50
cnk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNl
dCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgogICAgIC8vIGEg
d2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFy
Z2UuCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9v
dHMuYWRkKHJvb3QpOworICAgIG1fdmlzaXRDb3VudCArPSBtX29wYXF1ZVJvb3RzLmFkZChyb290
KTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3Qp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRS
YWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgdm9pZCBkaWROb3RSYWNlKGNvbnN0IFZpc2l0
UmFjZUtleSYpOwogICAgIHZvaWQgZGlkTm90UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIq
IHJlYXNvbikgeyBkaWROb3RSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorICAg
IAorICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmNwcAkocmV2aXNpb24gMjA5OTUzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
cGFjZVRpbWVTY2hlZHVsZXIuY3BwOjIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKwor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2RvdWJsZSBTcGFj
ZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25z
dAoreworICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9CisgICAgICAgIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIAorICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Cisg
ICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBt
X3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAg
IAorICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzID0KKyAgICAgICAgYnl0ZXNTaW5jZUJlZ2lu
bmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKKyAgICAKKyAgICAvLyBoZWFkcm9vbUZ1bGxuZXNz
IGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgorICAgIC8vIGJ5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4g
ZGVidWcgdGVzdHMuIFRoaXMgY29kZQorICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRp
bmcgcG9pbnQgZHJhZ29ucy4KKyAgICAKKyAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDAp
KQorICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKKyAgICBpZiAoIShoZWFkcm9vbUZ1bGxu
ZXNzIDw9IDEpKQorICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMTsKKyAgICAKKyAgICBkb3Vi
bGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7CisgICAgCisgICAg
Ly8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRv
dy4KKyAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQorICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0
YXRvclV0aWxpemF0aW9uKCkgKworICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCisgICAg
ICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQorICAgICAgICAg
ICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICAKKyAgICByZXR1
cm4gbXV0YXRvclV0aWxpemF0aW9uOworfQorCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpE
ZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Cit9CisKK1NlY29uZHMgU3BhY2VUaW1l
U2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1f
cGVyaW9kOworfQorCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2Uo
KSBjb25zdAoreworICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5t
X3BlcmlvZDsKK30KKworYm9vbCBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRC
ZVJlc3VtZWQoKSBjb25zdAoreworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1
bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gcGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6
YXRpb24oKTsKKyAgICByZXR1cm4gcGhhc2UoKSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9u
KCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGlt
ZVRvUmVzdW1lKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKKyAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0
dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cisg
ICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJp
b2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworfQorCitNb25vdG9uaWNUaW1lIFNw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0b3AoKSBjb25zdAoreworICAgIEFT
U0VSVChzaG91bGRCZVJlc3VtZWQoKSk7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3Vs
ZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgp
ICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Cisg
ICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJp
b2Q7Cit9CisKK1NwYWNlVGltZVNjaGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhl
YXApCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCisgICAgLCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAorICAgICAg
ICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoKKyAgICAgICAgc3RkOjptYXg8
ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9t
YXhFZGVuU2l6ZSkpCit7CisgICAgc25hcFBoYXNlKCk7Cit9CisKK3ZvaWQgU3BhY2VUaW1lU2No
ZWR1bGVyOjpzbmFwUGhhc2UoKQoreworICAgIG1faW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKK30KKworU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hl
ZHVsZXI6OmN1cnJlbnREZWNpc2lvbigpCit7CisgICAgRGVjaXNpb24gcmVzdWx0OworICAgIHJl
c3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7CisgICAgcmVzdWx0Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICByZXN1bHQubV9u
b3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIwOTk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMDUgKzI0LDE0NSBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5j
ZUJlZ2lubmluZ09mQ3ljbGUgPQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0g
bV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAg
ICAKLSAgICBkb3VibGUgbWF4SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxs
bmVzcyA9Ci0gICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207
Ci0gICAgCi0gICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRl
cmVzdGluZyB0aGluZ3MgaWYKLSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAg
ICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0g
ICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVz
cyA9IDA7Ci0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJv
b21GdWxsbmVzcyA9IDE7Ci0gICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEg
LSBoZWFkcm9vbUZ1bGxuZXNzOwotICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxp
emF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9u
ID0KLSAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAg
ICAgbXV0YXRvclV0aWxpemF0aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11
dGF0b3JVdGlsaXphdGlvbigpIC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9y
VXRpbGl6YXRpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0K
LQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0
aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXph
dGlvbigpOwotfQotCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBz
ZWRJblBlcmlvZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5t
X2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNl
VGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxh
cHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VU
aW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBp
ZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJu
IHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNl
KCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQorLy8gRklYTUU6IE1heWJlIHRo
aXMgc2hvdWxkIGJlIHBhcnQgb2YgYSBoaWVyYXJjaHkgb2Ygc2NoZWR1bGVycz8gSW4gc3VjaCBh
IHdvcmxkLCB3ZSB3b3VsZAorLy8gcHJvYmFibHkgcmVwcmVzZW50IGNvbmN1cnJlbnQtR0Mtb2Zm
IGFzIGEgc2NoZWR1bGVyLiBJdCB3b3VsZCB0aGVuIGFsc28gYmUgYSBnb29kIGlkZWEgdG8ga2Vl
cAorLy8gdGhlIG9sZCBzY2hlZHVsZXIgYXJvdW5kLiBJIHdvbmRlciBpZiB3ZSBjb3VsZCBhbHNv
IHNpbXVsYXRlIHRoZSBvbGQgc2NoZWR1bGVyJ3MgdHJlYXRtZW50IG9mCisvLyBmaXhwb2ludCBp
dGVyYXRpb25zIGFuZCBpZGxlIHRpbWUuIFRoYXQgc291bmRzIGFubm95aW5nIGFuZCBoYXJkLCBz
byBtYXliZSB3ZSBkb24ndCB3YW50IHRvIGdvCisvLyB0aGVyZS4KIAotTW9ub3RvbmljVGltZSBT
cGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAorU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJiBoZWFw
KQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX211dGF0b3JUaW1lc2xpY2UoU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSkpCiB7Ci0gICAg
QVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNo
b3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlv
ZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJ
blBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6
YXRpb24oKTsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
Ojp0aW1lVG9TdG9wKCkgY29uc3QKK1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6On5TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwot
ICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICBy
ZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAq
IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJ
blBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwogfQogCi1TcGFjZVRpbWVTY2hlZHVs
ZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0g
ICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJl
bnRHQ1BlcmlvZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4
SGVhZHJvb20oKSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQ
aGFzZSgpOwotfQotCi12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAg
ICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CitNdXRhdG9yU2NoZWR1bGVy
OjpTdGF0ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVn
aW5Db2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IE5vcm1hbCk7
CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBS
ZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6Ondp
bGxSZXN1bWUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBt
X3N0YXRlID09IFJlc3VtZWQpOworICAgIG1fc3RhdGUgPSBSZXN1bWVkOworICAgIG1fc3RhcnRU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcjo6dGltZVRvU3RvcCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBOb3JtYWw6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjppbmZpbml0
eSgpOworICAgIGNhc2UgU3RvcHBlZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIGNhc2UgUmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgbV9t
dXRhdG9yVGltZXNsaWNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUg
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vcm1hbDoKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAg
IHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFN0b3BwZWQ6IHsKKyAgICAg
ICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KKyAgICAgICAgICAgIG1faGVh
cC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nOworICAgICAgICAKKyAgICAgICAgZG91YmxlIG1heEhlYWRyb29tID0KKyAg
ICAgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBo
ZWFkcm9vbUZ1bGxuZXNzID0KKyAgICAgICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xl
IC8gbWF4SGVhZHJvb207CisgICAgICAgIAorICAgICAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNh
biBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgorICAgICAgICAvLyBieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGlu
IGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKKyAgICAgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBm
bG9hdGluZyBwb2ludCBkcmFnb25zLgorICAgICAgICAKKyAgICAgICAgaWYgKCEoaGVhZHJvb21G
dWxsbmVzcyA+PSAwKSkKKyAgICAgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOworICAgICAg
ICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQorICAgICAgICAgICAgaGVhZHJvb21GdWxs
bmVzcyA9IDE7CisgICAgICAgIAorICAgICAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0g
MSAtIGhlYWRyb29tRnVsbG5lc3M7CisgICAgICAgIAorICAgICAgICAvLyBTY2FsZSB0aGUgbXV0
YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgICAgICBtdXRh
dG9yVXRpbGl6YXRpb24gPQorICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGls
aXphdGlvbigpICsKKyAgICAgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAg
ICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQorICAgICAgICAg
ICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIHByZXNlcnZlcyB0d28gdGhpbmdzOgorICAgICAgICAvLyAtIE11dGF0
b3IgZ2V0cyB0byBhbHdheXMgcnVuIGZvciBtX211dGF0b3JUaW1lc2xpY2UuCisgICAgICAgIC8v
IC0gVGhlIHJhdGlvIGJldHdlZW4gbXV0YXRvciByZXN1bWUgdGltZSBhbmQgbXV0YXRvciBzdG9w
IHRpbWUgaXMgZ292ZXJuZWQgYXMgZm9sbG93cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYg
d2UgcmVzdW1lIGZvciB0aGlzIGFtb3VudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEMg
KiBtdXRhdG9yVXRpbGl6YXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIHNvbWUgY29u
c3RhbnQgQywgdGhlbiB3ZSBtdXN0IHN0b3AgZm9yIHRoaXMgYW1vdW50OgorICAgICAgICAvLwor
ICAgICAgICAvLyAgICAgQyAqICgxIC0gbXV0YXRvclV0aWxpemF0aW9uKQorICAgICAgICAvLwor
ICAgICAgICAvLyBJbiBvdGhlciB3b3Jkcywgd2Ugd2FudCB0aGUgcmF0aW8gb2YgcmVzdW1lIHRp
bWUgdG8gc3RvcCB0aW1lIHRvIGJlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbXV0YXRv
clV0aWxpemF0aW9uIC8gKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24pCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSByZXN1bWVkIGZvciBYIHRoZW4gd2Ugd291bGQgZGl2
aWRlIFggYnkgdGhpcyB0byBnZXQgdGhlIGFtb3VudCBvZgorICAgICAgICAvLyB0aW1lIHdlIHNo
b3VsZCBzdG9wIGZvci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQg
aWYgd2UgcmVzdW1lIGZvciBtX211dGF0b3JUaW1lc2xpY2UgKGFzIHRoaXMgc2NoZWR1bGVyIGFs
d2F5cyBkb2VzKQorICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCBzdG9wIGZvcjoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAgIG1fbXV0YXRvclRpbWVzbGljZSAvIChtdXRhdG9yVXRpbGl6YXRp
b24gLyAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikpCisgICAgICAgIC8vCisgICAgICAgIC8vIFdo
aWNoIHNpbXBsaWZpZXMgdG86CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBtX211dGF0b3JU
aW1lc2xpY2UgKiAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikgLyBtdXRhdG9yVXRpbGl6YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHRoZW4gaWYgd2UgZGlzdHJpYnV0ZSB3ZSBnZXQ6
CisgICAgICAgIFNlY29uZHMgc3RvcER1cmF0aW9uID0gbV9tdXRhdG9yVGltZXNsaWNlIC8gbXV0
YXRvclV0aWxpemF0aW9uIC0gbV9tdXRhdG9yVGltZXNsaWNlOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIG1fc3RhcnRUaW1lICsgc3RvcER1cmF0aW9uOworICAgIH0gfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsK
IH0KIAotU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1
cnJlbnREZWNpc2lvbigpCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmVuZENvbGxl
Y3Rpb24oKQogewotICAgIERlY2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIg
PSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworICAg
IG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuaAkocmV2aXNpb24gMjA5OTUzKQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaDoyMDk5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEhlYXA7CisKK2NsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgY2xhc3Mg
RGVjaXNpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KKyAgICAgICAgCisgICAgICAgIGRvdWJs
ZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgZG91YmxlIHRhcmdl
dENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNlY29uZHMgZWxhcHNlZElu
UGVyaW9kKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OworICAgICAgICBi
b29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVU
b1Jlc3VtZSgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBjb25z
dDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGlt
ZVNjaGVkdWxlcjsKKworICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsg
bnVsbHB0ciB9OworICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAg
fTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKKyAgICB9OworICAgIAorICAgIC8vIENv
bnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgorICAgIFNw
YWNlVGltZVNjaGVkdWxlcihIZWFwJik7CisgICAgCisgICAgLy8gRm9yY2VzIHRoZSBuZXh0IHBo
YXNlIHRvIHN0YXJ0IG5vdy4KKyAgICB2b2lkIHNuYXBQaGFzZSgpOworICAgIAorICAgIC8vIFJl
dHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3aGlj
aCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKKyAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIgaXMg
bGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgorICAgIERlY2lzaW9uIGN1
cnJlbnREZWNpc2lvbigpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRGVjaXNp
b247CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2Vjb25kcyBtX3BlcmlvZDsKKyAgICBkb3Vi
bGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIGRvdWJsZSBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7CisgICAgTW9ub3RvbmljVGltZSBtX2lu
aXRpYWxUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJ
KHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTMgKzI1LDUyIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRl
ICJNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7Cisv
LyBUaGUgSlNDIGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRoZSB3b3JsZCBpbiBvcmRl
ciB0byBzdGF5IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAorLy8gc3ludGhldGljIHBh
dXNlcyBlbnN1cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBvbmUgaHVnZSBwYXVzZSBp
biBvcmRlciB0byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcgd2F2ZWZyb250LiBUaGUg
c2NoZWR1bGVyIGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBpdCBsaW5rcyB0aGUgYW1v
dW50IG9mIHRpbWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBmb3IgdG8gdGhlIGFtb3Vu
dCBvZiBzcGFjZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2UgdGhlIEdDIGN5Y2xlCisv
LyBiZWdhbi4KKworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRh
dG9yU2NoZWR1bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lvbiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Nj
aGVkdWxlcjsgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdldE11dGF0b3JVdGlsaXph
dGlvbigpIGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24o
KSBjb25zdDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoKSBjb25zdDsKLSAgICAg
ICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hvdWxkQmVSZXN1bWVkKCkg
Y29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgY29uc3Q7Ci0gICAg
ICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAgICAgICAKLSAgICBwcml2
YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOwotCi0gICAgICAg
IFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRyIH07Ci0gICAgICAgIGRv
dWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAgICAgICBNb25vdG9uaWNU
aW1lIG1fbm93OworICAgIGVudW0gU3RhdGUgeworICAgICAgICBOb3JtYWwsIC8vIE5vdCBjb2xs
ZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAgICBSZXN1bWVkCiAgICAgfTsKICAgICAK
LSAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNs
ZS4KLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIoSGVhcCYpOworICAgIH5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAg
CisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJlZ2lu
Q29sbGVjdGlvbigpIG92ZXJyaWRlOwogICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFz
ZSB0byBzdGFydCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKKyAgICB2b2lkIGRpZFN0b3Ao
KSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKSBvdmVycmlkZTsKICAgICAKLSAgICAv
LyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwg
d2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVy
IGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lv
biBjdXJyZW50RGVjaXNpb24oKTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVy
cmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAor
ICAgIGJvb2wgc2hvdWxkU3RvcCgpIG92ZXJyaWRlOworICAgIGJvb2wgc2hvdWxkUmVzdW1lKCkg
b3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAg
CiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKLQogICAgIEhlYXAmIG1faGVh
cDsKLSAgICBTZWNvbmRzIG1fcGVyaW9kOworICAgIFNlY29uZHMgbV9tdXRhdG9yVGltZXNsaWNl
OworICAgIFN0YXRlIG1fc3RhdGUgeyBOb3JtYWwgfTsKICAgICBkb3VibGUgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOworICAg
IE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVy
LmNwcAkocmV2aXNpb24gMjA5OTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lU2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIGRvdWJs
ZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1
bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBo
ZWFkcm9vbUZ1bGxuZXNzID0KLSAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBt
YXhIZWFkcm9vbTsKLSAgICAKLSAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5k
IG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRo
aXMgY29kZQotICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29u
cy4KLSAgICAKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFk
cm9vbUZ1bGxuZXNzID0gMDsKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAg
ICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxp
emF0aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Ci0gICAgCi0gICAgLy8gU2NhbGUgdGhlIG11
dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9y
VXRpbGl6YXRpb24gPQotICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9u
KCkgKwotICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25z
OjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWlu
aW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxp
emF0aW9uOwotfQotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0
Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7Ci19Ci0KLVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbjo6ZWxhcHNlZEluUGVyaW9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9z
Y2hlZHVsZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1k
b3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAotewotICAg
IHJldHVybiBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQot
Ym9vbCBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25z
dAotewotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAg
ICAgICByZXR1cm4gcGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICBy
ZXR1cm4gcGhhc2UoKSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1vbm90
b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6
Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93
IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xs
ZWN0b3JVdGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OnRpbWVUb1N0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChzaG91bGRCZVJl
c3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkp
Ci0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXIt
Pm1fcGVyaW9kICogdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93
IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLVNwYWNl
VGltZVNjaGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hl
YXAoaGVhcCkKLSAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9u
czo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwg
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25j
dXJyZW50R0NNYXhIZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCi17
Ci0gICAgc25hcFBoYXNlKCk7Ci19Ci0KLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhh
c2UoKQotewotICAgIG1faW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQot
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnRE
ZWNpc2lvbigpCi17Ci0gICAgRGVjaXNpb24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxl
ciA9IHRoaXM7Ci0gICAgcmVzdWx0Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAu
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1
bGVyLmgJKHJldmlzaW9uIDIwOTk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nw
YWNlVGltZVNjaGVkdWxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci0KLWNsYXNzIFNwYWNlVGltZVNjaGVk
dWxlciB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7
IH0KLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBj
b25zdDsKLSAgICAgICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7
Ci0gICAgICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJs
ZSBwaGFzZSgpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0Owot
ICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25v
dG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRp
bWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25v
dzsKLSAgICB9OwotICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBz
dGFydCBvZiBhIEdDIGN5Y2xlLgotICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAg
Ci0gICAgLy8gRm9yY2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNu
YXBQaGFzZSgpOwotICAgIAotICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVu
dCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAg
ICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNu
YXBQaGFzZSgpLgotICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOwotICAgIAotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgRGVjaXNpb247Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAg
U2Vjb25kcyBtX3BlcmlvZDsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nOwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVF
bmQ7Ci0gICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIoKQoreworfQorCitTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6
On5TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRh
dG9yU2NoZWR1bGVyOjpTdGF0ZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXI6OnN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3RhdGUgPT0g
U3RvcHBlZDsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1h
bCA/IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkgOiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30K
KworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1RvcFRoZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVU
b1Jlc3VtZSgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGlt
ZTo6bm93KCkgOiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOworfQorCit2b2lkIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAgICBtX3N0YXRlID0gTm9ybWFs
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBKU0MgY29uY3VycmVudCBHQyByZWxpZXMg
b24gc3RvcHBpbmcgdGhlIHdvcmxkIHRvIHN0YXkgYWhlYWQgb2YgdGhlIHJldHJlYXRpbmcgd2F2
ZWZyb250LgorLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBzYW1lIEFQSSBjYW4gYmUgcmV1c2Vk
IHRvIGltcGxlbWVudCBhIG5vbi1jb25jdXJyZW50IEdDIG1vZGUsIHdoaWNoIHdlCisvLyB1c2Ug
b24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgR0MncyBhdG9taWNpdHkgcHJvdG9j
b2xzLiBUaGF0IG1lYW5zIGFueXRoaW5nIG90aGVyCisvLyB0aGFuIFg4Ni02NCBhbmQgQVJNNjQu
IFRoaXMgc2NoZWR1bGVyIGlzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGNvbmN1cnJl
bnQgR0MncworLy8gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRv
IG5ldmVyIHJlc3VtZSB0aGUgd29ybGQgb25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFz
cyBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRv
clNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyKCk7CisgICAgflN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
cigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAg
dm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1l
IHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgp
IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3Rvbmlj
VGltZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKK3B1
YmxpYzoKKyAgICBWaXNpdGluZ1RpbWVvdXQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlz
aXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5n
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhk
aWRWaXNpdFNvbWV0aGluZykKKyAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52
aXNpdENvdW50KCkpCisgICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRv
ci52aXNpdENvdW50KCkgPiBtX3Zpc2l0Q291bnRCZWZvcmU7CisgICAgfQorICAgIAorICAgIGJv
b2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGlt
ZW91dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7
IGZhbHNlIH07CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKKyAgICBNb25v
dG9uaWNUaW1lIG1fdGltZW91dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xb3JsZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dvcmxkU2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV29ybGRTY2hlZHVsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTXV0YXRvclNjaGVkdWxlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRvclNjaGVkdWxlcik7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIE5vcm1h
bCwgLy8gTm90IGNvbGxlY3RpbmcuCisgICAgICAgIFN0b3BwZWQsCisgICAgICAgIFJlc3VtZWQK
KyAgICB9OworICAgIAorICAgIE11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICB2aXJ0dWFsIH5NdXRh
dG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCA9IDA7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0gMDsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN1bWUoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpID0gMDsgLy8gQ2FsbCB3aGls
ZSByZXN1bWVkLCB0byBhc2sgd2hlbiB0byBzdG9wLgorICAgIHZpcnR1YWwgTW9ub3RvbmljVGlt
ZSB0aW1lVG9SZXN1bWUoKSA9IDA7IC8vIENhbGwgd2hpbGUgc3RvcHBlZCwgdG8gYXNrIHdoZW4g
dG8gcmVzdW1lLgorICAgIAorICAgIGJvb2wgc2hvdWxkU3RvcCgpOyAvLyBDYWxsIHdoaWxlIHJl
c3VtZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgc3RvcCBub3cuCisgICAgYm9vbCBzaG91bGRSZXN1
bWUoKTsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBhc2sgaWYgd2Ugc2hvdWxkIHJlc3VtZSBu
b3cuCisgICAgCisgICAgdmlydHVhbCB2b2lkIGVuZENvbGxlY3Rpb24oKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298173</attachid>
            <date>2017-01-05 21:51:18 -0800</date>
            <delta_ts>2017-01-06 08:29:40 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>120826</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBQbGFuOjppdGVyYXRlQ29k
ZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24g
d3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwor
ICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGlj
IGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0
ZWQgZHVyaW5nIEdDLgorCisgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Cisg
ICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAg
aWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXIo
cHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lv
biAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICszNTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwog
fQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3Ig
KFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFu
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQo
KTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2NrcyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12
b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
cGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAg
UGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0g
JnZtKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJs
b2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lkIFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygp
CiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5sb2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29k
ZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9p
ZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1h
cmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29k
ZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5z
Rm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgs
OSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29t
cGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZp
c2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAg
ICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJ
bmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lk
IFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAg
ICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBw
bGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExNCwxNSArMTE0LDYgQEAgYm9vbCBDb2RlQmxvY2tTZXQ6OmNvbnRhaW5zKGNv
bnN0IExvY2tIbwogICAgIHJldHVybiBtX29sZENvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2Nr
KSB8fCBtX25ld0NvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSB8fCBtX2N1cnJlbnRseUV4
ZWN1dGluZy5jb250YWlucyhjb2RlQmxvY2spOwogfQogCi12b2lkIENvZGVCbG9ja1NldDo6d3Jp
dGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqIGhlYXApCi17Ci0gICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlJl
bWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhlY3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5c
biIpOwotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGlu
ZykKLSAgICAgICAgaGVhcC0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci19Ci0KIHZvaWQgQ29k
ZUJsb2NrU2V0OjpjbGVhckN1cnJlbnRseUV4ZWN1dGluZygpCiB7CiAgICAgbV9jdXJyZW50bHlF
eGVjdXRpbmcuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDEwICs2OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBieSB0aGlzIHNldCksIGFuZCB0aGF0IGhhdmUgbm90IGJlZW4gbWFy
a2VkLgogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoQ29sbGVjdGlvblNj
b3BlKTsKICAgICAKLSAgICAvLyBBZGQgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2Nr
cyB0byB0aGUgcmVtZW1iZXJlZCBzZXQgdG8gYmUgCi0gICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcg
dGhlIG5leHQgY29sbGVjdGlvbi4KLSAgICB2b2lkIHdyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1
dGluZyhIZWFwKik7Ci0KICAgICB2b2lkIGNsZWFyQ3VycmVudGx5RXhlY3V0aW5nKCk7CiAKICAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IExvY2tIb2xkZXImLCB2b2lkKiBjYW5kaWRhdGVDb2RlQmxv
Y2spOwpAQCAtODEsMjEgKzc3LDkgQEAgcHVibGljOgogICAgIC8vIFZpc2l0cyBlYWNoIENvZGVC
bG9jayBpbiB0aGUgaGVhcCB1bnRpbCB0aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUK
ICAgICAvLyB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBl
dmVyeSBDb2RlQmxvY2sgaGFzIGJlZW4KICAgICAvLyB2aXNpdGVkLgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAg
IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRv
JiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3MpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9
IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25lKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoYXV0byYgY29kZUJsb2NrIDog
bV9uZXdDb2RlQmxvY2tzKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBmdW5jdG9yKGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVy
YXRlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGl0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoY29uc3QgRnVuY3RvciYpOwogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0SW5saW5lcy5oCShyZXZpc2lvbiAyMTA0
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjAsNSArNjAsMzAgQEAgaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0Ojpt
YXJrKGNvbnN0IExvYwogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFkZChjb2RlQmxvY2spOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2tTZXQ6Oml0ZXJh
dGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOworICAgIGZvciAoYXV0byYgY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKSB7CisgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKGRvbmUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZvciAoYXV0byYgY29kZUJsb2Nr
IDogbV9uZXdDb2RlQmxvY2tzKSB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJs
b2NrKTsKKyAgICAgICAgaWYgKGRvbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGVD
dXJyZW50bHlFeGVjdXRpbmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBMb2NrSG9s
ZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9j
dXJyZW50bHlFeGVjdXRpbmcpCisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDksIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSwyNSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xk
aW5nTG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgIGZvciAo
Q29kZUJsb2NrKiBjb2RlQmxvY2sgOiBjb2RlQmxvY2tzKQorICAgICAgICBmdW5jKGNvZGVCbG9j
ayk7Cit9CisKIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQog
ewogICAgIFRpbWluZ1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjptYXJrVG9GaXhwb2ludCIpOwpAQCAtNTYwLDEzMiArNTQ5LDY0IEBAIHZvaWQgSGVhcDo6bWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ig
PSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtp
bmcoKTsKIAotICAgIFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1f
Y29uc3RyYWludFNldC0+cmVzZXRTdGF0cygpOworICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxl
Y3Rpb24oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVCb290c3RyYXAoc2xv
dFZpc2l0b3IsIG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgCisgICAgLy8gQWZ0
ZXIgdGhpcywgd2Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhbGwgdGhyb3VnaCBhbGwgb2YgdGhl
ICJzbG90VmlzaXRvci5pc0VtcHR5KCkiCisgICAgLy8gY2hlY2tzIGJlY2F1c2UgYm9vdHN0cmFw
IHdvdWxkIGhhdmUgcHV0IHRoaW5ncyBpbnRvIHRoZSB2aXNpdG9yLiBTbywgd2Ugc2hvdWxkIGZh
bGwKKyAgICAvLyB0aHJvdWdoIHRvIGRyYWluaW5nLgogICAgIAogICAgIGZvciAodW5zaWduZWQg
aXRlcmF0aW9uID0gMTsgOyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKICAgICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOwotICAgICAg
ICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0
aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAg
ICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKLSAgICAgICAg
ICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAg
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAg
ICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0
aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNj
cmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENv
bnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1l
KCkpOworICAgICAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIE5vdyB3ZSB2
aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRl
cmF0aW9uIGp1c3QgcmV2aXNpdHMKLSAgICAgICAgLy8gYWxsIG9mIHRoZW0uCi0jaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKLSAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwg
c2xvdFZpc2l0b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fdm0tPnNt
YWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAg
ICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9y
KTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZh
bHVlcykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5
KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0
U2V0LT5zaXplKCkpCi0gICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xv
dFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAgICBz
bG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90Vmlz
aXRvcik7Ci0gICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwotCi0jaWYg
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciog
c2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKLSAgICAg
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsK
LSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKLSAgICAg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0
b3IpOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxl
ciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5Q
YXJhbGxlbChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOwogICAgICAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAKLSAgICAgICAgaWYgKG1fdm0t
PnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZp
c2l0KHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV92bS0+c2hhZG93
Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZp
c2l0b3IpOwotCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwotCi0gICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90
VmlzaXRvcik7Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICB2aXNp
dENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBERkc6Om1hcmtDb2Rl
QmxvY2tzKCptX3ZtLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRl
ID0gc2xvdFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
OworICAgICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxSZXN1bWUoKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nKHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211
dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5z
aXplKCksICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9
IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9u
KCkudGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAgICBkb3VibGUg
dGhpc1BhdXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGltZSku
bWlsbGlzZWNvbmRzKCk7CisgICAgICAgICAgICBkYXRhTG9nKCJwPSIsIHRoaXNQYXVzZU1TLCAi
IG1zIChtYXggIiwgbWF4UGF1c2VNUyh0aGlzUGF1c2VNUyksICIpLi4uXVxuIik7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRp
dmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCi0gICAg
ICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8g
ZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0gICAgICAgIC8vIHNvIHRoYXQg
d2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlz
IGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCi0gICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3Ro
ZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQg
dG8gZG8gdGhpcwotICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcg
YXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAotICAg
ICAgICAvLyBHQy4KLSAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFy
ZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKLSAg
ICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgotICAg
ICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1h
cmtTdGFjaygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVz
OlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICByZXN1bWVUaGVXb3JsZCgpOwogICAgICAgICAK
KyAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwogICAg
ICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2luZyIpOwogICAgICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUNvbGxlY3RvclRpbWVzbGljaW5nKCkpIHsKLSAgICAgICAgICAgICAg
ICBzY2hlZHVsZXIuc25hcFBoYXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwotICAgICAgICAg
ICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkZWNpc2lvbiA9IHNjaGVkdWxl
ci5jdXJyZW50RGVjaXNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uLnNo
b3VsZEJlUmVzdW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3Bl
KCp0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RW
aXNpdG9yLmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShkZWNpc2lvbi50aW1lVG9TdG9wKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRv
cjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1
bGVyIGRvZXMgbm90IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxl
ID0gZGVjaXNpb24udGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdoYXQgdGhl
IHZhbHVlIG9mIGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVy
IHRoYW4gMC4gWW91IGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndWUgZm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBpdC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAqIE9w
dGlvbnM6OmNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlY29uZHMgd2FrZVVwTGF0ZW5jeSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gZGVjaXNp
b24udGltZVRvU3RvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWtlVXBM
YXRlbmN5ID49IDFfbXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Ind1bCE9Iiwgd2FrZVVwTGF0ZW5jeS5taWxsaXNlY29uZHMoKSwgIiBtcyAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChk
ZWNpc2lvbi50aW1lVG9SZXN1bWUoKSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoZHJhaW5S
ZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1l
c2xpY2luZyBpcyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKLSAgICAgICAgICAgICAg
ICAvLyAtLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0dW5p
dHkgZm9yIGhhcm1mdWwgcmFjZXMuCi0gICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29w
ZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci5kcmFpbkluUGFyYWxsZWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRyYWluUmVz
dWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KG1fc2NoZWR1bGVyLT50
aW1lVG9TdG9wKCkpOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYWluUmVzdWx0ID09IFNs
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1bGVyIGRvZXMgbm90
IHdhbnQKKyAgICAgICAgICAgIC8vIHRoYXQuCisgICAgICAgICAgICBTZWNvbmRzIHNjaGVkdWxl
ZElkbGUgPSBtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgICAgICAgICAvLyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0IHRoZSB2YWx1ZSBvZiBj
b2xsZWN0UGVybWl0dGVkSWRsZVJhdGlvCisgICAgICAgICAgICAvLyBzaG91bGQgYmUsIG90aGVy
IHRoYW4gaXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZlbgorICAgICAg
ICAgICAgLy8gYXJndWUgZm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVu
ZSBpdC4KKyAgICAgICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUgKiBPcHRpb25zOjpjb2xsZWN0
b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
aGVhcC5zdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICAgICAgCisgICAgICAgIG1f
c2NoZWR1bGVyLT5kaWRTdG9wKCk7CiAgICAgfQogCiAgICAgewpAQCAtNjk0LDYgKzYxNSwxMiBA
QCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgIG1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICBtX2hlbHBlckNs
aWVudC5maW5pc2goKTsKKworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzKAorICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICB3
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgICAgIAogICAgIHVwZGF0
ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgZW5kTWFya2luZygpOwogfQpAQCAtNzMy
LDI1ICs2NTksNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgbV9iYXJyaWVyc0V4
ZWN1dGVkID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBl
bmQocm9vdHMpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWduZWQg
aSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGlu
Z1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3Jr
bGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTM1NCw2ICsxMjYyLDcg
QEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICAKICAgICBoYW5kbGVHQ0Rp
ZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgIG1fbXV0YXRvckRpZFJ1biA9
IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCBvbGRT
dGF0ZSkKQEAgLTEzNjYsNyArMTI3NSw3IEBAIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xv
dyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0YXRlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCEob2xkU3RhdGUgJiBzaG91bGRTdG9w
Qml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYgIW1fc2NoZWRl
ZHVsZXItPnNob3VsZFN0b3AoKSkgewogICAgICAgICBpZiAoIShvbGRTdGF0ZSAmIHN0b3BwZWRC
aXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX3dvcmxkU3RhdGUuY29t
cGFyZUV4Y2hhbmdlU3Ryb25nKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5zdG9wcGVkQml0KTsKQEAg
LTE0MzksNiArMTM0OCw3IEBAIHZvaWQgSGVhcDo6YWNxdWlyZUFjY2Vzc1Nsb3coKQogICAgICAg
ICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG5ld1N0YXRl
KSkgewogICAgICAgICAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICAgICAgICAgIGhhbmRsZU5l
ZWRGaW5hbGl6ZSgpOworICAgICAgICAgICAgbV9tdXRhdG9yRGlkUnVuID0gdHJ1ZTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIxNTgsOCArMjA2OCwxNDEgQEAg
dm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVT
RShDRikKIAordm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQoKQoreworICAgIG1fY29uc3Ry
YWludFNldCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCk7CisgICAg
CisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDb25zZXJ2YXRpdmUgU2NhbiIs
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdG9y
VGltZW91dCYpIHsKKyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5n
U2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAg
ICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAg
ICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRo
ZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2Ny
YXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCisgICAgICAgICJNaXNjIFNtYWxsIFJvb3RzIiwKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0JikgeworI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0
KCptX3ZtLCBzbG90VmlzaXRvcik7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNt
YWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAg
ICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJv
dGVjdGVkVmFsdWVzKQorICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RT
ZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+
ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0
cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIlN0cm9uZyBIYW5kbGVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0JikgeworICAgICAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJr
aW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAorICAgICAgICAiRGVidWdnZXIiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRvclRpbWVvdXQmKSB7CisjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBs
aW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAg
ICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMo
KTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRh
OlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdm0tPnR5cGVQ
cm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52aXNp
dChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdm0tPnNoYWRvd0No
aWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkpJVCBTdHViIFJvdXRpbmVzIiwKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0b3JUaW1lb3V0Jikgewor
ICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXll
ZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAg
IldlYWsgU2V0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBj
b25zdCBWaXNpdG9yVGltZW91dCYpIHsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgICAgIHBhcmFsbGVs
VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CisgICAg
ICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworICAg
IAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiV2VhayBSZWZlcmVuY2UgSGFy
dmVzdGVycyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdG9yVGltZW91dCYpIHsKKyAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZl
c3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZp
c2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJr
aW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkRGRyBXb3JrbGlzdHMiLAor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRvclRp
bWVvdXQmKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCisgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3Nh
cnkuCisgICAgICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAg
ICAgICAgKm1fdm0sCisgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykg
eworICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2Rl
QmxvY2spOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwK
KyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisjZW5kaWYKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkNvZGVCbG9ja3MiLAorICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRvclRpbWVv
dXQmKSB7CisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
c1dpdGhvdXRIb2xkaW5nTG9ja3MoCisgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3Ry
YWludChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAg
ICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKKyAgICAKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIk11dGF0b3IgTWFyayBTdGFjayIsCisgICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdG9yVGltZW91dCYp
IHsKKyAgICAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRv
ci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlSZXN1bXB0aW9uKTsKK30KKwogdm9pZCBIZWFwOjpub3RpZnlJc1NhZmVU
b0NvbGxlY3QoKQogeworICAgIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAogICAgIG1faXNT
YWZlVG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRp
bnVvdXNseSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
MTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtNzMsOCArNzMsMTAgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZm
ZXI7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXI7
CiBjbGFzcyBTbG90VmlzaXRvcjsKLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKK2NsYXNzIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNs
YXNzIFZNOwogCkBAIC0zNDEsNiArMzQzLDkgQEAgcHVibGljOgogICAgIC8vIGFscmVhZHkgYmUg
Y2FsbGVkIGZvciB5b3UgYXQgdGhlIHJpZ2h0IHRpbWVzLgogICAgIHZvaWQgc3RvcElmTmVjZXNz
YXJ5KCk7CiAgICAgCisgICAgLy8gRklYTUUKKyAgICB2b2lkIHN0b3BJZlJlcXVpcmVkQnlTY2hl
ZHVsZXIoKTsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgbXVjaCBzdHJvbmdlciBraW5kIG9mIHN0
b3BwaW5nIG9mIHRoZSBjb2xsZWN0b3IsIGFuZCBpdCBtYXkgcmVxdWlyZSB3YWl0aW5nIGZvciBh
CiAgICAgLy8gd2hpbGUuIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBsZWdhY3kgQVBJIGZvciBjbGll
bnRzIG9mIGNvbGxlY3RBbGxHYXJiYWdlIHRoYXQgZXhwZWN0IHRoYXQgdGhlcmUKICAgICAvLyBp
cyBubyBHQyBiZWZvcmUgb3IgYWZ0ZXIgdGhhdCBmdW5jdGlvbiBjYWxsLiBBZnRlciBjYWxsaW5n
IHRoaXMsIHlvdSBhcmUgZnJlZSB0byBzdGFydCBHQ3MKQEAgLTM3Niw3ICszODEsNyBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAgICBmcmllbmQg
Y2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiAgICAg
ZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKQEAgLTQx
Myw5ICs0MTgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9p
ZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
Ci0gICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgCiAgICAgdm9pZCBz
dG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAt
NDU1LDcgKzQ1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNp
dENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNpdENv
bXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENvbXBp
bGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKQEAgLTQ5OCw2ICs0OTksMTQgQEAgcHJpdmF0ZToKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKICAgICAK
ICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKKyAgICAKKyAg
ICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhj
b25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lk
IGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nr
cyhjb25zdCBGdW5jJik7CiAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNv
bnN0IHNpemVfdCBtX3JhbVNpemU7CkBAIC01MzQsNiArNTQzLDggQEAgcHJpdmF0ZToKICAgICAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7
CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0
cmFpbnRTZXQ7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFy
YWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8g
ZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBz
b21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjE1LDYgKzYyNiw4IEBAIHByaXZh
dGU6CiAgICAgc2l6ZV90IG1fZXh0ZXJuYWxNZW1vcnlTaXplIHsgMCB9OwogI2VuZGlmCiAgICAg
CisgICAgc3RkOjp1bmlxdWVfcHRyPE11dGF0b3JTY2hlZHVsZXI+IG1fc2NoZWR1bGVyOworICAg
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG91bGRTdG9wQml0ID0gMXUgPDwgMHU7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0b3BwZWRCaXQgPSAxdSA8PCAxdTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaGFzQWNjZXNzQml0ID0gMXUgPDwgMnU7CkBAIC02MzAsNiArNjQz
LDcgQEAgcHJpdmF0ZToKICAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKICAg
ICBib29sIG1fdGhyZWFkU2hvdWxkU3RvcCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RocmVhZElz
U3RvcHBpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9Owog
ICAgIEJveDxMb2NrPiBtX3RocmVhZExvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV90aHJlYWRDb25kaXRpb247IC8vIFRoZSBtdXRhdG9yIG11c3Qgbm90IHdhaXQg
b24gdGhpcy4gSXQgd291bGQgY2F1c2UgYSBkZWFkbG9jay4KICAgICBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkPiBtX3RocmVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFy
a2luZ0NvbnN0cmFpbnQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJW
aXNpdGluZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtpbmdDb25zdHJh
aW50OjpNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KT4gZnVuY3Rpb24sCisg
ICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKQorICAgICwgbV92b2xhdGlsaXR5KHZv
bGF0aWxpdHkpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50Ojp+TWFya2luZ0NvbnN0cmFpbnQo
KQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKK3sKKyAgICBt
X2xhc3RWaXNpdENvdW50ID0gMDsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0
ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK3sKKyAgICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZp
c2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCB0aW1lb3V0KTsKKyAgICBtX2Z1bmN0aW9uKHZpc2l0
b3IsIHZpc2l0aW5nVGltZW91dCk7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1Rp
bWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFZvbGF0aWxp
dHkgeworICAgICAgICAvLyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBh
bnl0aW1lIHRoZSBtdXRhdG9yIHJlc3VtZXMgYWZ0ZXIgdGhlIEdDIGhhZAorICAgICAgICAvLyBz
dGFydGVkLgorICAgICAgICBHcmV5ZWRCeVJlc3VtcHRpb24sCisgICAgICAgIAorICAgICAgICAv
LyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBhbnl0aW1lIHRoZSBtdXRh
dG9yIHJ1bnM6IHNvIGF0IEdDIHN0YXJ0IGFuZAorICAgICAgICAvLyB3aGVuZXZlciB0aGUgR0Mg
cmVzdXNwZW5kcyBhZnRlciBhIHJlc3VtcHRpb24uIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyBzb21l
dGhpbmcgdGhhdAorICAgICAgICAvLyB5b3UnZCBjYWxsIGEgInJvb3QiIGluIGEgdHJhZGl0aW9u
YWwgR0MuCisgICAgICAgIEdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICAKKyAgICAgICAgLy8g
VGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55IHRpbWUgYW55IG9iamVj
dCBpcyBtYXJrZWQgYW5kIGFueXRpbWUgdGhlCisgICAgICAgIC8vIG11dGF0b3IgcmVzdW1lcy4K
KyAgICAgICAgR3JleWVkQnlNYXJraW5nCisgICAgfTsKKyAgICAKKyAgICBNYXJraW5nQ29uc3Ry
YWludCgKKyAgICAgICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiwKKyAgICAgICAgVm9s
YXRpbGl0eSk7CisgICAgCisgICAgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgY29uc3Qg
Y2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KKyAgICAKKyAgICB2
b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CisgICAgCisgICAgdm9pZCBleGVjdXRlKFNs
b3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91
dCk7CisgICAgCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92
b2xhdGlsaXR5OyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgorICAgIAorICAgIHVuc2lnbmVk
IG1faW5kZXggeyBVSU5UX01BWCB9OworICAgIENTdHJpbmcgbV9uYW1lOworICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYgdGltZW91dCk+IG1f
ZnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1fbGFz
dFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQu
aCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0
IHsKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChNYXJraW5nQ29uc3RyYWludFNl
dCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorICAg
ICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICAgICAg
LCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlkVmlz
aXRTb21ldGhpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21l
dGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGlt
ZW91dCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0
LgorICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQorICAgIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7CisgICAgICAgICAgICBleGVjdXRlKGlu
ZGV4KTsKKyAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOworICAgICAgICAgICAg
aWYgKHNob3VsZFRpbWVPdXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlkRXhl
Y3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsg
fQorCisgICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIG1fc2V0
Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1f
dGltZW91dCk7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBTbG90VmlzaXRv
ciYgbV92aXNpdG9yOworICAgIE1vbm90b25pY1Rpb21lIG1fdGltZW91dDsKKyAgICBCaXRWZWN0
b3IgbV9leGVjdXRlZDsKKyAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9Owor
fTsKKworTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK3sKK30K
KworTWFya2luZ0NvbnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OnJlc2V0U3RhdHMoKQoreworICAgIG1fdW5leGVj
dXRlZFJvb3RzLmNsZWFyQWxsKCk7CisgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5jbGVhckFs
bCgpOworICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KSB7CisgICAgICAgIGNvbnN0
cmFpbnQtPnJlc2V0U3RhdHMoKTsKKyAgICAgICAgc3dpdGNoIChjb25zdHJhaW50LT52b2xhdGls
aXR5KCkpIHsKKyAgICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRp
b246CisgICAgICAgICAgICBtX3VuZXhlY3V0ZWRSb290cy5zZXQoY29uc3RyYWludC0+aW5kZXgo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlNYXJraW5nOgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5zZXQo
Y29uc3RyYWludC0+aW5kZXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
YXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlSZXN1bXB0aW9uOgorICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBvbmNlIHdlJ3ZlIGV4aGF1c3RlZCBldmVyeXRoaW5n
IGVsc2UuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgbmFtZSwKKyAgICBGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KT4gZnVuY3Rpb24sCisg
ICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShuYW1lKSwgV1RGTW92
ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKK3sKKyAgICBjb25zdHJhaW50LT5tX2luZGV4ID0gbV9zZXQuc2l6ZSgpOworICAgIG1fc2V0
LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQoreworICAgIC8vIEJvb3RzdHJhcCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgZG9u
ZSBhbnkgb2JqZWN0IHZpc2l0aW5nIHlldC4gVGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAg
ICAvLyBvbmx5IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyAod2hpY2ggYWxzbyBoYXBwZW5zIHRv
IGJlIHRob3NlIHRoYXQgd2Ugc2F5IGFyZSBncmV5ZWQgYnkKKyAgICAvLyByZXN1bXB0aW9uKSwg
c2luY2UgdGhlIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBzdXBlciB1bmxpa2VseSB0byB0cmlnZ2Vy
IHdpdGhvdXQgc29tZSBvYmplY3QKKyAgICAvLyB2aXNpdGluZy4gVGhlIGV4cGVjdGF0aW9uIGlz
IHRoYXQgdGhlIGNhbGxlciB3aWxsIGdvIHN0cmFpZ2h0IHRvIG9iamVjdCB2aXNpdGluZyBhZnRl
cgorICAgIC8vIHRoaXMuCisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0
aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dC5kcmFp
bihtX3VuZXhlY3V0ZWRSb290cyk7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1l
b3V0KQoreworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlz
aXRvciwgdGltZW91dCk7CisgICAgCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50
cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhl
bgorICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KKyAgICBpZiAoIWV4ZWN1dGlv
bkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3RkOjpzb3J0KAorICAgICAgICBt
X3NldC5iZWdpbigpLCBtX3NldC5lbmQoKSwKKyAgICAgICAgWyZdIChhdXRvJiBhLCBhdXRvJiBi
KSAtPiBib29sIHsKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1cm4gdHJ1ZSBpZiBhIHNo
b3VsZCBjb21lIGJlZm9yZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZvbGF0aWxpdHkoKSA+IGIt
PnZvbGF0aWxpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBhLT5sYXN0VmlzaXRDb3VudCgpID4gYi0+bGFzdFZpc2l0Q291bnQoKTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NldC5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRo
ZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKKyAgICAgICAg
Ly8gd2UgZmluZCB3b3JrLiBOb25ldGhlbGVzcywgd2Ugb25seSB3YW50IGNvbnN0cmFpbnRzIHRv
IGludGVycnVwdCB0aGVtc2VsdmVzIHVwb24KKyAgICAgICAgLy8gdGltZW91dCAtIG5vdCBqdXN0
IGJlY2F1c2UgdGhleSBmb3VuZCBzb21lIHdvcmsuCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0
aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xl
YXIgaWYgdGhhdCdzCisgICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0
ZXIgaXMgdGhpczoKKyAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBy
dW5uaW5nLgorICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRo
aW5ncywgcmV0dXJuLgorICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCisgICAg
ICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGNv
bnN0cmFpbnQgOiBtX3NldCkKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBk
aWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dCB7CitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICB+TWFya2luZ0Nv
bnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICB2
b2lkIGFkZCgKKyAgICAgICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpPiwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludD4pOworICAgIAorICAgIC8vIEV4ZWN1dGVzIG9ubHkgcm9vdHMu
IFJldHVybnMgdHJ1ZSBpZiBhbGwgcm9vdHMgaGF2ZSBiZWVuIGV4ZWN1dGVkLiBJdCdzIGV4cGVj
dGVkCisgICAgLy8gdGhhdCB5b3UnbGwgZG8gc29tZSBkcmFpbmluZyBhZnRlciB0aGlzIGFuZCB0
aGVuIHVzZSBleGVjdXRlQ29udmVyZ2VuY2UoKS4KKyAgICBib29sIGV4ZWN1dGVCb290c3RyYXAo
U2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbnN0cmFpbnRzIHdl
cmUgZXhlY3V0ZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5CisgICAgLy8gdmlz
aXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgorICAgIGJvb2wgZXhlY3V0ZUNvbnZl
cmdlbmNlKAorICAgICAgICBTbG90VmlzaXRvciYsCisgICAgICAgIE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFNpbXBseSBy
dW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KKyAgICB2b2lkIGV4
ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgY2xhc3MgRXhlY3V0
aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAgICBib29s
IGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVk
LCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgCisg
ICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOworICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0
ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFp
bnQ+PiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNdXRhdG9y
U2NoZWR1bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNdXRhdG9yU2NoZWR1bGVyOjpNdXRh
dG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVs
ZXIoKQoreworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQoreworfQorCit2
b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFJlc3VtZSgpCit7Cit9CisKK2Jvb2wgTXV0YXRvclNj
aGVkdWxlcjo6c2hvdWxkU3RvcCgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvU3Rv
cCgpKTsKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRSZXN1bWUoKQoreworICAg
IHJldHVybiBoYXNFbGFwc2VkKHRpbWVUb1Jlc3VtZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1
bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRv
clNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBN
dXRhdG9yU2NoZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdG9yU2NoZWR1
bGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgTm9ybWFsLCAvLyBOb3QgY29sbGVjdGluZy4KKyAgICAgICAgU3RvcHBl
ZCwKKyAgICAgICAgUmVzdW1lZAorICAgIH07CisgICAgCisgICAgTXV0YXRvclNjaGVkdWxlcigp
OworICAgIHZpcnR1YWwgfk11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0
ZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkg
PSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlc3VtZSgpOworICAgIAorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9w
KCkgPSAwOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayB3aGVuIHRvIHN0b3AuCisgICAg
dmlydHVhbCBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpID0gMDsgLy8gQ2FsbCB3aGlsZSBz
dG9wcGVkLCB0byBhc2sgd2hlbiB0byByZXN1bWUuCisgICAgCisgICAgYm9vbCBzaG91bGRTdG9w
KCk7IC8vIENhbGwgd2hpbGUgcmVzdW1lZCwgdG8gYXNrIGlmIHdlIHNob3VsZCBzdG9wIG5vdy4K
KyAgICBib29sIHNob3VsZFJlc3VtZSgpOyAvLyBDYWxsIHdoaWxlIHN0b3BwZWQsIHRvIGFzayBp
ZiB3ZSBzaG91bGQgcmVzdW1lIG5vdy4KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ29sbGVj
dGlvbigpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksMTEgKzU5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9v
dCA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgYWRkKHZvaWQqIHJvb3QpCisgICAgYm9vbCBh
ZGQodm9pZCogcm9vdCkKICAgICB7CiAgICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJpZWRS
b290KQogICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0gICAg
ICAgIG1fcm9vdHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCku
aXNOZXdFbnRyeTsKICAgICB9CiAKICAgICBpbnQgc2l6ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNDcsNiArMzQ3LDExIEBAIHByaXZhdGU6CiAgICAgU2xvdFZpc2l0b3Im
IG1fdmlzaXRvcjsKIH07CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRB
c0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1faXNWaXNpdGluZ011dGF0
b3JTdGFjayA9IHRydWU7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KIAogQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkK
IHsKQEAgLTQ2MSw3ICs0NjYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNU
aW1lIHRpCiAgICAgCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3JpZ2h0VG9SdW4pOwog
ICAgIAotICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0
b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgd2hpbGUg
KCFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CiAgICAgICAgIHVwZGF0ZU11dGF0b3JJc1N0b3BwZWQo
bG9ja2VyKTsKICAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKQEAgLTQ3Niw3ICs0ODEsOCBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpCiAgICAgICAgICAgICBtX2lz
VmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
b3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Uo
KTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKICAgICAg
ICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9y
aWdodFRvUnVuLnNhZmVwb2ludCgpOwogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAg
ICAgfQpAQCAtNjA1LDEzICs2MTEsMTMgQEAgdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9v
dCh2b2lkKiBybwogICAgIAogICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09
IDEpIHsKICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0Lgot
ICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7CisgICAgICAgIG1fdmlzaXRD
b3VudCArPSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVy
Z2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCiAgICAgLy8gYSB3aGlsZSB0byBt
YWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KICAgICBt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9v
dCk7CisgICAgbV92aXNpdENvdW50ICs9IG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogfQogCiBi
b29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjEw
NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDYgKzE1MSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNp
dFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICB2b2lkIGRpZE5vdFJhY2UoY29uc3QgVmlz
aXRSYWNlS2V5Jik7CiAgICAgdm9pZCBkaWROb3RSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hh
ciogcmVhc29uKSB7IGRpZE5vdFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9Cisg
ICAgCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuY3BwCShyZXZpc2lvbiAyMTA0MzMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZVNjaGVkdWxlci5jcHA6MjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxlci5oIgor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZG91YmxlIFNw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNv
bnN0Cit7CisgICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KKyAgICAgICAg
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgCisgICAgZG91YmxlIG1heEhlYWRyb29tID0K
KyAgICAgICAgbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAt
IG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Cisg
ICAgCisgICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MgPQorICAgICAgICBieXRlc1NpbmNlQmVn
aW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOworICAgIAorICAgIC8vIGhlYWRyb29tRnVsbG5l
c3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCisgICAgLy8gYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBp
biBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9h
dGluZyBwb2ludCBkcmFnb25zLgorICAgIAorICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0g
MCkpCisgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOworICAgIGlmICghKGhlYWRyb29tRnVs
bG5lc3MgPD0gMSkpCisgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOworICAgIAorICAgIGRv
dWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKKyAgICAKKyAg
ICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2lu
ZG93LgorICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1N
dXRhdG9yVXRpbGl6YXRpb24oKSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAg
ICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAg
ICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJl
dHVybiBtdXRhdG9yVXRpbGl6YXRpb247Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKK30KKworU2Vjb25kcyBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJpb2QoKSBjb25zdAoreworICAgIHJl
dHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+
bV9wZXJpb2Q7Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFz
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXIt
Pm1fcGVyaW9kOworfQorCitib29sIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnNob3Vs
ZEJlUmVzdW1lZCgpIGNvbnN0Cit7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJl
c3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpOworICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRp
b24oKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0
aW1lVG9SZXN1bWUoKSBjb25zdAoreworICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOwor
ICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICBy
ZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsK
KyAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3Bl
cmlvZCAqIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Cit9CisKK01vbm90b25pY1RpbWUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hv
dWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9k
KCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsK
KyAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3Bl
cmlvZDsKK30KKworU3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYg
aGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50R0NQZXJpb2RNUygpKSkKKyAgICAsIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyhoZWFwLm1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQoCisgICAg
ICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1h
eDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgaGVhcC5t
X21heEVkZW5TaXplKSkKK3sKKyAgICBzbmFwUGhhc2UoKTsKK30KKwordm9pZCBTcGFjZVRpbWVT
Y2hlZHVsZXI6OnNuYXBQaGFzZSgpCit7CisgICAgbV9pbml0aWFsVGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOworfQorCitTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGltZVNj
aGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKK3sKKyAgICBEZWNpc2lvbiByZXN1bHQ7CisgICAg
cmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKKyAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHJlc3VsdC5t
X25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTA1ICsyNCwxNDUgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRh
cmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGJ5dGVzU2luY2VC
ZWdpbm5pbmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1f
c2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAg
Ci0gICAgZG91YmxlIG1heEhlYWRyb29tID0KLSAgICAgICAgbV9zY2hlZHVsZXItPm1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIGhlYWRyb29tRnVsbG5l
c3MgPQotICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOwot
ICAgIAotICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJl
c3RpbmcgdGhpbmdzIGlmCi0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCi0gICAg
Ly8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgotICAgIAotICAg
IGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCi0gICAgICAgIGhlYWRyb29tRnVsbG5lc3Mg
PSAwOwotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCi0gICAgICAgIGhlYWRyb29t
RnVsbG5lc3MgPSAxOwotICAgIAotICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0g
aGVhZHJvb21GdWxsbmVzczsKLSAgICAKLSAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXph
dGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgotICAgIG11dGF0b3JVdGlsaXphdGlvbiA9
Ci0gICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCi0gICAgICAg
IG11dGF0b3JVdGlsaXphdGlvbiAqICgKLSAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRh
dG9yVXRpbGl6YXRpb24oKSAtCi0gICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0
aWxpemF0aW9uKCkpOwotICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247Ci19Ci0K
LWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRDb2xsZWN0b3JVdGls
aXphdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRp
b24oKTsKLX0KLQotU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2Vk
SW5QZXJpb2QoKSBjb25zdAotewotICAgIHJldHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9p
bml0aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWRvdWJsZSBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsYXBz
ZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1ib29sIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6RGVjaXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNvbnN0Ci17Ci0gICAgaWYg
KE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBw
aGFzZSgpIDw9IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBwaGFzZSgp
ID4gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLX0KKy8vIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBwYXJ0IG9mIGEgaGllcmFyY2h5IG9mIHNjaGVkdWxlcnM/IEluIHN1Y2ggYSB3
b3JsZCwgd2Ugd291bGQKKy8vIHByb2JhYmx5IHJlcHJlc2VudCBjb25jdXJyZW50LUdDLW9mZiBh
cyBhIHNjaGVkdWxlci4gSXQgd291bGQgdGhlbiBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIGtlZXAK
Ky8vIHRoZSBvbGQgc2NoZWR1bGVyIGFyb3VuZC4gSSB3b25kZXIgaWYgd2UgY291bGQgYWxzbyBz
aW11bGF0ZSB0aGUgb2xkIHNjaGVkdWxlcidzIHRyZWF0bWVudCBvZgorLy8gZml4cG9pbnQgaXRl
cmF0aW9ucyBhbmQgaWRsZSB0aW1lLiBUaGF0IHNvdW5kcyBhbm5veWluZyBhbmQgaGFyZCwgc28g
bWF5YmUgd2UgZG9uJ3Qgd2FudCB0byBnbworLy8gdGhlcmUuCiAKLU1vbm90b25pY1RpbWUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKK1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoSGVhcCYgaGVhcCkK
KyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9tdXRhdG9yVGltZXNsaWNlKFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoT3B0aW9uczo6bXV0YXRvclRpbWVzbGljZU1TKCkpKQogewotICAgIEFT
U0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91
bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2Qo
KSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5Q
ZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENvbGxlY3RvclV0aWxpemF0
aW9uKCk7CiB9CiAKLU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
dGltZVRvU3RvcCgpIGNvbnN0CitTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp+U3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcigpCiB7Ci0gICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0
dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5Q
ZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKIH0KIAotU3BhY2VUaW1lU2NoZWR1bGVy
OjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQotICAg
ICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50
R0NQZXJpb2RNUygpKSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZyhoZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVFbmQoCi0gICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhl
YWRyb29tKCkgKgotICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkKLXsKLSAgICBzbmFwUGhh
c2UoKTsKLX0KLQotdm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSgpCi17Ci0gICAg
bV9pbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworTXV0YXRvclNjaGVkdWxlcjo6
U3RhdGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0YXRlOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJlZ2lu
Q29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOwor
ICAgIG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkIHx8IG1fc3RhdGUgPT0gUmVz
dW1lZCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp3aWxs
UmVzdW1lKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9z
dGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gUmVzdW1lZDsKKyAgICBtX3N0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgewor
ICAgIGNhc2UgTm9ybWFsOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KTsKKyAgICBjYXNlIFN0b3BwZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3co
KTsKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJldHVybiBtX3N0YXJ0VGltZSArIG1fbXV0
YXRvclRpbWVzbGljZTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgpOworfQorCitNb25vdG9uaWNUaW1lIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7CisgICAgc3dpdGNoICht
X3N0YXRlKSB7CisgICAgY2FzZSBOb3JtYWw6CisgICAgY2FzZSBSZXN1bWVkOgorICAgICAgICBy
ZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY2FzZSBTdG9wcGVkOiB7CisgICAgICAg
IGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9CisgICAgICAgICAgICBtX2hlYXAu
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRo
ZUJlZ2lubmluZzsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9CisgICAg
ICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgICAgIAorICAgICAgICBkb3VibGUgaGVh
ZHJvb21GdWxsbmVzcyA9CisgICAgICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAv
IG1heEhlYWRyb29tOworICAgICAgICAKKyAgICAgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4g
YmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAgICAgLy8gYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBk
ZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxv
YXRpbmcgcG9pbnQgZHJhZ29ucy4KKyAgICAgICAgCisgICAgICAgIGlmICghKGhlYWRyb29tRnVs
bG5lc3MgPj0gMCkpCisgICAgICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKKyAgICAgICAg
aWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKKyAgICAgICAgICAgIGhlYWRyb29tRnVsbG5l
c3MgPSAxOworICAgICAgICAKKyAgICAgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEg
LSBoZWFkcm9vbUZ1bGxuZXNzOworICAgICAgICAKKyAgICAgICAgLy8gU2NhbGUgdGhlIG11dGF0
b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KKyAgICAgICAgbXV0YXRv
clV0aWxpemF0aW9uID0KKyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6
YXRpb24oKSArCisgICAgICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCisgICAgICAgICAg
ICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAg
ICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdHdvIHRoaW5nczoKKyAgICAgICAgLy8gLSBNdXRhdG9y
IGdldHMgdG8gYWx3YXlzIHJ1biBmb3IgbV9tdXRhdG9yVGltZXNsaWNlLgorICAgICAgICAvLyAt
IFRoZSByYXRpbyBiZXR3ZWVuIG11dGF0b3IgcmVzdW1lIHRpbWUgYW5kIG11dGF0b3Igc3RvcCB0
aW1lIGlzIGdvdmVybmVkIGFzIGZvbGxvd3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHdl
IHJlc3VtZSBmb3IgdGhpcyBhbW91bnQ6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBDICog
bXV0YXRvclV0aWxpemF0aW9uCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBzb21lIGNvbnN0
YW50IEMsIHRoZW4gd2UgbXVzdCBzdG9wIGZvciB0aGlzIGFtb3VudDoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgIEMgKiAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHdlIHdhbnQgdGhlIHJhdGlvIG9mIHJlc3VtZSB0aW1l
IHRvIHN0b3AgdGltZSB0byBiZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIG11dGF0b3JV
dGlsaXphdGlvbiAvICgxIC0gbXV0YXRvclV0aWxpemF0aW9uKQorICAgICAgICAvLworICAgICAg
ICAvLyBGb3IgZXhhbXBsZSwgaWYgd2UgcmVzdW1lZCBmb3IgWCB0aGVuIHdlIHdvdWxkIGRpdmlk
ZSBYIGJ5IHRoaXMgdG8gZ2V0IHRoZSBhbW91bnQgb2YKKyAgICAgICAgLy8gdGltZSB3ZSBzaG91
bGQgc3RvcCBmb3IuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IGlm
IHdlIHJlc3VtZSBmb3IgbV9tdXRhdG9yVGltZXNsaWNlIChhcyB0aGlzIHNjaGVkdWxlciBhbHdh
eXMgZG9lcykKKyAgICAgICAgLy8gdGhlbiB3ZSBzaG91bGQgc3RvcCBmb3I6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgICBtX211dGF0b3JUaW1lc2xpY2UgLyAobXV0YXRvclV0aWxpemF0aW9u
IC8gKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24pKQorICAgICAgICAvLworICAgICAgICAvLyBXaGlj
aCBzaW1wbGlmaWVzIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbV9tdXRhdG9yVGlt
ZXNsaWNlICogKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24pIC8gbXV0YXRvclV0aWxpemF0aW9uCisg
ICAgICAgIC8vCisgICAgICAgIC8vIEFuZCB0aGVuIGlmIHdlIGRpc3RyaWJ1dGUgd2UgZ2V0Ogor
ICAgICAgICBTZWNvbmRzIHN0b3BEdXJhdGlvbiA9IG1fbXV0YXRvclRpbWVzbGljZSAvIG11dGF0
b3JVdGlsaXphdGlvbiAtIG1fbXV0YXRvclRpbWVzbGljZTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBtX3N0YXJ0VGltZSArIHN0b3BEdXJhdGlvbjsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7CiB9
CiAKLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJy
ZW50RGVjaXNpb24oKQordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0
aW9uKCkKIHsKLSAgICBEZWNpc2lvbiByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc2NoZWR1bGVyID0g
dGhpczsKLSAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVhcC5tX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25pY1RpbWU6
Om5vdygpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9zdGF0ZSA9IE5vcm1hbDsKKyAgICBt
X3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQzMykJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6MjEwNDMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBI
ZWFwOworCitjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgeworcHVibGljOgorICAgIGNsYXNzIERl
Y2lzaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9CisgICAgICAgIAorICAgICAgICBkb3VibGUg
dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB0YXJnZXRD
b2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBl
cmlvZCgpIGNvbnN0OworICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKKyAgICAgICAgYm9v
bCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9S
ZXN1bWUoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVT
Y2hlZHVsZXI7CisKKyAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51
bGxwdHIgfTsKKyAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07
CisgICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAgfTsKKyAgICAKKyAgICAvLyBDb25z
dHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KKyAgICBTcGFj
ZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIAorICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFz
ZSB0byBzdGFydCBub3cuCisgICAgdm9pZCBzbmFwUGhhc2UoKTsKKyAgICAKKyAgICAvLyBSZXR1
cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2gg
d2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCisgICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxp
dmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KKyAgICBEZWNpc2lvbiBjdXJy
ZW50RGVjaXNpb24oKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERlY2lzaW9u
OworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNlY29uZHMgbV9wZXJpb2Q7CisgICAgZG91Ymxl
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICBkb3VibGUgbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOworICAgIE1vbm90b25pY1RpbWUgbV9pbml0
aWFsVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCShy
ZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDUyIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlICJNdXRh
dG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CisvLyBUaGUg
SlNDIGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRoZSB3b3JsZCBpbiBvcmRlciB0byBz
dGF5IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAorLy8gc3ludGhldGljIHBhdXNlcyBl
bnN1cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBvbmUgaHVnZSBwYXVzZSBpbiBvcmRl
ciB0byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcgd2F2ZWZyb250LiBUaGUgc2NoZWR1
bGVyIGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBpdCBsaW5rcyB0aGUgYW1vdW50IG9m
IHRpbWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBmb3IgdG8gdGhlIGFtb3VudCBvZiBz
cGFjZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2UgdGhlIEdDIGN5Y2xlCisvLyBiZWdh
bi4KKworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRhdG9yU2No
ZWR1bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lvbiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3NjaGVkdWxl
cjsgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigp
IGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25z
dDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoKSBjb25zdDsKLSAgICAgICAgZG91
YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hvdWxkQmVSZXN1bWVkKCkgY29uc3Q7
Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgY29uc3Q7Ci0gICAgICAgIE1v
bm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAgICAgICAKLSAgICBwcml2YXRlOgot
ICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOwotCi0gICAgICAgIFNwYWNl
VGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRyIH07Ci0gICAgICAgIGRvdWJsZSBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAgICAgICBNb25vdG9uaWNUaW1lIG1f
bm93OworICAgIGVudW0gU3RhdGUgeworICAgICAgICBOb3JtYWwsIC8vIE5vdCBjb2xsZWN0aW5n
LgorICAgICAgICBTdG9wcGVkLAorICAgICAgICBSZXN1bWVkCiAgICAgfTsKICAgICAKLSAgICAv
LyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAg
ICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIoSGVhcCYpOworICAgIH5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAg
U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJlZ2luQ29sbGVj
dGlvbigpIG92ZXJyaWRlOwogICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBz
dGFydCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKKyAgICB2b2lkIGRpZFN0b3AoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKSBvdmVycmlkZTsKICAgICAKLSAgICAvLyBSZXR1
cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2gg
d2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxp
dmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJy
ZW50RGVjaXNpb24oKTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsK
KyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIGJv
b2wgc2hvdWxkU3RvcCgpIG92ZXJyaWRlOworICAgIGJvb2wgc2hvdWxkUmVzdW1lKCkgb3ZlcnJp
ZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKLQogICAgIEhlYXAmIG1faGVhcDsKLSAg
ICBTZWNvbmRzIG1fcGVyaW9kOworICAgIFNlY29uZHMgbV9tdXRhdG9yVGltZXNsaWNlOworICAg
IFN0YXRlIG1fc3RhdGUgeyBOb3JtYWwgfTsKICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOworICAgIE1vbm90
b25pY1RpbWUgbV9zdGFydFRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAko
cmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
U2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lz
aW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIGRvdWJsZSBieXRl
c1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OwotICAgIAotICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9v
bUZ1bGxuZXNzID0KLSAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFk
cm9vbTsKLSAgICAKLSAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVy
IGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29k
ZQotICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAg
ICAKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1
bGxuZXNzID0gMDsKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBo
ZWFkcm9vbUZ1bGxuZXNzID0gMTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9u
ID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Ci0gICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3Ig
dXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6
YXRpb24gPQotICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwot
ICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhp
bXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11
dGF0b3JVdGlsaXphdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9u
OwotfQotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0
aWxpemF0aW9uKCk7Ci19Ci0KLVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
ZWxhcHNlZEluUGVyaW9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVs
ZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1kb3VibGUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAotewotICAgIHJldHVy
biBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotYm9vbCBT
cGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAotewot
ICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICBy
ZXR1cm4gcGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4g
cGhhc2UoKSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1vbm90b25pY1Rp
bWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVj
dG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZElu
UGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRpbWVUb1N0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQo
KSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAg
ICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVy
aW9kICogdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLVNwYWNlVGltZVNj
aGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVh
cCkKLSAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29u
Y3VycmVudEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NNYXhIZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCi17Ci0gICAg
c25hcFBoYXNlKCk7Ci19Ci0KLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQot
ewotICAgIG1faW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQotU3BhY2VU
aW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lv
bigpCi17Ci0gICAgRGVjaXNpb24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRo
aXM7Ci0gICAgcmVzdWx0Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJ
KHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZVNjaGVkdWxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci0KLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7
Ci1wdWJsaWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KLSAg
ICAgICAgCi0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsK
LSAgICAgICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAg
ICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBwaGFz
ZSgpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAgICAg
ICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNU
aW1lIHRpbWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVTY2hl
ZHVsZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKLSAg
ICB9OwotICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBv
ZiBhIEdDIGN5Y2xlLgotICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAgCi0gICAg
Ly8gRm9yY2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNuYXBQaGFz
ZSgpOwotICAgIAotICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hl
ZHVsaW5nIGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAgICAvLyBT
cGFjZVRpbWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFz
ZSgpLgotICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOwotICAgIAotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgRGVjaXNpb247Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25k
cyBtX3BlcmlvZDsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nOwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7Ci0g
ICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdv
cmxkTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIo
KQoreworfQorCitTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6On5TeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2No
ZWR1bGVyOjpTdGF0ZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnN0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3RhdGUgPT0gU3RvcHBl
ZDsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1hbCA/IE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCkgOiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9u
b3RvbmljVGltZSBTeW5jaHJvbm91c1RvcFRoZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3Vt
ZSgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6bm93
KCkgOiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBKU0MgY29uY3VycmVudCBHQyByZWxpZXMgb24gc3Rv
cHBpbmcgdGhlIHdvcmxkIHRvIHN0YXkgYWhlYWQgb2YgdGhlIHJldHJlYXRpbmcgd2F2ZWZyb250
LgorLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBzYW1lIEFQSSBjYW4gYmUgcmV1c2VkIHRvIGlt
cGxlbWVudCBhIG5vbi1jb25jdXJyZW50IEdDIG1vZGUsIHdoaWNoIHdlCisvLyB1c2Ugb24gcGxh
dGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgR0MncyBhdG9taWNpdHkgcHJvdG9jb2xzLiBU
aGF0IG1lYW5zIGFueXRoaW5nIG90aGVyCisvLyB0aGFuIFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMg
c2NoZWR1bGVyIGlzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGNvbmN1cnJlbnQgR0Mn
cworLy8gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVy
IHJlc3VtZSB0aGUgd29ybGQgb25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVk
dWxlciB7CitwdWJsaWM6CisgICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyKCk7CisgICAgflN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOwor
ICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBi
ZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVU
b1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJy
aWRlOworICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKK3B1YmxpYzoK
KyAgICBWaXNpdGluZ1RpbWVvdXQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlzaXRpbmdU
aW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCisgICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNp
dFNvbWV0aGluZykKKyAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENv
dW50KCkpCisgICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRvci52aXNp
dENvdW50KCkgPiBtX3Zpc2l0Q291bnRCZWZvcmU7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hv
dWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNl
IH07CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKKyAgICBNb25vdG9uaWNU
aW1lIG1fdGltZW91dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298202</attachid>
            <date>2017-01-06 08:29:40 -0800</date>
            <delta_ts>2017-01-06 11:17:12 -0800</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>122988</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVuYyhjb2RlQmxv
Y2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICsz
NTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29k
ZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2Nr
cyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lk
IFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5s
b2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0
b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0
YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21w
aWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0
aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAg
IHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBG
dW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQog
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsxMTIsNiBAQCBi
b29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xk
Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmco
SGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVj
dXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhl
Y3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8vIEFkZCBhbGwg
Y3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVkIHNldCB0byBi
ZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9uLgotICAgIHZv
aWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAgIHZvaWQgY2xl
YXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTG9ja0hv
bGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcsOSBAQCBwdWJs
aWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2
aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQg
aXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAg
IC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKLSAgICAgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYpOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1ICs2MCwzMCBA
QCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50
bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxv
Y2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSwyNSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBl
bmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwogdm9pZCBIZWFw
OjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAgVGltaW5nU2NvcGUg
bWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7
CkBAIC01NjAsMTMyICs1NDksNjQgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUg
Z2NTdGFydAogICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RW
aXNpdG9yOwogICAgIHNsb3RWaXNpdG9yLmRpZFN0YXJ0TWFya2luZygpOwogCi0gICAgU3BhY2VU
aW1lU2NoZWR1bGVyIHNjaGVkdWxlcigqdGhpcyk7CisgICAgbV9jb25zdHJhaW50U2V0LT5yZXNl
dFN0YXRzKCk7CisgICAgbV9zY2hlZHVsZXItPmJlZ2luQ29sbGVjdGlvbigpOworICAgIAorICAg
IG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUJvb3RzdHJhcChzbG90VmlzaXRvciwgbV9zY2hlZHVs
ZXItPnRpbWVUb1Jlc3VtZSgpKTsKKyAgICAKKyAgICAvLyBBZnRlciB0aGlzLCB3ZSB3aWxsIGFs
bW9zdCBjZXJ0YWlubHkgZmFsbCB0aHJvdWdoIGFsbCBvZiB0aGUgInNsb3RWaXNpdG9yLmlzRW1w
dHkoKSIKKyAgICAvLyBjaGVja3MgYmVjYXVzZSBib290c3RyYXAgd291bGQgaGF2ZSBwdXQgdGhp
bmdzIGludG8gdGhlIHZpc2l0b3IuIFNvLCB3ZSBzaG91bGQgZmFsbAorICAgIC8vIHRocm91Z2gg
dG8gZHJhaW5pbmcuCiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsr
aXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICAgICAg
ZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRp
bWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9G
aXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5w
cmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwotICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9v
dHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwotICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uo
c2xvdFZpc2l0b3IsIG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgICAgICAgICBp
ZiAoc2xvdFZpc2l0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9u
J3QgZ2V0IGJhcnJpZXJlZCwgc28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0
cwotICAgICAgICAvLyBhbGwgb2YgdGhlbS4KLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAg
ICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0jZW5k
aWYKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9C
ZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgICAgIG1fdm0tPnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgCi0g
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkpOwotICAgICAgICAgICAgCi0g
ICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21h
cmtMaXN0U2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
bV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgbV9o
YW5kbGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
bV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9m
aWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOwotICAgICAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIAorICAg
ICAgICB7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsKG1fc2NoZWR1bGVy
LT50aW1lVG9SZXN1bWUoKSk7CiAgICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCi0g
ICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGls
ZHJlbihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7Ci0KLSAgICAgICAg
c2xvdFZpc2l0b3IubWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIGZvciAo
YXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAg
ICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAg
aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdl
YWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sIHNsb3RW
aXNpdG9yKTsKLSAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBzbG90VmlzaXRvci5pc0Vt
cHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIGlmICghbV9z
Y2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICBtX3NjaGVkdWxlci0+d2lsbFJlc3VtZSgpOwogICAgICAgICAKICAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3Iu
Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6
ZSgpICsgc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC8gMTAyNCwgIiBrYiwgYj0iLCBtX2JhcnJpZXJzRXhlY3V0
ZWQsICIsIG11PSIsIHNjaGVkdWxlci5jdXJyZW50RGVjaXNpb24oKS50YXJnZXRNdXRhdG9yVXRp
bGl6YXRpb24oKSwgIiAiKTsKKyAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25v
dG9uaWNUaW1lOjpub3coKSAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOworICAgICAgICAg
ICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhp
c1BhdXNlTVMpLCAiKS4uLl1cbiIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBX
ZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2Fu
IGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4g
SG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUg
Y29kZSBibG9jawotICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVh
bGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQot
ICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2
ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKLSAgICAgICAgLy8gYXQg
dGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0Mg
Z2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKLSAgICAgICAgLy8gR0MuCi0gICAgICAgIG1fY29k
ZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICBE
Rkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hv
dWxkVGVybWluYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICAvLyBU
aGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3Rv
ciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCi0gICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRo
YXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KLSAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50
cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgcmVzdW1lVGhlV29ybGQoKTsKICAgICAgICAgCisgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFy
ZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKICAgICAgICAgewotICAgICAgICAgICAgVGltaW5n
U2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNp
bmciKTsKICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRv
cik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JU
aW1lc2xpY2luZygpKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVyLnNuYXBQaGFzZSgpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFp
blJlc3VsdCBkcmFpblJlc3VsdDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gZGVjaXNpb24gPSBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkZWNpc2lvbi5zaG91bGRCZVJlc3VtZWQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VtZVRo
ZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNz
aXZlbHkoZGVjaXNpb24udGltZVRvU3RvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZHJhaW5SZXN1bHQgPT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25l
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ug
d2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2VzIG5vdCB3YW50Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNlY29uZHMgc2NoZWR1bGVkSWRsZSA9IGRlY2lzaW9uLnRpbWVUb1N0b3AoKSAt
IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0IHRoZSB2YWx1ZSBvZiBjb2xsZWN0UGVybWl0dGVk
SWRsZVJhdGlvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSwg
b3RoZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIFlvdSBjb3VsZCBldmVuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VlIGZvciBpdCBiZWluZyBncmVh
dGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUgKiBPcHRpb25zOjpjb2xsZWN0b3JQZXJtaXR0ZWRJ
ZGxlUmF0aW8oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRzIHdha2VVcExhdGVuY3kg
PSBNb25vdG9uaWNUaW1lOjpub3coKSAtIGRlY2lzaW9uLnRpbWVUb1N0b3AoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAod2FrZVVwTGF0ZW5jeSA+PSAxX21zKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJ3dWwhPSIsIHdha2VVcExhdGVuY3kubWls
bGlzZWNvbmRzKCksICIgbXMgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQg
PSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWwoZGVjaXNpb24udGltZVRvUmVzdW1lKCkpOwot
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFy
ZWREcmFpblJlc3VsdDo6RG9uZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIERpc2FibGluZyBjb2xsZWN0b3IgdGltZXNsaWNpbmcgaXMgbWVhbnQgdG8gYmUgdXNl
ZCB0b2dldGhlciB3aXRoCi0gICAgICAgICAgICAgICAgLy8gLS1jb2xsZWN0Q29udGludW91c2x5
PXRydWUgdG8gbWF4aW1pemUgdGhlIG9wcG9ydHVuaXR5IGZvciBoYXJtZnVsIHJhY2VzLgotICAg
ICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhp
cyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsKCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQ6OkRvbmUpIHsKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBzdG9wLiBC
dXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2VzIG5vdCB3YW50CisgICAgICAgICAgICAvLyB0aGF0
LgorICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gbV9zY2hlZHVsZXItPnRpbWVU
b1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICAgICAgLy8gSXQncyB0b3Rh
bGx5IHVuY2xlYXIgd2hhdCB0aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbwor
ICAgICAgICAgICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVy
IHRoYW4gMC4gWW91IGNvdWxkIGV2ZW4KKyAgICAgICAgICAgIC8vIGFyZ3VlIGZvciBpdCBiZWlu
ZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUgaXQuCisgICAgICAgICAgICBzbGVlcChz
Y2hlZHVsZWRJZGxlICogT3B0aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAi
KTsKKyAgICAgICAgCisgICAgICAgIG1fc2NoZWR1bGVyLT5kaWRTdG9wKCk7CiAgICAgfQogCiAg
ICAgewpAQCAtNjk0LDYgKzYxNSwxMiBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJs
ZSBnY1N0YXJ0CiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgp
OwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKKworICAgIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKAorICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CisgICAgICAgICAgICB3cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAg
fSk7CisgICAgICAgIAogICAgIHVwZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAg
ZW5kTWFya2luZygpOwogfQpAQCAtNzMyLDI1ICs2NTksNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNp
dENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMpOwotCi0gICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRp
dmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6
dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlz
dHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFw
OjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdf
SklUKQpAQCAtMTE2Niw4ICsxMDc0LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkK
ICAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgcmVtb3ZlRGVhZENv
bXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7
Ci0gICAgICAgIAotICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0
aW5nKHRoaXMpOworICAgIAorICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZygKKyAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgICAgIH0pOwogICAgIG1fY29kZUJsb2Nrcy0+
Y2xlYXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKICAgICAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5w
cmVwYXJlRm9yQWxsb2NhdGlvbigpOwpAQCAtMTM1NCw2ICsxMjY1LDcgQEAgdm9pZCBIZWFwOjpz
dG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICAKICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgIGhh
bmRsZU5lZWRGaW5hbGl6ZSgpOworICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiB9CiAKIGJv
b2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCBvbGRTdGF0ZSkKQEAgLTEzNjYs
NyArMTI3OCw3IEBAIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCAKICAg
ICAgICAgJiYgaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0YXRlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCi0gICAgaWYgKCEob2xkU3RhdGUgJiBzaG91bGRTdG9wQml0KSkgeworICAgIGlm
ICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYgIW1fc2NoZWR1bGVyLT5zaG91bGRTdG9w
KCkpIHsKICAgICAgICAgaWYgKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9u
ZyhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+c3RvcHBlZEJpdCk7CkBAIC0xNDM5LDYgKzEzNTEsNyBA
QCB2b2lkIEhlYXA6OmFjcXVpcmVBY2Nlc3NTbG93KCkKICAgICAgICAgaWYgKG1fd29ybGRTdGF0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHsKICAgICAgICAgICAg
IGhhbmRsZUdDRGlkSklUKCk7CiAgICAgICAgICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAg
ICAgICAgICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMTU4LDggKzIwNzEsMTQxIEBAIHZvaWQgSGVhcDo6c2V0UnVu
TG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVh
cDo6YnVpbGRDb25zdHJhaW50U2V0KCkKK3sKKyAgICBtX2NvbnN0cmFpbnRTZXQgPSBzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpOworICAgIAorICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAorICAgICAgICAiQ29uc2VydmF0aXZlIFNjYW4iLAorICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNv
bnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBtX29iamVjdFNwYWNl
LnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CisgICAgICAgICAgICBDb25zZXJ2YXRpdmVS
b290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CisgICAgICAgICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgICAgICAgICBnYXRoZXJTdGFja1Jv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMo
Y29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAg
ICAgIk1pc2MgU21hbGwgUm9vdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90Vmlz
aXRvcik7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICAgICAgbV92bS0+
c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQor
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlz
dFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwor
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIlN0
cm9uZyBIYW5kbGVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0
U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZp
c2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAg
ICAgICAgIkRlYnVnZ2VyIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCisgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9
IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAg
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisg
ICAgICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0
Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiSklUIFN0dWIgUm91dGluZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldlYWsgU2V0cyIs
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9w
YXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAg
ICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICAgICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJy
ZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVm
ZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiREZHIFdvcmtsaXN0cyIsCisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7
IGktLTspCisgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSku
dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCisgICAg
ICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgKm1f
dm0sCisgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAg
ICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisjZW5kaWYKKyAgICAKKyAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkNvZGVCbG9ja3MiLAorICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2lu
Z0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCisgICAgICAgICJNdXRhdG9yIE1hcmsgU3RhY2siLAorICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0
b3JNYXJrU3RhY2soKSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpH
cmV5ZWRCeUV4ZWN1dGlvbik7Cit9CisKIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCkKIHsKKyAgICBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKICAgICBtX2lzU2FmZVRvQ29s
bGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHko
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTcz
LDggKzczLDEwIEBAIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CitjbGFzcyBNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3Mg
U2xvdFZpc2l0b3I7Ci1jbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CitjbGFzcyBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsK
IApAQCAtMzQxLDYgKzM0Myw5IEBAIHB1YmxpYzoKICAgICAvLyBhbHJlYWR5IGJlIGNhbGxlZCBm
b3IgeW91IGF0IHRoZSByaWdodCB0aW1lcy4KICAgICB2b2lkIHN0b3BJZk5lY2Vzc2FyeSgpOwog
ICAgIAorICAgIC8vIEZJWE1FCisgICAgdm9pZCBzdG9wSWZSZXF1aXJlZEJ5U2NoZWR1bGVyKCk7
CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIga2luZCBvZiBzdG9wcGluZyBv
ZiB0aGUgY29sbGVjdG9yLCBhbmQgaXQgbWF5IHJlcXVpcmUgd2FpdGluZyBmb3IgYQogICAgIC8v
IHdoaWxlLiBUaGlzIGlzIG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQSSBmb3IgY2xpZW50cyBvZiBj
b2xsZWN0QWxsR2FyYmFnZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJlCiAgICAgLy8gaXMgbm8gR0Mg
YmVmb3JlIG9yIGFmdGVyIHRoYXQgZnVuY3Rpb24gY2FsbC4gQWZ0ZXIgY2FsbGluZyB0aGlzLCB5
b3UgYXJlIGZyZWUgdG8gc3RhcnQgR0NzCkBAIC0zNzYsNyArMzgxLDcgQEAgcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRC
bG9jazsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFNw
YWNlVGltZVNjaGVkdWxlcjsKKyAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjsKICAgICBmcmllbmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogICAgIGZyaWVuZCBj
bGFzcyBIZWFwU3RhdGlzdGljczsKICAgICBmcmllbmQgY2xhc3MgVk07CkBAIC00MTMsOSArNDE4
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1l
VGhlV29ybGQoKTsKICAgICAKLSAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOwotICAgIGZy
aWVuZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOwotICAgIAogICAgIHZvaWQgc3RvcFRoZU11
dGF0b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQ1NSw3ICs0
NTcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlzaXRDb21waWxlcldv
cmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmts
aXN0RW50cmllcygpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0
VGltZSk7CkBAIC00OTgsNiArNDk5LDE0IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CiAgICAgCiAgICAgdm9p
ZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CisgICAgCisgICAgdm9pZCBi
dWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29uc3QgRnVu
YyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3Qg
RnVuYyYpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXpl
X3QgbV9yYW1TaXplOwpAQCAtNTM0LDYgKzU0Myw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOworICAgIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0
OwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1h
cmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0
ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFs
bCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTYxNSw2ICs2MjYsOCBAQCBwcml2YXRlOgogICAg
IHNpemVfdCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRpZgogICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxNdXRhdG9yU2NoZWR1bGVyPiBtX3NjaGVkdWxlcjsKKyAgICAKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvdWxkU3RvcEJpdCA9IDF1IDw8IDB1OwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGhhc0FjY2Vzc0JpdCA9IDF1IDw8IDJ1OwpAQCAtNjMwLDYgKzY0Myw3IEBAIHBy
aXZhdGU6CiAgICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CiAgICAgYm9vbCBt
X3RocmVhZFNob3VsZFN0b3AgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90aHJlYWRJc1N0b3BwaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0YXRvckRpZFJ1biB7IHRydWUgfTsKICAgICBCb3g8
TG9jaz4gbV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+
IG1fdGhyZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMu
IEl0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4g
bV90aHJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25z
dHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBuYW1l
LAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiBmdW5jdGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX25hbWUo
V1RGTW92ZShuYW1lKSkKKyAgICAsIG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCisgICAg
LCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKK3sKK30KKworTWFya2luZ0NvbnN0cmFpbnQ6On5N
YXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0
U3RhdHMoKQoreworICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNv
bWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIFZpc2l0aW5nVGltZW91dCB2
aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOworICAg
IG1fZnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKKyAgICBkaWRWaXNpdFNvbWV0
aGluZyA9IHZpc2l0aW5nVGltZW91dC5kaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0aW5nVGlt
ZW91dC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKK2NsYXNzIFNsb3RWaXNpdG9yOwor
CitjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFy
a2luZ0NvbnN0cmFpbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGVudW0gVm9sYXRpbGl0eSB7CisgICAgICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRv
IGJlIHJlZXZhbHVhdGVkIGFueXRpbWUgdGhlIG11dGF0b3IgcmVzdW1lcyBhZnRlciB0aGUgR0Mg
aGFkCisgICAgICAgIC8vIHN0YXJ0ZWQuCisgICAgICAgIEdyZXllZEJ5UmVzdW1wdGlvbiwKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVk
IGFueXRpbWUgdGhlIG11dGF0b3IgcnVuczogc28gYXQgR0Mgc3RhcnQgYW5kCisgICAgICAgIC8v
IHdoZW5ldmVyIHRoZSBHQyByZXN1c3BlbmRzIGFmdGVyIGEgcmVzdW1wdGlvbi4gVGhpcyBpcyBh
bG1vc3QgYWx3YXlzIHNvbWV0aGluZyB0aGF0CisgICAgICAgIC8vIHlvdSdkIGNhbGwgYSAicm9v
dCIgaW4gYSB0cmFkaXRpb25hbCBHQy4KKyAgICAgICAgR3JleWVkQnlFeGVjdXRpb24sCisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBh
bnkgdGltZSBhbnkgb2JqZWN0IGlzIG1hcmtlZCBhbmQgYW55dGltZSB0aGUKKyAgICAgICAgLy8g
bXV0YXRvciByZXN1bWVzLgorICAgICAgICBHcmV5ZWRCeU1hcmtpbmcKKyAgICB9OworICAgIAor
ICAgIE1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAg
ICAgICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisg
ICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KKyAg
ICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBzaXplX3QgbGFzdFZpc2l0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CisgICAgCisgICAgdm9pZCBl
eGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1Rp
bWUgdGltZW91dCk7CisgICAgCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92b2xhdGlsaXR5OyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgorICAgIAorICAg
IHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OworICAgIENTdHJpbmcgbV9uYW1lOworICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYgdGlt
ZW91dCk+IG1fZnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6
ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0
cmFpbnRTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0IHsKK3B1YmxpYzoKKyAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJh
aW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQorICAg
ICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBk
aWRWaXNpdFNvbWV0aGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNp
dFNvbWV0aGluZzsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQo
bV90aW1lb3V0KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1l
cyBvdXQuCisgICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQpIHsKKyAgICAgICAgICAgIGV4ZWN1
dGUoaW5kZXgpOworICAgICAgICAgICAgdW5leGVjdXRlZC5jbGVhcihpbmRleCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBk
aWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5k
ZXgpOyB9CisKKyAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAg
bV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGlu
ZywgbV90aW1lb3V0KTsKKyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OworICAgIFNsb3RW
aXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CisgICAgQml0
VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2Ug
fTsKK307CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7
Cit9CisKK01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorewor
fQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3Vu
ZXhlY3V0ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuY2xl
YXJBbGwoKTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBj
b25zdHJhaW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIHN3aXRjaCAoY29uc3RyYWludC0+dm9s
YXRpbGl0eSgpKSB7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhl
Y3V0aW9uOgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkUm9vdHMuc2V0KGNvbnN0cmFpbnQtPmlu
ZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFp
bnQ6OkdyZXllZEJ5TWFya2luZzoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMu
c2V0KGNvbnN0cmFpbnQtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5UmVzdW1wdGlvbjoKKyAgICAgICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0byBleGVjdXRlIHRoaXMgb25jZSB3ZSd2ZSBleGhhdXN0ZWQgZXZlcnl0
aGluZyBlbHNlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAgICBDU3RyaW5nIG5hbWUsCisgICAgRnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlv
biwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQoreworICAg
IGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjphZGQoCisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25z
dHJhaW50KQoreworICAgIGNvbnN0cmFpbnQtPm1faW5kZXggPSBtX3NldC5zaXplKCk7CisgICAg
bV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOworfQorCitib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCit7CisgICAgLy8gQm9vdHN0cmFwIG1lYW5zIHRoYXQgd2UgaGF2ZW4n
dCBkb25lIGFueSBvYmplY3QgdmlzaXRpbmcgeWV0LiBUaGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0
bworICAgIC8vIG9ubHkgZXhlY3V0ZSByb290IGNvbnN0cmFpbnRzICh3aGljaCBhbHNvIGhhcHBl
bnMgdG8gYmUgdGhvc2UgdGhhdCB3ZSBzYXkgYXJlIGdyZXllZCBieQorICAgIC8vIHJlc3VtcHRp
b24pLCBzaW5jZSB0aGUgb3RoZXIgY29uc3RyYWludHMgYXJlIHN1cGVyIHVubGlrZWx5IHRvIHRy
aWdnZXIgd2l0aG91dCBzb21lIG9iamVjdAorICAgIC8vIHZpc2l0aW5nLiBUaGUgZXhwZWN0YXRp
b24gaXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZ28gc3RyYWlnaHQgdG8gb2JqZWN0IHZpc2l0aW5n
IGFmdGVyCisgICAgLy8gdGhpcy4KKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRl
eHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0
LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCit7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlz
LCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0
cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xl
LCB0aGVuCisgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgorICAgIGlmICghZXhl
Y3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jv
d3RocykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzdGQ6OnNvcnQoCisgICAg
ICAgIG1fc2V0LmJlZ2luKCksIG1fc2V0LmVuZCgpLAorICAgICAgICBbJl0gKGF1dG8mIGEsIGF1
dG8mIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHJldHVybiB0cnVlIGlm
IGEgc2hvdWxkIGNvbWUgYmVmb3JlIGIuCisgICAgICAgICAgICBpZiAoYS0+dm9sYXRpbGl0eSgp
ID4gYi0+dm9sYXRpbGl0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIGEtPmxhc3RWaXNpdENvdW50KCkgPiBiLT5sYXN0VmlzaXRDb3VudCgpOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2V0LnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkp
OworICAgICAgICAKKyAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFr
ZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQorICAg
ICAgICAvLyB3ZSBmaW5kIHdvcmsuIE5vbmV0aGVsZXNzLCB3ZSBvbmx5IHdhbnQgY29uc3RyYWlu
dHMgdG8gaW50ZXJydXB0IHRoZW1zZWx2ZXMgdXBvbgorICAgICAgICAvLyB0aW1lb3V0IC0gbm90
IGp1c3QgYmVjYXVzZSB0aGV5IGZvdW5kIHNvbWUgd29yay4KKyAgICAgICAgLy8gRklYTUU6IE1h
eWJlIHRoaXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5v
dCBjbGVhciBpZiB0aGF0J3MKKyAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVu
IGJldHRlciBpcyB0aGlzOgorICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBr
ZWVwIHJ1bm5pbmcuCisgICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0
IE4gdGhpbmdzLCByZXR1cm4uCisgICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4K
KyAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOworICAgIGZvciAoYXV0
byYgY29uc3RyYWludCA6IG1fc2V0KQorICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0
b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0IHsKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIH5NYXJr
aW5nQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAgIAor
ICAgIHZvaWQgYWRkKAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5p
cXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOworICAgIAorICAgIC8vIEV4ZWN1dGVzIG9ubHkg
cm9vdHMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcm9vdHMgaGF2ZSBiZWVuIGV4ZWN1dGVkLiBJdCdz
IGV4cGVjdGVkCisgICAgLy8gdGhhdCB5b3UnbGwgZG8gc29tZSBkcmFpbmluZyBhZnRlciB0aGlz
IGFuZCB0aGVuIHVzZSBleGVjdXRlQ29udmVyZ2VuY2UoKS4KKyAgICBib29sIGV4ZWN1dGVCb290
c3RyYXAoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbnN0cmFp
bnRzIHdlcmUgZXhlY3V0ZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5CisgICAg
Ly8gdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgorICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlKAorICAgICAgICBTbG90VmlzaXRvciYsCisgICAgICAgIE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFNp
bXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KKyAgICB2
b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgY2xhc3Mg
RXhlY3V0aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAg
ICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4
ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7Cisg
ICAgCisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOworICAgIEJpdFZlY3RvciBtX3Vu
ZXhlY3V0ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0Nv
bnN0cmFpbnQ+PiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJN
dXRhdG9yU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitNdXRhdG9yU2NoZWR1bGVyOjpNdXRhdG9yU2No
ZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVsZXIoKQor
eworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQoreworfQorCit2b2lkIE11
dGF0b3JTY2hlZHVsZXI6OndpbGxSZXN1bWUoKQoreworfQorCitib29sIE11dGF0b3JTY2hlZHVs
ZXI6OnNob3VsZFN0b3AoKQoreworICAgIHJldHVybiBoYXNFbGFwc2VkKHRpbWVUb1N0b3AoKSk7
Cit9CisKK2Jvb2wgTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkUmVzdW1lKCkKK3sKKyAgICByZXR1
cm4gaGFzRWxhcHNlZCh0aW1lVG9SZXN1bWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hl
ZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTXV0YXRv
clNjaGVkdWxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRvclNjaGVkdWxlcik7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7
CisgICAgICAgIE5vcm1hbCwgLy8gTm90IGNvbGxlY3RpbmcuCisgICAgICAgIFN0b3BwZWQsCisg
ICAgICAgIFJlc3VtZWQKKyAgICB9OworICAgIAorICAgIE11dGF0b3JTY2hlZHVsZXIoKTsKKyAg
ICB2aXJ0dWFsIH5NdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgdmlydHVhbCBTdGF0ZSBz
dGF0ZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db2xsZWN0aW9u
KCkgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxSZXN1bWUoKTsKKyAgICAKKyAgICB2aXJ0dWFsIE1vbm90b25pY1RpbWUgdGltZVRv
U3RvcCgpID0gMDsgLy8gQ2FsbCB3aGlsZSByZXN1bWVkLCB0byBhc2sgd2hlbiB0byBzdG9wLgor
ICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSA9IDA7IC8vIENhbGwgd2hp
bGUgc3RvcHBlZCwgdG8gYXNrIHdoZW4gdG8gcmVzdW1lLgorICAgIAorICAgIGJvb2wgc2hvdWxk
U3RvcCgpOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgc3RvcCBu
b3cuCisgICAgYm9vbCBzaG91bGRSZXN1bWUoKTsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBh
c2sgaWYgd2Ugc2hvdWxkIHJlc3VtZSBub3cuCisgICAgCisgICAgdmlydHVhbCB2b2lkIGVuZENv
bGxlY3Rpb24oKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmll
ZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZCh2b2lkKiByb290KQorICAgIGJv
b2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewogICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVy
aWVkUm9vdCkKICAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwot
ICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJv
b3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAgICAgaW50IHNpemUoKSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjEwNDMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQ3LDYgKzM0NywxMSBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNp
dG9yJiBtX3Zpc2l0b3I7CiB9OwogCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWlu
dChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0g
dHJ1ZTsKKyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewpAQCAtNDYx
LDcgKzQ2Niw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAg
ICAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7CiAgICAgCi0gICAg
d2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlz
RW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICB3aGlsZSAoIWhhc0VsYXBz
ZWQodGltZW91dCkpIHsKICAgICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBlZChsb2NrZXIpOwog
ICAgICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBt
X2NvbGxlY3RvclN0YWNrLnJlZmlsbCgpOwpAQCAtNDc2LDcgKzQ4MSw4IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICAgICAgICAgIG1faXNWaXNpdGluZ011
dGF0b3JTdGFjayA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9
IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0
b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQogICAgICAgICAgICAgICAg
IHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX3JpZ2h0VG9SdW4u
c2FmZXBvaW50KCk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CkBAIC02
MDUsMTMgKzYxMSwxMyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJv
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewogICAg
ICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1f
aGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAgbV92aXNpdENvdW50ICs9IG1f
aGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRo
ZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KICAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgogICAgIG1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICBt
X3Zpc2l0Q291bnQgKz0gbV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNTEsNiArMTUxLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmFjZShK
U0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShj
ZWxsLCByZWFzb24pKTsgfQogICAgIHZvaWQgZGlkTm90UmFjZShjb25zdCBWaXNpdFJhY2VLZXkm
KTsKICAgICB2b2lkIGRpZE5vdFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24p
IHsgZGlkTm90UmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKyAgICAKKyAgICB2
b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHJl
dmlzaW9uIDIxMDQzMykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
U2NoZWR1bGVyLmNwcDoyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitkb3VibGUgU3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAg
ICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQorICAgICAgICBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVB
dFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBkb3VibGUgbWF4SGVhZHJvb20gPQorICAgICAgICBt
X3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVs
ZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBk
b3VibGUgaGVhZHJvb21GdWxsbmVzcyA9CisgICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5
Y2xlIC8gbWF4SGVhZHJvb207CisgICAgCisgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUg
TmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAvLyBieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRl
c3RzLiBUaGlzIGNvZGUKKyAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50
IGRyYWdvbnMuCisgICAgCisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKKyAgICAg
ICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7CisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAx
KSkKKyAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7CisgICAgCisgICAgZG91YmxlIG11dGF0
b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOworICAgIAorICAgIC8vIFNjYWxl
IHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCisgICAg
bXV0YXRvclV0aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGls
aXphdGlvbigpICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAgICAgICAg
T3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAgIE9wdGlv
bnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIG11dGF0
b3JVdGlsaXphdGlvbjsKK30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246
OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMSAtIHRh
cmdldE11dGF0b3JVdGlsaXphdGlvbigpOworfQorCitTZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX25v
dyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsK
K30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7
Cit9CisKK2Jvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVk
KCkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3Qo
KSkKKyAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7
CisgICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworfQor
CitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3Vt
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7CisgICAgaWYgKE9w
dGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBtX25v
dyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIHJldHVy
biBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFy
Z2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVT
Y2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hv
dWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVG
aXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAgIHJldHVy
biBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQor
CitTcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAg
IDogbV9oZWFwKGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQorICAgICwgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkK
KyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKKyAgICAgICAgT3B0aW9u
czo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCisgICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4o
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNp
emUpKQoreworICAgIHNuYXBQaGFzZSgpOworfQorCit2b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6
c25hcFBoYXNlKCkKK3sKKyAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
Cit9CisKK1NwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpj
dXJyZW50RGVjaXNpb24oKQoreworICAgIERlY2lzaW9uIHJlc3VsdDsKKyAgICByZXN1bHQubV9z
Y2hlZHVsZXIgPSB0aGlzOworICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0g
bV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgcmVzdWx0Lm1fbm93ID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNCwxMDUgKzI0LDE0NiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRv
clV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09m
Q3ljbGUgPQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXIt
Pm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3Vi
bGUgbWF4SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVB
dFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0gICAg
ICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0gICAg
Ly8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGlu
Z3MgaWYKLSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHpl
cm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZlbmRz
IGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEoaGVh
ZHJvb21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAg
aWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9
IDE7Ci0gICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1
bGxuZXNzOwotICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8g
dGhlIHBlcm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAg
T3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0
aWxpemF0aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXph
dGlvbigpIC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24o
KSk7Ci0gICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91YmxlIFNw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotfQot
Ci1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1l
KSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9k
KCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVy
OjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uczo6
Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0g
dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRD
b2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQorLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJl
IHBhcnQgb2YgYSBoaWVyYXJjaHkgb2Ygc2NoZWR1bGVycz8gSW4gc3VjaCBhIHdvcmxkLCB3ZSB3
b3VsZAorLy8gcHJvYmFibHkgcmVwcmVzZW50IGNvbmN1cnJlbnQtR0Mtb2ZmIGFzIGEgc2NoZWR1
bGVyLiBJdCB3b3VsZCB0aGVuIGFsc28gYmUgYSBnb29kIGlkZWEgdG8ga2VlcAorLy8gdGhlIG9s
ZCBzY2hlZHVsZXIgYXJvdW5kLiBJIHdvbmRlciBpZiB3ZSBjb3VsZCBhbHNvIHNpbXVsYXRlIHRo
ZSBvbGQgc2NoZWR1bGVyJ3MgdHJlYXRtZW50IG9mCisvLyBmaXhwb2ludCBpdGVyYXRpb25zIGFu
ZCBpZGxlIHRpbWUuIFRoYXQgc291bmRzIGFubm95aW5nIGFuZCBoYXJkLCBzbyBtYXliZSB3ZSBk
b24ndCB3YW50IHRvIGdvCisvLyB0aGVyZS4KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hl
ZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAorU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlcjo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAgIDogbV9o
ZWFwKGhlYXApCisgICAgLCBtX211dGF0b3JUaW1lc2xpY2UoU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcyhPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSkpCiB7Ci0gICAgQVNTRVJUKCFzaG91
bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZp
cnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hl
ZHVsZXItPm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsg
bV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKIH0K
IAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9w
KCkgY29uc3QKK1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6On5TcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRp
b25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cg
LSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsg
bV9zY2hlZHVsZXItPm1fcGVyaW9kOwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGlt
ZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3Blcmlv
ZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1T
KCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAu
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAq
Ci0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhl
QmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwotfQot
Ci12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRpYWxU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CitNdXRhdG9yU2NoZWR1bGVyOjpTdGF0ZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rh
dGU7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9u
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IE5vcm1hbCk7CisgICAgbV9zdGF0
ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30K
Kwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAg
ICBtX3N0YXRlID0gU3RvcHBlZDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OndpbGxSZXN1bWUoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0YXRlID09IFJl
c3VtZWQpOworICAgIG1fc3RhdGUgPSBSZXN1bWVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6dGltZVRvU3RvcCgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b3JtYWw6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOworICAgIGNh
c2UgU3RvcHBlZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGNh
c2UgUmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgbV9tdXRhdG9yVGltZXNs
aWNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBNb25vdG9uaWNUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vcm1hbDoKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJldHVybiBNb25v
dG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFN0b3BwZWQ6IHsKKyAgICAgICAgZG91YmxlIGJ5
dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KKyAgICAgICAgICAgIG1faGVhcC5tX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlIC0gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OworICAgICAgICAKKyAgICAgICAgZG91YmxlIG1heEhlYWRyb29tID0KKyAgICAgICAgICAgIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUJlZ2lubmluZzsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxu
ZXNzID0KKyAgICAgICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJv
b207CisgICAgICAgIAorICAgICAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5k
IG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgorICAgICAgICAvLyBieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3Rz
LiBUaGlzIGNvZGUKKyAgICAgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2lu
dCBkcmFnb25zLgorICAgICAgICAKKyAgICAgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAw
KSkKKyAgICAgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOworICAgICAgICBpZiAoIShoZWFk
cm9vbUZ1bGxuZXNzIDw9IDEpKQorICAgICAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Cisg
ICAgICAgIAorICAgICAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29t
RnVsbG5lc3M7CisgICAgICAgIAorICAgICAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXph
dGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgICAgICBtdXRhdG9yVXRpbGl6YXRp
b24gPQorICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsK
KyAgICAgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgICAgICBPcHRp
b25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQorICAgICAgICAgICAgICAgIE9wdGlv
bnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgICAgIAorICAgICAgICAvLyBU
aGlzIHByZXNlcnZlcyB0d28gdGhpbmdzOgorICAgICAgICAvLyAtIE11dGF0b3IgZ2V0cyB0byBh
bHdheXMgcnVuIGZvciBtX211dGF0b3JUaW1lc2xpY2UuCisgICAgICAgIC8vIC0gVGhlIHJhdGlv
IGJldHdlZW4gbXV0YXRvciByZXN1bWUgdGltZSBhbmQgbXV0YXRvciBzdG9wIHRpbWUgaXMgZ292
ZXJuZWQgYXMgZm9sbG93cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgd2UgcmVzdW1lIGZv
ciB0aGlzIGFtb3VudDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEMgKiBtdXRhdG9yVXRp
bGl6YXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIHNvbWUgY29uc3RhbnQgQywgdGhl
biB3ZSBtdXN0IHN0b3AgZm9yIHRoaXMgYW1vdW50OgorICAgICAgICAvLworICAgICAgICAvLyAg
ICAgQyAqICgxIC0gbXV0YXRvclV0aWxpemF0aW9uKQorICAgICAgICAvLworICAgICAgICAvLyBJ
biBvdGhlciB3b3Jkcywgd2Ugd2FudCB0aGUgcmF0aW8gb2YgcmVzdW1lIHRpbWUgKG51bWVyYXRv
cikgdG8gc3RvcCB0aW1lIChkZW5vbWluYXRvcikKKyAgICAgICAgLy8gdG8gYmU6CisgICAgICAg
IC8vCisgICAgICAgIC8vICAgICBtdXRhdG9yVXRpbGl6YXRpb24gLyAoMSAtIG11dGF0b3JVdGls
aXphdGlvbikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHdlIHJlc3Vt
ZWQgdGhlIG11dGF0b3IgZm9yIFggdGltZSB0aGVuIHdlIHdvdWxkIGRpdmlkZSBYIGJ5IHRoZSBh
Ym92ZQorICAgICAgICAvLyBxdWFudGl0eSB0byBnZXQgdGhlIGFtb3VudCBvZiB0aW1lIHdlIHNo
b3VsZCBzdG9wIGZvci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQg
aWYgd2UgcmVzdW1lIGZvciBtX211dGF0b3JUaW1lc2xpY2UgKGFzIHRoaXMgc2NoZWR1bGVyIGFs
d2F5cyBkb2VzKQorICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCBzdG9wIGZvcjoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAgIG1fbXV0YXRvclRpbWVzbGljZSAvIChtdXRhdG9yVXRpbGl6YXRp
b24gLyAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikpCisgICAgICAgIC8vCisgICAgICAgIC8vIFdo
aWNoIHNpbXBsaWZpZXMgdG86CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBtX211dGF0b3JU
aW1lc2xpY2UgKiAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikgLyBtdXRhdG9yVXRpbGl6YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHRoZW4gaWYgd2UgZGlzdHJpYnV0ZSB3ZSBnZXQ6
CisgICAgICAgIFNlY29uZHMgc3RvcER1cmF0aW9uID0gbV9tdXRhdG9yVGltZXNsaWNlIC8gbXV0
YXRvclV0aWxpemF0aW9uIC0gbV9tdXRhdG9yVGltZXNsaWNlOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIG1fc3RhcnRUaW1lICsgc3RvcER1cmF0aW9uOworICAgIH0gfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsK
IH0KIAotU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1
cnJlbnREZWNpc2lvbigpCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmVuZENvbGxl
Y3Rpb24oKQogewotICAgIERlY2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIg
PSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworICAg
IG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuaAkocmV2aXNpb24gMjEwNDMzKQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaDoyMTA0MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEhlYXA7CisKK2NsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgY2xhc3Mg
RGVjaXNpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KKyAgICAgICAgCisgICAgICAgIGRvdWJs
ZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgZG91YmxlIHRhcmdl
dENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNlY29uZHMgZWxhcHNlZElu
UGVyaW9kKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OworICAgICAgICBi
b29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVU
b1Jlc3VtZSgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBjb25z
dDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGlt
ZVNjaGVkdWxlcjsKKworICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsg
bnVsbHB0ciB9OworICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAg
fTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKKyAgICB9OworICAgIAorICAgIC8vIENv
bnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgorICAgIFNw
YWNlVGltZVNjaGVkdWxlcihIZWFwJik7CisgICAgCisgICAgLy8gRm9yY2VzIHRoZSBuZXh0IHBo
YXNlIHRvIHN0YXJ0IG5vdy4KKyAgICB2b2lkIHNuYXBQaGFzZSgpOworICAgIAorICAgIC8vIFJl
dHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3aGlj
aCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKKyAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIgaXMg
bGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgorICAgIERlY2lzaW9uIGN1
cnJlbnREZWNpc2lvbigpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRGVjaXNp
b247CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2Vjb25kcyBtX3BlcmlvZDsKKyAgICBkb3Vi
bGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIGRvdWJsZSBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7CisgICAgTW9ub3RvbmljVGltZSBtX2lu
aXRpYWxUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJ
KHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsNDMgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgIk11
dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSGVhcDsKIAotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKKy8vIFRo
ZSBKU0MgY29uY3VycmVudCBHQyBzb21ldGltZXMgc3RvcHMgdGhlIHdvcmxkIGluIG9yZGVyIHRv
IHN0YXkgYWhlYWQgb2YgaXQuIFRoZXNlIGRlbGliZXJhdGUsCisvLyBzeW50aGV0aWMgcGF1c2Vz
IGVuc3VyZSB0aGF0IHRoZSBHQyB3b24ndCBoYXZlIHRvIGRvIG9uZSBodWdlIHBhdXNlIGluIG9y
ZGVyIHRvIGNhdGNoIHVwIHRvIHRoZQorLy8gcmV0cmVhdGluZyB3YXZlZnJvbnQuIFRoZSBzY2hl
ZHVsZXIgaXMgY2FsbGVkICJzcGFjZS10aW1lIiBiZWNhdXNlIGl0IGxpbmtzIHRoZSBhbW91bnQg
b2YgdGltZQorLy8gdGhhdCB0aGUgd29ybGQgaXMgcGF1c2VkIGZvciB0byB0aGUgYW1vdW50IG9m
IHNwYWNlIHRoYXQgdGhlIHdvcmxkIGFsbG9jYXRlZCBzaW5jZSB0aGUgR0MgY3ljbGUKKy8vIGJl
Z2FuLgorCitjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyIDogcHVibGljIE11dGF0b3JT
Y2hlZHVsZXIgewogcHVibGljOgotICAgIGNsYXNzIERlY2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1
bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9u
KCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNv
bnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0OwotICAgICAgICBk
b3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25z
dDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKLSAgICAgICAg
TW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7Ci0KLSAgICAgICAgU3Bh
Y2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKLSAgICAgICAgZG91Ymxl
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Ci0gICAgICAgIE1vbm90b25pY1RpbWUg
bV9ub3c7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0
aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOwot
ICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cuCi0gICAgdm9p
ZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1
cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFz
Ci0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxl
ZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsKKyAgICBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyKEhlYXAmKTsKKyAgICB+U3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisg
ICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRpZFN0
b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAg
ICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1l
IHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigp
IG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGVjaXNpb247Ci0K
ICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25kcyBtX3BlcmlvZDsKKyAgICBTZWNvbmRzIG1f
bXV0YXRvclRpbWVzbGljZTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgTm9ybWFsIH07CiAgICAgZG91
YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKICAgICBkb3VibGUg
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9p
bml0aWFsVGltZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nw
YWNlVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCi0K
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1kb3VibGUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29u
c3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQotICAgICAgICBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgbWF4SGVhZHJvb20gPQot
ICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0g
bV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAg
ICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0gICAgICAgIGJ5dGVzU2luY2VCZWdp
bm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0gICAgLy8gaGVhZHJvb21GdWxsbmVz
cyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKLSAgICAvLyBieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGlu
IGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0
aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAw
KSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAgaWYgKCEoaGVhZHJvb21GdWxs
bmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Ci0gICAgCi0gICAgZG91
YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOwotICAgIAotICAg
IC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5k
b3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAgT3B0aW9uczo6bWluaW11bU11
dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAotICAg
ICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KLSAgICAgICAg
ICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Ci0gICAgCi0gICAgcmV0
dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotfQotCi1TZWNvbmRzIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5t
X3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+
bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxk
QmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVz
dW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxp
emF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlv
bigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRp
bWVUb1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7Ci0g
ICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJl
dHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwot
ICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVy
aW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLX0KLQotTW9ub3RvbmljVGltZSBT
cGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91
bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2Qo
KSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwot
ICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVy
aW9kOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBo
ZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQotICAgICwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKLSAgICAg
ICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAgICAgIHN0ZDo6bWF4
PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1f
bWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwotfQotCi12b2lkIFNwYWNlVGltZVNj
aGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2No
ZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQotewotICAgIERlY2lzaW9uIHJlc3VsdDsKLSAgICBy
ZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1f
bm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBIZWFwOwotCi1jbGFz
cyBTcGFjZVRpbWVTY2hlZHVsZXIgewotcHVibGljOgotICAgIGNsYXNzIERlY2lzaW9uIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRv
clV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGls
aXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0
OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9vbCBzaG91bGRCZVJl
c3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25z
dDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Ci0gICAgICAgIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7Ci0K
LSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKLSAg
ICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Ci0gICAgICAgIE1v
bm90b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHNj
aGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFjZVRpbWVTY2hlZHVs
ZXIoSGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBu
b3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgc25hcHNo
b3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxp
ZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBo
YXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24o
KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERlY2lzaW9uOwotCi0gICAgSGVh
cCYgbV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1N5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
KCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUgU3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7
Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpiZWdp
bkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gTm9ybWFsKTsK
KyAgICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHJldHVybiBt
X3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkgOiBNb25vdG9uaWNU
aW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0g
Tm9ybWFsID8gTW9ub3RvbmljVGltZTo6bm93KCkgOiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
OworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6ZW5k
Q29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkKTsK
KyAgICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBKU0Mg
Y29uY3VycmVudCBHQyByZWxpZXMgb24gc3RvcHBpbmcgdGhlIHdvcmxkIHRvIHN0YXkgYWhlYWQg
b2YgdGhlIHJldHJlYXRpbmcgd2F2ZWZyb250LgorLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBz
YW1lIEFQSSBjYW4gYmUgcmV1c2VkIHRvIGltcGxlbWVudCBhIG5vbi1jb25jdXJyZW50IEdDIG1v
ZGUsIHdoaWNoIHdlCisvLyB1c2Ugb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUg
R0MncyBhdG9taWNpdHkgcHJvdG9jb2xzLiBUaGF0IG1lYW5zIGFueXRoaW5nIG90aGVyCisvLyB0
aGFuIFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMgc2NoZWR1bGVyIGlzIGEgZHJvcC1pbiByZXBsYWNl
bWVudCBmb3IgdGhlIGNvbmN1cnJlbnQgR0MncworLy8gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3VtZSB0aGUgd29ybGQgb25jZSB0aGUgR0Mg
Y3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgflN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAg
ICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9u
aWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZW5kQ29sbGVj
dGlvbigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
VmlzaXRpbmdUaW1lb3V0IHsKK3B1YmxpYzoKKyAgICBWaXNpdGluZ1RpbWVvdXQoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBi
b29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAgICAgIDog
bV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKKyAgICAgICAgLCBtX3Zpc2l0
Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCisgICAgICAgICwgbV90aW1lb3V0KHRp
bWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlz
aXRTb21ldGhpbmcgfHwgdmlzaXRvci52aXNpdENvdW50KCkgPiBtX3Zpc2l0Q291bnRCZWZvcmU7
CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9y
KSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wg
bV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudEJl
Zm9yZSB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0aWMgdm9p
ZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICBpZiAoV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVz
KCkgPCA0KSB7CiAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSA9
IDAuNjsKICAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSA9IDEuNDsK
LSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSA9IDEwOworICAgICAgICBP
cHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSA9IDU7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwMSw3ICsyMDEsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGRvdWJsZSwgbWluaW11bU11dGF0b3JVdGlsaXphdGlvbiwgMCwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDAuNywgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbmN1cnJlbnRHQ01heEhlYWRyb29tLCAxLjUsIE5v
cm1hbCwgbnVsbHB0cikgXAotICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NQZXJpb2RNUywgMiwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihkb3VibGUsIG11dGF0b3JUaW1lc2xpY2VNUywgMSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJz
dCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBjb2xsZWN0b3JQZXJt
aXR0ZWRJZGxlUmF0aW8sIDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJi
bGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298216</attachid>
            <date>2017-01-06 11:17:12 -0800</date>
            <delta_ts>2017-01-06 15:18:28 -0800</delta_ts>
            <desc>seems to work sorta</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>130598</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVuYyhjb2RlQmxv
Y2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICsz
NTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29k
ZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2Nr
cyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lk
IFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5s
b2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0
b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0
YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21w
aWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0
aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAg
IHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBG
dW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQog
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsxMTIsNiBAQCBi
b29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xk
Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmco
SGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVj
dXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhl
Y3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8vIEFkZCBhbGwg
Y3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVkIHNldCB0byBi
ZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9uLgotICAgIHZv
aWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAgIHZvaWQgY2xl
YXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTG9ja0hv
bGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcsOSBAQCBwdWJs
aWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2
aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQg
aXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAg
IC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKLSAgICAgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYpOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1ICs2MCwzMCBA
QCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50
bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxv
Y2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSw0MiBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBl
bmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwordm9pZCBIZWFw
Ojphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQoreworICAgIGJvb2wgb2sgPSB0cnVlOwor
ICAgIAorICAgIGlmICghbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewor
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogU2hhcmVkIGNvbGxlY3RvciBtYXJrIHN0YWNrIG5vdCBl
bXB0eSEgSXQgaGFzICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxl
bWVudHMuXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhTG9nKCJG
QVRBTDogU2hhcmVkIG11dGF0b3IgbWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBlbGVtZW50cy5cbiIpOworICAgICAgICBv
ayA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKIHZv
aWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIFRpbWlu
Z1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhw
b2ludCIpOwpAQCAtNTYwLDEzMyArNTY2LDc4IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQo
ZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAotICAg
IFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWludFNl
dC0+cmVzZXRTdGF0cygpOworICAgIAorICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24o
KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXItPmxvZygp
OworCisgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQm9vdHN0cmFwKHNsb3RWaXNpdG9yLCBt
X3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOworCisgICAgLy8gQWZ0ZXIgdGhpcywgd2Ugd2ls
bCBhbG1vc3QgY2VydGFpbmx5IGZhbGwgdGhyb3VnaCBhbGwgb2YgdGhlICJzbG90VmlzaXRvci5p
c0VtcHR5KCkiCisgICAgLy8gY2hlY2tzIGJlY2F1c2UgYm9vdHN0cmFwIHdvdWxkIGhhdmUgcHV0
IHRoaW5ncyBpbnRvIHRoZSB2aXNpdG9yLiBTbywgd2Ugc2hvdWxkIGZhbGwKKyAgICAvLyB0aHJv
dWdoIHRvIGRyYWluaW5nLgogICAgIAogICAgIGZvciAodW5zaWduZWQgaXRlcmF0aW9uID0gMTsg
OyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAg
ICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOwotICAgICAgICB7Ci0gICAgICAgICAg
ICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFy
a1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKLSAgICAgICAgICAgIENvbnNlcnZhdGl2
ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAgICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgICAgIGdhdGhlclN0YWNr
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8v
IE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4
cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKLSAgICAgICAgLy8gYWxsIG9mIHRoZW0uCi0j
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dCgqbV92bSwgc2xvdFZpc2l0b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkp
Ci0gICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNs
b3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3By
b3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHBhaXIua2V5KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBt
X21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6
bWFya0xpc3RzKHNsb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwot
ICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9u
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRp
b24oKSkgeworICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNp
dG9yKTsKLSAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7Ci0KLSNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBz
YW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAgICAg
ICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOwot
ICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOwotICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRv
cik7CisgICAgICAgICAgICBib29sIGV4ZWN1dGVkRXZlcnl0aGluZyA9CisgICAgICAgICAgICAg
ICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIG1fc2No
ZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgICAgICAgICBpZiAoZXhlY3V0ZWRFdmVyeXRo
aW5nICYmIHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFzc2VydFNo
YXJlZE1hcmtTdGFja3NFbXB0eSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQotICAgICAgICAgICAgbV92
bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VN
YXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIHNsb3RWaXNpdG9yLm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwotCi0gICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygp
OwotICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCBzbG90VmlzaXRvcik7Ci0gICAg
ICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gc2xvdFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgICAgICB7CisgICAgICAgICAgICBQYXJhbGxl
bE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2xvdFZpc2l0
b3IuZHJhaW5JblBhcmFsbGVsKG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBtX3NjaGVkdWxlci0+d2ls
bFJlc3VtZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgp
LCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0b3IubXV0YXRvck1h
cmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC8gMTAy
NCwgIiBrYiwgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNjaGVkdWxlci5jdXJy
ZW50RGVjaXNpb24oKS50YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSwgIiAiKTsKKyAgICAgICAg
ICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3RvcFRp
bWUpLm1pbGxpc2Vjb25kcygpOworICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VN
UywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2Vy
dmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQot
ICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJl
IHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawotICAgICAgICAvLyBzbyB0
aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywg
dGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQotICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAt
IG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3
YW50IHRvIGRvIHRoaXMKLSAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRo
aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQK
LSAgICAgICAgLy8gR0MuCi0gICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVu
dGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92
bSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNr
cyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3RvciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQp
Ci0gICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRoYXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4K
LSAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0
b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFu
ZGxlczpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgcmVzdW1lVGhlV29ybGQoKTsKICAgICAg
ICAgCisgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsK
ICAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JUaW1lc2xpY2luZygpKSB7Ci0gICAgICAgICAg
ICAgICAgc2NoZWR1bGVyLnNuYXBQaGFzZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKLSAgICAg
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZGVjaXNpb24gPSBzY2hl
ZHVsZXIuY3VycmVudERlY2lzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpc2lv
bi5zaG91bGRCZVJlc3VtZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRT
Y29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBz
bG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoZGVjaXNpb24udGltZVRvU3RvcCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgPT0gU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNj
aGVkdWxlciBkb2VzIG5vdCB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29uZHMgc2NoZWR1bGVk
SWRsZSA9IGRlY2lzaW9uLnRpbWVUb1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0
IHRoZSB2YWx1ZSBvZiBjb2xsZWN0UGVybWl0dGVkSWRsZVJhdGlvCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSwgb3RoZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3Jl
YXRlciB0aGFuIDAuIFlvdSBjb3VsZCBldmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFyZ3VlIGZvciBpdCBiZWluZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUg
aXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUg
KiBPcHRpb25zOjpjb2xsZWN0b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWNvbmRzIHdha2VVcExhdGVuY3kgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIGRl
Y2lzaW9uLnRpbWVUb1N0b3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2Fr
ZVVwTGF0ZW5jeSA+PSAxX21zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJ3dWwhPSIsIHdha2VVcExhdGVuY3kubWlsbGlzZWNvbmRzKCksICIgbXMgIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxs
ZWwoZGVjaXNpb24udGltZVRvUmVzdW1lKCkpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGRy
YWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIERpc2FibGluZyBjb2xsZWN0b3Ig
dGltZXNsaWNpbmcgaXMgbWVhbnQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCi0gICAgICAgICAg
ICAgICAgLy8gLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUgdG8gbWF4aW1pemUgdGhlIG9wcG9y
dHVuaXR5IGZvciBoYXJtZnVsIHJhY2VzLgotICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxk
U2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IuZHJhaW5JblBhcmFsbGVsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBkcmFp
blJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxl
ci0+dGltZVRvU3RvcCgpKTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChkcmFpblJlc3VsdCA9
PSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNjaGVkdWxlciBkb2Vz
IG5vdCB3YW50CisgICAgICAgICAgICAvLyB0aGF0LgorICAgICAgICAgICAgU2Vjb25kcyBzY2hl
ZHVsZWRJZGxlID0gbV9zY2hlZHVsZXItPnRpbWVUb1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5IHVuY2xlYXIgd2hhdCB0aGUgdmFsdWUg
b2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbworICAgICAgICAgICAgLy8gc2hvdWxkIGJlLCBv
dGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4gWW91IGNvdWxkIGV2ZW4KKyAg
ICAgICAgICAgIC8vIGFyZ3VlIGZvciBpdCBiZWluZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxk
IHR1bmUgaXQuCisgICAgICAgICAgICBzbGVlcChzY2hlZHVsZWRJZGxlICogT3B0aW9uczo6Y29s
bGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICAgICAgCisgICAgICAgIG1fc2No
ZWR1bGVyLT5kaWRTdG9wKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKKyAgICAgICAgICAgIG1fc2NoZWR1bGVyLT5sb2coKTsKICAgICB9CisgICAgCisgICAgbV9z
Y2hlZHVsZXItPmVuZENvbGxlY3Rpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNjk0LDYgKzY0NSwxMiBAQCB2b2lk
IEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgIG1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICBtX2hlbHBlckNsaWVudC5m
aW5pc2goKTsKKworICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKAor
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgICAgIAogICAgIHVwZGF0ZU9iamVj
dENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgZW5kTWFya2luZygpOwogfQpAQCAtNzMyLDI1ICs2
ODksNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVk
ID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9v
dHMpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVy
ZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmts
aXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVu
dHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtODUwLDggKzc4OCw3IEBAIHZvaWQg
SGVhcDo6ZW5kTWFya2luZygpCiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3Bh
cmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAK
LSAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHko
KSk7CisgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1h
cmtpbmcoKTsKQEAgLTExNjYsOCArMTEwMywxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVh
ZCgpCiAgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURl
YWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dlZXBl
cigpOwotICAgICAgICAKLSAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKTsKKyAgICAKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlF
eGVjdXRpbmcoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIHdyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgICAgICB9KTsKICAgICBtX2NvZGVCbG9j
a3MtPmNsZWFyQ3VycmVudGx5RXhlY3V0aW5nKCk7CiAgICAgICAgIAogICAgIG1fb2JqZWN0U3Bh
Y2UucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKQEAgLTEzNTQsNiArMTI5NCw3IEBAIHZvaWQgSGVh
cDo6c3RvcElmTmVjZXNzYXJ5U2xvdygpCiAgICAgCiAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAg
ICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogfQog
CiBib29sIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQgb2xkU3RhdGUpCkBAIC0x
MzY2LDcgKzEzMDcsNyBAQCBib29sIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQg
CiAgICAgICAgICYmIGhhbmRsZU5lZWRGaW5hbGl6ZShvbGRTdGF0ZSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAotICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkpIHsKKyAg
ICBpZiAoIShvbGRTdGF0ZSAmIHNob3VsZFN0b3BCaXQpICYmICFtX3NjaGVkdWxlci0+c2hvdWxk
U3RvcCgpKSB7CiAgICAgICAgIGlmICghKG9sZFN0YXRlICYgc3RvcHBlZEJpdCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VT
dHJvbmcob2xkU3RhdGUsIG9sZFN0YXRlICYgfnN0b3BwZWRCaXQpOwpAQCAtMTQzOSw2ICsxMzgw
LDcgQEAgdm9pZCBIZWFwOjphY3F1aXJlQWNjZXNzU2xvdygpCiAgICAgICAgIGlmIChtX3dvcmxk
U3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgbmV3U3RhdGUpKSB7CiAgICAgICAg
ICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgICAgICAgICAgaGFuZGxlTmVlZEZpbmFsaXplKCk7
CisgICAgICAgICAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjE1OCw4ICsyMTAwLDE1MCBAQCB2b2lkIEhlYXA6OnNl
dFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2b2lk
IEhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCgpCit7CisgICAgbV9jb25zdHJhaW50U2V0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKTsKKyAgICAKKyAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9v
YmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29u
c2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0
aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0
YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1
ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFw
cGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCisgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAobV92bS0+
c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAg
ICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9w
cm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQocGFpci5rZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9tYXJrTGlz
dFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Zt
LT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29u
c3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAorICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAorICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAg
ICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
KyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlm
aWVkU3RhY2tUcmFjZXMoKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNp
dChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGlu
ZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9m
aWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkpzciIsICJKSVQgU3R1YiBS
b3V0aW5lcyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJh
Y2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBN
YXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAorICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKKyAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0
b3JzKQorICAgICAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lm
TmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2Uudmlz
aXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiV3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAorICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICAgICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhz
bG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5
ZWRCeU1hcmtpbmcpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAorICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGkt
LTspCisgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlz
aXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCisgICAgICAg
ICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgKm1fdm0s
CisgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
REZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisjZW5kaWYKKyAgICAKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAorICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNv
bnN0cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgorICAgICAgICAgICAgICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWQoY29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5T2xkT3JCbGFjaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9j
ayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCisgICAgICAgICJNbXMiLCAiTXV0YXRvciBNYXJrIFN0YWNrIiwKKyAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgICAgIC8vIEluZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQg
d29yayEKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChtX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fbXV0YXRvck1h
cmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAg
ICAgICB9LAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKK30KKwogdm9pZCBI
ZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogeworICAgIGJ1aWxkQ29uc3RyYWludFNldCgp
OworICAgIAogICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0
aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMDksIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNzMsOCArNzMsMTAgQEAgY2xhc3MgSlNWYWx1ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3Mg
TWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKK2NsYXNz
IE11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTbG90VmlzaXRvcjsKLWNsYXNzIFNwYWNlVGltZVNj
aGVkdWxlcjsKK2NsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZO
ZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0zNDEsNiArMzQzLDkgQEAgcHVibGljOgog
ICAgIC8vIGFscmVhZHkgYmUgY2FsbGVkIGZvciB5b3UgYXQgdGhlIHJpZ2h0IHRpbWVzLgogICAg
IHZvaWQgc3RvcElmTmVjZXNzYXJ5KCk7CiAgICAgCisgICAgLy8gRklYTUUKKyAgICB2b2lkIHN0
b3BJZlJlcXVpcmVkQnlTY2hlZHVsZXIoKTsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgbXVjaCBz
dHJvbmdlciBraW5kIG9mIHN0b3BwaW5nIG9mIHRoZSBjb2xsZWN0b3IsIGFuZCBpdCBtYXkgcmVx
dWlyZSB3YWl0aW5nIGZvciBhCiAgICAgLy8gd2hpbGUuIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBs
ZWdhY3kgQVBJIGZvciBjbGllbnRzIG9mIGNvbGxlY3RBbGxHYXJiYWdlIHRoYXQgZXhwZWN0IHRo
YXQgdGhlcmUKICAgICAvLyBpcyBubyBHQyBiZWZvcmUgb3IgYWZ0ZXIgdGhhdCBmdW5jdGlvbiBj
YWxsLiBBZnRlciBjYWxsaW5nIHRoaXMsIHlvdSBhcmUgZnJlZSB0byBzdGFydCBHQ3MKQEAgLTM3
Niw3ICszODEsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90Vmlz
aXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBj
bGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVu
ZCBjbGFzcyBWTTsKQEAgLTQxMyw5ICs0MTgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRo
ZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJl
c3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
Ci0gICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0
YXRvcigpOwogICAgIApAQCAtNDU1LDcgKzQ1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRo
ZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5n
KCk7Ci0gICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7
CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZv
aWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVP
YmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ5OCw2ICs0OTksMTYgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RT
bG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29s
IHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdm9pZCBhc3NlcnRT
aGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1NDUsOCBAQCBwcml2YXRl
OgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1h
cmtTdGFjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+
IG1fY29uc3RyYWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
ICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02MTUsNiArNjI4LDgg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRlcm5hbE1lbW9yeVNpemUgeyAwIH07CiAjZW5k
aWYKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRvclNjaGVkdWxlcj4gbV9zY2hlZHVs
ZXI7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3VsZFN0b3BCaXQgPSAxdSA8
PCAwdTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RvcHBlZEJpdCA9IDF1IDw8IDF1Owog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNBY2Nlc3NCaXQgPSAxdSA8PCAydTsKQEAgLTYz
MCw2ICs2NDUsNyBAQCBwcml2YXRlOgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsg
MCB9OwogICAgIGJvb2wgbV90aHJlYWRTaG91bGRTdG9wIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX211dGF0b3JEaWRSdW4geyB0
cnVlIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBu
b3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxB
dXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAor
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2FiYnJldmlhdGVkTmFt
ZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAsIG1f
ZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRp
bGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0
cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDog
bV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQorICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
CisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQoreworfQorCitN
YXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1l
KCkpOworICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIHRpbWVvdXQpOworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZp
c2l0aW5nVGltZW91dCk7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQu
ZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBWb2xhdGlsaXR5IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGludHJvZHVjZSBhIG5ldyBraW5kIG9mIHZvbGF0
aWxpdHkgY2FsbGVkIEdyZXllZEJ5UmVzdW1wdGlvbiwgd2hpY2gKKyAgICAgICAgLy8gd291bGQg
bWVhbiBydW5uaW5nIGFsbCBvZiB0aGUgdGltZXMgdGhhdCBHcmV5ZWRCeUV4ZWN1dGlvbiBydW5z
IGV4Y2VwdCBhcyBhIHJvb3QgaW4gYQorICAgICAgICAvLyBmdWxsIEdDLgorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55dGltZSB0
aGUgbXV0YXRvciBydW5zOiBzbyBhdCBHQyBzdGFydCBhbmQKKyAgICAgICAgLy8gd2hlbmV2ZXIg
dGhlIEdDIHJlc3VzcGVuZHMgYWZ0ZXIgYSByZXN1bXB0aW9uLiBUaGlzIGlzIGFsbW9zdCBhbHdh
eXMgc29tZXRoaW5nIHRoYXQKKyAgICAgICAgLy8geW91J2QgY2FsbCBhICJyb290IiBpbiBhIHRy
YWRpdGlvbmFsIEdDLgorICAgICAgICBHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueSB0aW1lIGFu
eSBvYmplY3QgaXMgbWFya2VkIGFuZCBhbnl0aW1lIHRoZQorICAgICAgICAvLyBtdXRhdG9yIHJl
c3VtZXMuCisgICAgICAgIEdyZXllZEJ5TWFya2luZworICAgIH07CisgICAgCisgICAgTWFya2lu
Z0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiwKKyAgICAgICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgTWFya2luZ0NvbnN0
cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisg
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IFZvbGF0aWxpdHkpOworICAgIAorICAgIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIGNv
bnN0IGNoYXIqIGFiYnJldmlhdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJicmV2aWF0ZWRO
YW1lLmRhdGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisgICAgc2l6
ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQor
ICAgIAorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRo
aW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgfQorICAgIAor
ICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworICAgIH0KKyAgICAKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX3ZvbGF0aWxpdHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCisgICAgCisgICAgdW5z
aWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFt
ZTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAg
ICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1fbGFzdFZp
c2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIK
KworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDo6RXhlY3V0aW9uQ29udGV4dCB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJr
aW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZGlkVmlzaXRTb21ldGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkVGltZU91
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBo
YXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgZmFsc2Ug
aWYgaXQgdGltZXMgb3V0LgorICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7CisgICAgICAg
ICAgICBleGVjdXRlKGluZGV4KTsKKyAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgp
OworICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0
ZWQuZ2V0KGluZGV4KTsgfQorCisgICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICB7
CisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlz
aXRTb21ldGhpbmcsIG1fdGltZW91dCk7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsK
KyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0
OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGlu
ZyB7IGZhbHNlIH07Cit9OworCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFp
bnRTZXQoKQoreworfQorCitNYXJraW5nQ29uc3RyYWludFNldDo6fk1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6cmVzZXRTdGF0cygpCit7
CisgICAgbV91bmV4ZWN1dGVkUm9vdHMuY2xlYXJBbGwoKTsKKyAgICBtX3VuZXhlY3V0ZWRPdXRn
cm93dGhzLmNsZWFyQWxsKCk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpIHsK
KyAgICAgICAgY29uc3RyYWludC0+cmVzZXRTdGF0cygpOworICAgICAgICBzd2l0Y2ggKGNvbnN0
cmFpbnQtPnZvbGF0aWxpdHkoKSkgeworICAgICAgICBjYXNlIE1hcmtpbmdDb25zdHJhaW50OjpH
cmV5ZWRCeUV4ZWN1dGlvbjoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNldChjb25z
dHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmc6CisgICAgICAgICAgICBtX3VuZXhlY3V0ZWRP
dXRncm93dGhzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICBGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLAorICAg
IE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAgYWRkKHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwor
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgRnVuY3Rpb248ZG91Ymxl
KFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1h
dGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKK3sKKyAgICBjb25zdHJhaW50LT5tX2luZGV4ID0gbV9zZXQuc2l6ZSgpOworICAgIG1fb3Jk
ZXJlZC5hcHBlbmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgaWYgKGNvbnN0cmFpbnQtPnZvbGF0
aWxpdHkoKSA9PSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKQorICAgICAgICBt
X291dGdyb3d0aHMuYXBwZW5kKGNvbnN0cmFpbnQuZ2V0KCkpOworICAgIG1fc2V0LmFwcGVuZChX
VEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQoreworICAgIC8vIEJvb3RzdHJhcCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgZG9uZSBhbnkgb2Jq
ZWN0IHZpc2l0aW5nIHlldC4gVGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAgICAvLyBvbmx5
IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyAod2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHRob3Nl
IHRoYXQgd2Ugc2F5IGFyZSBncmV5ZWQgYnkKKyAgICAvLyByZXN1bXB0aW9uKSwgc2luY2UgdGhl
IG90aGVyIGNvbnN0cmFpbnRzIGFyZSBzdXBlciB1bmxpa2VseSB0byB0cmlnZ2VyIHdpdGhvdXQg
c29tZSBvYmplY3QKKyAgICAvLyB2aXNpdGluZy4gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhl
IGNhbGxlciB3aWxsIGdvIHN0cmFpZ2h0IHRvIG9iamVjdCB2aXNpdGluZyBhZnRlcgorICAgIC8v
IHRoaXMuCisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzLCB2aXNp
dG9yLCB0aW1lb3V0KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxv
ZygiYm9vdDoiKTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91
bmV4ZWN1dGVkUm9vdHMpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRh
TG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCit7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBk
YXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9u
b3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29u
dGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCisgICAgICAgIGRhdGFMb2coImNvbnZlcmdlOiIpOworCisgICAgLy8gSWYgdGhlcmUg
YXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJp
bmcgdGhpcyBjeWNsZSwgdGhlbgorICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4K
KyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5l
eGVjdXRlZE91dGdyb3d0aHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYm9v
bCBpc1dhdmVmcm9udEFkdmFuY2luZyA9IGZhbHNlOworICAgIGZvciAoTWFya2luZ0NvbnN0cmFp
bnQqIG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3RocykgeworICAgICAgICBpZiAob3V0Z3Jvd3RoLT53
b3JrRXN0aW1hdGUodmlzaXRvcikpIHsKKyAgICAgICAgICAgIGlzV2F2ZWZyb250QWR2YW5jaW5n
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHN0ZDo6c29ydCgKKyAgICAgICAgbV9vcmRlcmVkLmJlZ2luKCksIG1fb3JkZXJlZC5lbmQoKSwK
KyAgICAgICAgWyZdIChNYXJraW5nQ29uc3RyYWludCogYSwgTWFya2luZ0NvbnN0cmFpbnQqIGIp
IC0+IGJvb2wgeworICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHJldHVybiB0cnVlIGlmIGEgc2hv
dWxkIGNvbWUgYmVmb3JlIGIuCisgICAgICAgICAgICBpZiAoYS0+dm9sYXRpbGl0eSgpICE9IGIt
PnZvbGF0aWxpdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1dhdmVmcm9udEFkdmFuY2lu
ZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0
aWxpdHkoKTsgLy8gR3JleWVkQnlNYXJraW5nIHNob3VsZCBjb21lIGJlZm9yZSBHcmV5ZWRCeUV4
ZWN1dGlvbi4KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhLT52b2xhdGlsaXR5KCkgPCBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXllZEJ5RXhlY3V0aW9u
IHNob3VsZCBjb21lIGJlZm9yZSBHcmV5ZWRCeU1hcmtpbmcuCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBhLT53b3JrRXN0aW1hdGUodmlzaXRvcikgPiBi
LT53b3JrRXN0aW1hdGUodmlzaXRvcik7CisgICAgICAgIH0pOworICAgIAorICAgIGZvciAoTWFy
a2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKKyAgICAgICAgc2l6ZV90
IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBl
eGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7CisgICAgICAgIAorICAgICAgICAvLyBPbmNlIHdl
J3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBt
YXJraW5nIGhhcHBlbiBhbnl0aW1lCisgICAgICAgIC8vIHdlIGZpbmQgd29yay4gTm9uZXRoZWxl
c3MsIHdlIG9ubHkgd2FudCBjb25zdHJhaW50cyB0byBpbnRlcnJ1cHQgdGhlbXNlbHZlcyB1cG9u
CisgICAgICAgIC8vIHRpbWVvdXQgLSBub3QganVzdCBiZWNhdXNlIHRoZXkgZm91bmQgc29tZSB3
b3JrLgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29u
c3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncworICAgICAgICAvLyBi
ZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6CisgICAgICAgIC8vIC0g
SWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KKyAgICAgICAgLy8gLSBJZiB0
aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KKyAgICAgICAgLy8g
LSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgorICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5k
aWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBib29sIGRpZFZpc2l0U29tZXRo
aW5nID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCisgICAgICAg
IGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBk
YXRhTG9nKCIgIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFp
bnRTZXQoKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB2b2lkIHJl
c2V0U3RhdHMoKTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICBNYXJraW5n
Q29uc3RyYWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9pZCBhZGQoCisgICAgICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAg
ICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9w
dHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAgICAvLyBFeGVjdXRlcyBvbmx5IHJvb3Rz
LiBSZXR1cm5zIHRydWUgaWYgYWxsIHJvb3RzIGhhdmUgYmVlbiBleGVjdXRlZC4gSXQncyBleHBl
Y3RlZAorICAgIC8vIHRoYXQgeW91J2xsIGRvIHNvbWUgZHJhaW5pbmcgYWZ0ZXIgdGhpcyBhbmQg
dGhlbiB1c2UgZXhlY3V0ZUNvbnZlcmdlbmNlKCkuCisgICAgYm9vbCBleGVjdXRlQm9vdHN0cmFw
KFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25zdHJhaW50cyB3
ZXJlIGV4ZWN1dGVkLiBUaGlzIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeQorICAgIC8vIHZp
c2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KKyAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZSgKKyAgICAgICAgU2xvdFZpc2l0b3ImLAorICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCisgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgCitwcml2YXRlOgorICAgIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgCisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KTsKKyAgICAKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3Rvbmlj
VGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZyk7CisgICAgCisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3Rz
OworICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKKyAgICBWZWN0b3I8TWFya2lu
Z0NvbnN0cmFpbnQqPiBtX29yZGVyZWQ7CisgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4g
bV9vdXRncm93dGhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk11dGF0
b3JTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK011dGF0b3JTY2hlZHVsZXI6Ok11dGF0b3JTY2hlZHVs
ZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjp+TXV0YXRvclNjaGVkdWxlcigpCit7Cit9
CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7Cit9CisKK3ZvaWQgTXV0YXRv
clNjaGVkdWxlcjo6d2lsbFJlc3VtZSgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6
bG9nKCkKK3sKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRTdG9wKCkKK3sKKyAg
ICByZXR1cm4gaGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQorCitib29sIE11dGF0b3JTY2hl
ZHVsZXI6OnNob3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvUmVz
dW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE11dGF0b3JTY2hlZHVsZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBOb3JtYWwsIC8vIE5v
dCBjb2xsZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAgICBSZXN1bWVkCisgICAgfTsK
KyAgICAKKyAgICBNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgdmlydHVhbCB+TXV0YXRvclNjaGVk
dWxlcigpOworICAgIAorICAgIHZpcnR1YWwgU3RhdGUgc3RhdGUoKSBjb25zdCA9IDA7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0gMDsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVzdW1lKCk7CisgICAg
CisgICAgdmlydHVhbCBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSA9IDA7IC8vIENhbGwgd2hp
bGUgcmVzdW1lZCwgdG8gYXNrIHdoZW4gdG8gc3RvcC4KKyAgICB2aXJ0dWFsIE1vbm90b25pY1Rp
bWUgdGltZVRvUmVzdW1lKCkgPSAwOyAvLyBDYWxsIHdoaWxlIHN0b3BwZWQsIHRvIGFzayB3aGVu
IHRvIHJlc3VtZS4KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbG9nKCk7CisgICAgCisgICAgYm9v
bCBzaG91bGRTdG9wKCk7IC8vIENhbGwgd2hpbGUgcmVzdW1lZCwgdG8gYXNrIGlmIHdlIHNob3Vs
ZCBzdG9wIG5vdy4KKyAgICBib29sIHNob3VsZFJlc3VtZSgpOyAvLyBDYWxsIHdoaWxlIHN0b3Bw
ZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgcmVzdW1lIG5vdy4KKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kQ29sbGVjdGlvbigpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAy
MTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksMTEgKzU5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb250YWluc0xh
c3RRdWVyaWVkUm9vdCA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgYWRkKHZvaWQqIHJvb3Qp
CisgICAgYm9vbCBhZGQodm9pZCogcm9vdCkKICAgICB7CiAgICAgICAgIGlmIChyb290ID09IG1f
bGFzdFF1ZXJpZWRSb290KQogICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9
IHRydWU7Ci0gICAgICAgIG1fcm9vdHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm4gbV9yb290
cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKICAgICB9CiAKICAgICBpbnQgc2l6ZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDcsNiArMzQ3LDExIEBAIHByaXZhdGU6CiAgICAg
U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKIH07CiAKK3ZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0QXND
b25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2sgPSB0cnVlOworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7
CkBAIC00NjEsNyArNDY2LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGlt
ZSB0aQogICAgIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9yaWdodFRvUnVuKTsKICAg
ICAKLSAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAgIHdoaWxlICgh
aGFzRWxhcHNlZCh0aW1lb3V0KSkgewogICAgICAgICB1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGxv
Y2tlcik7CiAgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CkBAIC00NzYsNyArNDgxLDggQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogICAgICAgICAgICAgbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291
bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7
IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCiAgICAgICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOwotICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1fcmln
aHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAg
IH0KQEAgLTQ4NiwxMiArNDkyLDE4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25p
Y1RpbWUgdGkKIAogYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiB7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICByZXR1cm4g
aXNFbXB0eSgpICYmIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKTsKK30KKworYm9vbCBTbG90
VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBMb2NrSG9sZGVyJikKK3sKICAgICBy
ZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCiAgICAgICAgICYm
IG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgICYm
IG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIAotYm9vbCBT
bG90VmlzaXRvcjo6aGFzV29yaygpCitib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKTsKQEAgLTUxOCwxMiArNTMwLDEyIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQo
dGltZW91dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1
bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNXb3JrKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKGxvY2tlcikpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwo
bV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0KTsKQEAgLTUzNCwxMyArNTQ2LDEzIEBAIFNs
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwoCiAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAg
W3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKCkKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNX
b3JrKGxvY2tlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAKQEAgLTU4OSw3ICs2MDEsNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQgU2xvdFZpc2l0CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgCi0gICAgICAg
IGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgaWYgKGRpZFJlYWNoVGVybWlu
YXRpb24obG9ja2VyKSkgewogICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpEb25lOwogICAgICAgICB9CkBAIC02MDUsMTMgKzYxNywxMyBAQCB2b2lkIFNsb3RWaXNpdG9y
OjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAg
ICAgICAgbV92aXNpdENvdW50ICs9IG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KS5pc05l
d0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2Nh
bCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KICAgICAv
LyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9v
IGxhcmdlLgogICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1
ZVJvb3RzLmFkZChyb290KTsKKyAgICBtX3Zpc2l0Q291bnQgKz0gbV9vcGFxdWVSb290cy5hZGQo
cm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBy
b290KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNiArMTAzLDggQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNW
aXNpdGVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0
Q291bnQ7IH0KKyAgICAKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsg
bV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQg
ZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7
CkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBj
ZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVh
c29uKSk7IH0KICAgICB2b2lkIGRpZE5vdFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CiAgICAg
dm9pZCBkaWROb3RSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZE5v
dFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CisgICAgCisgICAgdm9pZCB2aXNp
dEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICAKKyAgICBib29sIGRpZFJlYWNoVGVy
bWluYXRpb24oKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5h
YmxlcjsKQEAgLTE4MCw4ICsxODYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYg
ZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKICAgICAKLSAgICBib29sIGhhc1dvcmsoKTsKLSAg
ICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKKyAgICBib29sIGhhc1dvcmsoY29uc3QgTG9j
a0hvbGRlciYpOworICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBMb2NrSG9sZGVy
Jik7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFj
a0FycmF5IG1fbXV0YXRvclN0YWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIx
MDQzMykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVy
LmNwcDoyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpE
ZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAgICBkb3VibGUg
Ynl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQorICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICAKKyAgICBkb3VibGUgbWF4SGVhZHJvb20gPQorICAgICAgICBtX3NjaGVkdWxl
ci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBkb3VibGUgaGVh
ZHJvb21GdWxsbmVzcyA9CisgICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4
SGVhZHJvb207CisgICAgCisgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBv
dGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlz
IGNvZGUKKyAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMu
CisgICAgCisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKKyAgICAgICAgaGVhZHJv
b21GdWxsbmVzcyA9IDA7CisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKKyAgICAg
ICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7CisgICAgCisgICAgZG91YmxlIG11dGF0b3JVdGlsaXph
dGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOworICAgIAorICAgIC8vIFNjYWxlIHRoZSBtdXRh
dG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCisgICAgbXV0YXRvclV0
aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigp
ICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAgICAgICAgT3B0aW9uczo6
bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmlt
dW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIG11dGF0b3JVdGlsaXph
dGlvbjsKK30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpOworfQorCitTZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNp
b246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX25vdyAtIG1fc2No
ZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworZG91
YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK2Jv
b2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QK
K3sKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAg
ICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0
dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworfQorCitNb25vdG9u
aWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7CisgICAgaWYgKE9wdGlvbnM6OmNv
bGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBz
ZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hvdWxkQmVSZXN1
bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQor
ICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5t
X3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQorCitTcGFjZVRp
bWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFw
KGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKKyAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKKyAgICAgICAgT3B0aW9uczo6Y29uY3Vy
cmVudEdDTWF4SGVhZHJvb20oKSAqCisgICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorewor
ICAgIHNuYXBQaGFzZSgpOworfQorCit2b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNl
KCkKK3sKKyAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK1Nw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVj
aXNpb24oKQoreworICAgIERlY2lzaW9uIHJlc3VsdDsKKyAgICByZXN1bHQubV9zY2hlZHVsZXIg
PSB0aGlzOworICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNCwxOSArMjQsMTA3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNwYWNlVGltZVNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWRv
dWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRp
b24oKSBjb25zdAorLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgYSBoaWVy
YXJjaHkgb2Ygc2NoZWR1bGVycz8gSW4gc3VjaCBhIHdvcmxkLCB3ZSB3b3VsZAorLy8gcHJvYmFi
bHkgcmVwcmVzZW50IGNvbmN1cnJlbnQtR0Mtb2ZmIGFzIGEgc2NoZWR1bGVyLiBJdCB3b3VsZCB0
aGVuIGFsc28gYmUgYSBnb29kIGlkZWEgdG8ga2VlcAorLy8gdGhlIG9sZCBzY2hlZHVsZXIgYXJv
dW5kLiBJIHdvbmRlciBpZiB3ZSBjb3VsZCBhbHNvIHNpbXVsYXRlIHRoZSBvbGQgc2NoZWR1bGVy
J3MgdHJlYXRtZW50IG9mCisvLyBmaXhwb2ludCBpdGVyYXRpb25zIGFuZCBpZGxlIHRpbWUuIFRo
YXQgc291bmRzIGFubm95aW5nIGFuZCBoYXJkLCBzbyBtYXliZSB3ZSBkb24ndCB3YW50IHRvIGdv
CisvLyB0aGVyZS4KKworU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6U3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX211dGF0
b3JUaW1lc2xpY2UoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjptdXRhdG9yVGlt
ZXNsaWNlTVMoKSkpCit7Cit9CisKK1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6On5TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUgU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0
YXRlOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlv
bigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3Rh
dGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisK
KyAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgPSBtX2hlYXAubV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVFbmQgPSAKKyAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCisg
ICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nLCBtX2hlYXAubV9tYXhFZGVuU2l6ZSk7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBT
dG9wcGVkIHx8IG1fc3RhdGUgPT0gUmVzdW1lZCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7Cisg
ICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjp3aWxsUmVzdW1lKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0g
UmVzdW1lZDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitN
b25vdG9uaWNUaW1lIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQorewor
ICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9ybWFsOgorICAgICAgICByZXR1cm4g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKTsKKyAgICBjYXNlIFN0b3BwZWQ6CisgICAgICAgIHJl
dHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJl
dHVybiBtX3N0YXJ0VGltZSArIG1fbXV0YXRvclRpbWVzbGljZTsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgp
OworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jl
c3VtZSgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb3JtYWw6CisgICAg
Y2FzZSBSZXN1bWVkOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
Y2FzZSBTdG9wcGVkOgorICAgICAgICByZXR1cm4gbV9zdGFydFRpbWUgKyBzdG9wRHVyYXRpb24o
KTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gTW9ub3RvbmljVGltZSgpOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OmxvZygpCit7CisgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0dDKCkpOworICAgIGRhdGFMb2co
Im11PSIsIG11dGF0b3JVdGlsaXphdGlvbigpLCAiIHRwPSIsIHN0b3BEdXJhdGlvbigpLm1pbGxp
c2Vjb25kcygpLCAiIG1zICIpOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6
OmVuZENvbGxlY3Rpb24oKQoreworICAgIG1fc3RhdGUgPSBOb3JtYWw7CisgICAgbV9zdGFydFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworZG91YmxlIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI6Om11dGF0b3JVdGlsaXphdGlvbigpCiB7CiAgICAgZG91YmxlIGJ5dGVzU2luY2VC
ZWdpbm5pbmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1f
c2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAg
ICAgIG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogICAgIAogICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0g
ICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBt
X3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAg
ICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CiAgICAgCiAgICAgZG91YmxlIGhlYWRyb29tRnVsbG5l
c3MgPQogICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOwpA
QCAtNjIsNjcgKzE1MCwzOSBAQCBkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
dGFyCiAgICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKIH0KIAotZG91YmxlIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotfQotCi1TZWNv
bmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1f
c2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVj
dG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0
TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0
b3JVdGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFzaG91bGRCZVJl
c3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkp
Ci0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXIt
Pm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hl
ZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLX0KLQotTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFw
c2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hl
ZHVsZXItPm1fcGVyaW9kOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVk
dWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQot
ICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRo
ZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAg
ICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwotfQotCi12b2lk
IFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRpYWxUaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24g
U3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQorU2Vjb25kcyBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyOjpzdG9wRHVyYXRpb24oKQogewotICAgIERlY2lzaW9uIHJlc3VsdDsK
LSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVz
dWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAvLyBUaGlzIHByZXNlcnZlcyB0d28gdGhpbmdzOgorICAgIC8vIC0gTXV0YXRvciBnZXRzIHRv
IGFsd2F5cyBydW4gZm9yIG1fbXV0YXRvclRpbWVzbGljZS4KKyAgICAvLyAtIFRoZSByYXRpbyBi
ZXR3ZWVuIG11dGF0b3IgcmVzdW1lIHRpbWUgYW5kIG11dGF0b3Igc3RvcCB0aW1lIGlzIGdvdmVy
bmVkIGFzIGZvbGxvd3MuCisgICAgLy8KKyAgICAvLyBJZiB3ZSByZXN1bWUgZm9yIHRoaXMgYW1v
dW50OgorICAgIC8vCisgICAgLy8gICAgIEMgKiBtdXRhdG9yVXRpbGl6YXRpb24KKyAgICAvLwor
ICAgIC8vIEZvciBzb21lIGNvbnN0YW50IEMsIHRoZW4gd2UgbXVzdCBzdG9wIGZvciB0aGlzIGFt
b3VudDoKKyAgICAvLworICAgIC8vICAgICBDICogKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24pCisg
ICAgLy8KKyAgICAvLyBJbiBvdGhlciB3b3Jkcywgd2Ugd2FudCB0aGUgcmF0aW8gb2YgcmVzdW1l
IHRpbWUgKG51bWVyYXRvcikgdG8gc3RvcCB0aW1lIChkZW5vbWluYXRvcikKKyAgICAvLyB0byBi
ZToKKyAgICAvLworICAgIC8vICAgICBtdXRhdG9yVXRpbGl6YXRpb24gLyAoMSAtIG11dGF0b3JV
dGlsaXphdGlvbikKKyAgICAvLworICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSByZXN1bWVkIHRo
ZSBtdXRhdG9yIGZvciBYIHRpbWUgdGhlbiB3ZSB3b3VsZCBkaXZpZGUgWCBieSB0aGUgYWJvdmUK
KyAgICAvLyBxdWFudGl0eSB0byBnZXQgdGhlIGFtb3VudCBvZiB0aW1lIHdlIHNob3VsZCBzdG9w
IGZvci4KKyAgICAvLworICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IGlmIHdlIHJlc3VtZSBmb3Ig
bV9tdXRhdG9yVGltZXNsaWNlIChhcyB0aGlzIHNjaGVkdWxlciBhbHdheXMgZG9lcykKKyAgICAv
LyB0aGVuIHdlIHNob3VsZCBzdG9wIGZvcjoKKyAgICAvLworICAgIC8vICAgICBtX211dGF0b3JU
aW1lc2xpY2UgLyAobXV0YXRvclV0aWxpemF0aW9uIC8gKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24p
KQorICAgIC8vCisgICAgLy8gV2hpY2ggc2ltcGxpZmllcyB0bzoKKyAgICAvLworICAgIC8vICAg
ICBtX211dGF0b3JUaW1lc2xpY2UgKiAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikgLyBtdXRhdG9y
VXRpbGl6YXRpb24KKyAgICAvLworICAgIC8vIEFuZCB0aGVuIGlmIHdlIGRpc3RyaWJ1dGUgd2Ug
Z2V0OgorICAgIHJldHVybiBtX211dGF0b3JUaW1lc2xpY2UgLyBtdXRhdG9yVXRpbGl6YXRpb24o
KSAtIG1fbXV0YXRvclRpbWVzbGljZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oOjIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKKworY2xh
c3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBEZWNpc2lvbiB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3NjaGVkdWxlcjsgfQorICAgICAgICAKKyAgICAgICAgZG91YmxlIHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVjdG9yVXRp
bGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoKSBjb25z
dDsKKyAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgc2hvdWxkQmVS
ZXN1bWVkKCkgY29uc3Q7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgY29u
c3Q7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OworICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOwor
CisgICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRyIH07Cisg
ICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OworICAgICAgICBN
b25vdG9uaWNUaW1lIG1fbm93OworICAgIH07CisgICAgCisgICAgLy8gQ29uc3RydWN0IHRoZSBz
Y2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCisgICAgU3BhY2VUaW1lU2NoZWR1
bGVyKEhlYXAmKTsKKyAgICAKKyAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8gc3RhcnQg
bm93LgorICAgIHZvaWQgc25hcFBoYXNlKCk7CisgICAgCisgICAgLy8gUmV0dXJucyBhIHNuYXBz
aG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwgYmUgdmFs
aWQgc28gbG9uZyBhcworICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFuZCB5b3Ug
aGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCisgICAgRGVjaXNpb24gY3VycmVudERlY2lzaW9u
KCk7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKKworICAgIEhl
YXAmIG1faGVhcDsKKyAgICBTZWNvbmRzIG1fcGVyaW9kOworICAgIGRvdWJsZSBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKKyAgICBNb25vdG9uaWNUaW1lIG1faW5pdGlhbFRpbWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAkocmV2aXNpb24gMjEw
NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSw0OCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSAiTXV0YXRvclNjaGVkdWxl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBIZWFwOwogCi1jbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgeworLy8gVGhlIEpTQyBjb25jdXJy
ZW50IEdDIHNvbWV0aW1lcyBzdG9wcyB0aGUgd29ybGQgaW4gb3JkZXIgdG8gc3RheSBhaGVhZCBv
ZiBpdC4gVGhlc2UgZGVsaWJlcmF0ZSwKKy8vIHN5bnRoZXRpYyBwYXVzZXMgZW5zdXJlIHRoYXQg
dGhlIEdDIHdvbid0IGhhdmUgdG8gZG8gb25lIGh1Z2UgcGF1c2UgaW4gb3JkZXIgdG8gY2F0Y2gg
dXAgdG8gdGhlCisvLyByZXRyZWF0aW5nIHdhdmVmcm9udC4gVGhlIHNjaGVkdWxlciBpcyBjYWxs
ZWQgInNwYWNlLXRpbWUiIGJlY2F1c2UgaXQgbGlua3MgdGhlIGFtb3VudCBvZiB0aW1lCisvLyB0
aGF0IHRoZSB3b3JsZCBpcyBwYXVzZWQgZm9yIHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCB0
aGUgd29ybGQgYWxsb2NhdGVkIHNpbmNlIHRoZSBHQyBjeWNsZQorLy8gYmVnYW4uCisKK2NsYXNz
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7CiBw
dWJsaWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KLSAgICAg
ICAgCi0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAg
ICAgICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAg
IFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBwaGFzZSgp
IGNvbnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAgICAgICBN
b25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1l
IHRpbWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVTY2hlZHVs
ZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKLSAgICB9
OwotICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBh
IEdDIGN5Y2xlLgotICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAgCi0gICAgLy8g
Rm9yY2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNuYXBQaGFzZSgp
OwotICAgIAotICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVs
aW5nIGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAgICAvLyBTcGFj
ZVRpbWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgp
LgotICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOworICAgIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIoSGVhcCYpOworICAgIH5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAg
CisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJlZ2lu
Q29sbGVjdGlvbigpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZGlkU3RvcCgpIG92ZXJyaWRl
OworICAgIHZvaWQgd2lsbFJlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIE1vbm90b25pY1Rp
bWUgdGltZVRvU3RvcCgpIG92ZXJyaWRlOworICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1l
KCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBsb2coKSBvdmVycmlkZTsKKyAgICAKKyAgICB2
b2lkIGVuZENvbGxlY3Rpb24oKSBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIERlY2lzaW9uOwotCisgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbigpOworICAg
IFNlY29uZHMgc3RvcER1cmF0aW9uKCk7CisgICAgCiAgICAgSGVhcCYgbV9oZWFwOwotICAgIFNl
Y29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRo
ZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5k
OwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKKyAgICBTZWNvbmRzIG1fbXV0YXRv
clRpbWVzbGljZTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgTm9ybWFsIH07CisgICAgZG91YmxlIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyB7IDAgfTsKKyAgICBkb3VibGUg
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIHsgMCB9OworICAgIE1vbm90b25pY1Rp
bWUgbV9zdGFydFRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkocmV2aXNp
b24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1
bGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIGRvdWJsZSBieXRlc1NpbmNl
QmVnaW5uaW5nT2ZDeWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBt
X3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAg
IAotICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxu
ZXNzID0KLSAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsK
LSAgICAKLSAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVy
ZXN0aW5nIHRoaW5ncyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdp
bm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQotICAg
IC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAgICAKLSAg
ICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNz
ID0gMDsKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBoZWFkcm9v
bUZ1bGxuZXNzID0gMTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAt
IGhlYWRyb29tRnVsbG5lc3M7Ci0gICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6
YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24g
PQotICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAg
ICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0
YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JV
dGlsaXphdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOwotfQot
Ci1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRp
bGl6YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0
aW9uKCk7Ci19Ci0KLVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNl
ZEluUGVyaW9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1f
aW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1kb3VibGUgU3BhY2VU
aW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAotewotICAgIHJldHVybiBlbGFw
c2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotYm9vbCBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAotewotICAgIGlm
IChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4g
cGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gcGhhc2Uo
KSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1vbm90b25pY1RpbWUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hv
dWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9k
KCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZElu
UGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXph
dGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246
OnRpbWVUb1N0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQoKSk7Ci0g
ICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJl
dHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICog
dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZElu
UGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxl
cjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAg
ICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVu
dEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdp
bm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhI
ZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCi17Ci0gICAgc25hcFBo
YXNlKCk7Ci19Ci0KLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQotewotICAg
IG1faW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQotU3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lvbigpCi17
Ci0gICAgRGVjaXNpb24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7Ci0g
ICAgcmVzdWx0Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJKHJldmlz
aW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVk
dWxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci0KLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7Ci1wdWJs
aWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KLSAgICAgICAg
Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAg
ICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFNl
Y29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBwaGFzZSgpIGNv
bnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAgICAgICBNb25v
dG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5k
IGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIq
IG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKLSAgICB9Owot
ICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdD
IGN5Y2xlLgotICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAgCi0gICAgLy8gRm9y
Y2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNuYXBQaGFzZSgpOwot
ICAgIAotICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5n
IGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAgICAvLyBTcGFjZVRp
bWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgot
ICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgRGVjaXNpb247Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25kcyBtX3Bl
cmlvZDsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7Ci0gICAgTW9u
b3RvbmljVGltZSBtX2luaXRpYWxUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZE11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQorewor
fQorCitTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6On5TeW5jaHJvbm91
c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVy
OjpTdGF0ZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworfQor
CitNb25vdG9uaWNUaW1lIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6
dGltZVRvU3RvcCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSA6IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitNb25vdG9uaWNU
aW1lIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1l
KCkKK3sKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBOb3JtYWwgPyBNb25vdG9uaWNUaW1lOjpub3co
KSA6IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCk7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9w
VGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQpOworICAgIG1fc3RhdGUgPSBOb3JtYWw7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTXV0YXRvclNjaGVkdWxlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIEpTQyBjb25jdXJyZW50IEdDIHJlbGllcyBvbiBzdG9w
cGluZyB0aGUgd29ybGQgdG8gc3RheSBhaGVhZCBvZiB0aGUgcmV0cmVhdGluZyB3YXZlZnJvbnQu
CisvLyBJdCBzbyBoYXBwZW5zIHRoYXQgdGhlIHNhbWUgQVBJIGNhbiBiZSByZXVzZWQgdG8gaW1w
bGVtZW50IGEgbm9uLWNvbmN1cnJlbnQgR0MgbW9kZSwgd2hpY2ggd2UKKy8vIHVzZSBvbiBwbGF0
Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBHQydzIGF0b21pY2l0eSBwcm90b2NvbHMuIFRo
YXQgbWVhbnMgYW55dGhpbmcgb3RoZXIKKy8vIHRoYW4gWDg2LTY0IGFuZCBBUk02NC4gVGhpcyBz
Y2hlZHVsZXIgaXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgY29uY3VycmVudCBHQydz
CisvLyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLiBJdCB0ZWxscyB0aGUgR0MgdG8gbmV2ZXIg
cmVzdW1lIHRoZSB3b3JsZCBvbmNlIHRoZSBHQyBjeWNsZSBiZWdpbnMuCisKK2NsYXNzIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1
bGVyIHsKK3B1YmxpYzoKKyAgICBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIoKTsKKyAgICB+U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7Cisg
ICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJl
Z2luQ29sbGVjdGlvbigpIG92ZXJyaWRlOworICAgIAorICAgIE1vbm90b25pY1RpbWUgdGltZVRv
U3RvcCgpIG92ZXJyaWRlOworICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgb3ZlcnJp
ZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgU3RhdGUgbV9zdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdGluZ1RpbWVvdXQgeworcHVibGljOgor
ICAgIFZpc2l0aW5nVGltZW91dCgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXNpdGluZ1Rp
bWVvdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90
b25pY1RpbWUgdGltZW91dCkKKyAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0
U29tZXRoaW5nKQorICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291
bnQoKSkKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdG9yLnZpc2l0
Q291bnQoKSA+IG1fdmlzaXRDb3VudEJlZm9yZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91
bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2Ug
fTsKKyAgICBzaXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OworICAgIE1vbm90b25pY1Rp
bWUgbV90aW1lb3V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzExLDcgKzMxMSw3IEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRlRGVmYXVsdHMoKQogICAgIGlm
IChXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA8IDQpIHsKICAgICAgICAgT3B0aW9uczo6
bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpID0gMC42OwogICAgICAgICBPcHRpb25zOjpjb25j
dXJyZW50R0NNYXhIZWFkcm9vbSgpID0gMS40OwotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NQZXJpb2RNUygpID0gMTA7CisgICAgICAgIE9wdGlvbnM6Om11dGF0b3JUaW1lc2xpY2VNUygp
ID0gNTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoZG91YmxlLCBtaW5pbXVtTXV0YXRvclV0aWxp
emF0aW9uLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWF4aW11bU11dGF0
b3JVdGlsaXphdGlvbiwgMC43LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29u
Y3VycmVudEdDTWF4SGVhZHJvb20sIDEuNSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihkb3Vi
bGUsIGNvbmN1cnJlbnRHQ1BlcmlvZE1TLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGRv
dWJsZSwgbXV0YXRvclRpbWVzbGljZU1TLCAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIGNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihkb3VibGUsIGNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbywgMCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298232</attachid>
            <date>2017-01-06 15:18:28 -0800</date>
            <delta_ts>2017-01-06 19:44:59 -0800</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136976</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVuYyhjb2RlQmxv
Y2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICsz
NTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29k
ZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2Nr
cyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lk
IFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5s
b2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0
b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0
YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21w
aWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0
aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAg
IHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBG
dW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQog
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsxMTIsNiBAQCBi
b29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xk
Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmco
SGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVj
dXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhl
Y3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8vIEFkZCBhbGwg
Y3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVkIHNldCB0byBi
ZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9uLgotICAgIHZv
aWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAgIHZvaWQgY2xl
YXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTG9ja0hv
bGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcsOSBAQCBwdWJs
aWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2
aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQg
aXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAg
IC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKLSAgICAgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYpOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1ICs2MCwzMCBA
QCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50
bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxv
Y2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSw0MiBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBl
bmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwordm9pZCBIZWFw
Ojphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQoreworICAgIGJvb2wgb2sgPSB0cnVlOwor
ICAgIAorICAgIGlmICghbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewor
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogU2hhcmVkIGNvbGxlY3RvciBtYXJrIHN0YWNrIG5vdCBl
bXB0eSEgSXQgaGFzICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxl
bWVudHMuXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhTG9nKCJG
QVRBTDogU2hhcmVkIG11dGF0b3IgbWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBlbGVtZW50cy5cbiIpOworICAgICAgICBv
ayA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKIHZv
aWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIFRpbWlu
Z1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhw
b2ludCIpOwpAQCAtNTYwLDEzMyArNTY2LDgxIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQo
ZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAotICAg
IFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWludFNl
dC0+cmVzZXRTdGF0cygpOworICAgIAorICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24o
KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXItPmxvZygp
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUJvb3RzdHJhcChzbG90VmlzaXRv
ciwgbV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgpKTsKKworICAgIC8vIEFmdGVyIHRoaXMsIHdl
IHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWxsIHRocm91Z2ggYWxsIG9mIHRoZSAic2xvdFZpc2l0
b3IuaXNFbXB0eSgpIgorICAgIC8vIGNoZWNrcyBiZWNhdXNlIGJvb3RzdHJhcCB3b3VsZCBoYXZl
IHB1dCB0aGluZ3MgaW50byB0aGUgdmlzaXRvci4gU28sIHdlIHNob3VsZCBmYWxsCisgICAgLy8g
dGhyb3VnaCB0byBkcmFpbmluZy4KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9
IDE7IDsgKytpdGVyYXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKLSAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6
Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAgICAgICAgICBtX29iamVj
dFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7Ci0gICAgICAgICAgICBDb25zZXJ2
YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7Ci0gICAgICAgICAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgICAgICBnYXRoZXJT
dGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlckpTU3RhY2tS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNo
IGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCi0gICAgICAgIC8vIGFsbCBvZiB0aGVt
LgotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKLSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAg
IGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2Nv
cGUpKQotICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDog
bV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChwYWlyLmtleSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQg
JiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAg
ICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwor
ICAgICAgICAgICAgaWYgKG1fY29uc3RyYWludFNldC0+aXNXYXZlZnJvbnRSZXRyZWF0aW5nKHNs
b3RWaXNpdG9yKSkKKyAgICAgICAgICAgICAgICBtX3NjaGVkdWxlci0+d2F2ZWZyb250RGlkUmV0
cmVhdCgpOwogICAgICAgICAgICAgCi0gICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFu
ZGxlcyhzbG90VmlzaXRvcik7Ci0gICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0
b3IpOwotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
ewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3Rh
Y2tUcmFjZXMoKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNp
dG9yKTsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxu
Iiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgYm9vbCBleGVjdXRlZEV2ZXJ5dGhpbmcgPQor
ICAgICAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RW
aXNpdG9yLCBtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOworICAgICAgICAgICAgaWYgKGV4
ZWN1dGVkRXZlcnl0aGluZyAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAg
ICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxk
cmVuKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV9qaXRTdHViUm91
dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKLQotICAgICAgICBz
bG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAg
ICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLQotICAg
ICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwotICAgICAgICBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZp
c2l0b3IpOwotICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgeworICAgICAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1l
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91
bGRSZXN1bWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9z
Y2hlZHVsZXItPndpbGxSZXN1bWUoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtT
dGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNp
dG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBz
Y2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIg
Iik7CisgICAgICAgICAgICBkb3VibGUgdGhpc1BhdXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93
KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKKyAgICAgICAgICAgIGRhdGFMb2coInA9
IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIiku
Li5dXG4iKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0
aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9j
a3MgdGhhdCBhcmUKLSAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5l
ZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAg
ICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJh
cnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKLSAgICAgICAgLy8gZml4
cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFs
bHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCi0gICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mg
c28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVk
IGluIHRoZSBuZXh0Ci0gICAgICAgIC8vIEdDLgotICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRl
QmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgREZHOjpyZW1lbWJlckNv
ZGVCbG9ja3MoKm1fdm0pOwotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9y
J3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUu
IHRoaXMgdGhyZWFkKQotICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRv
dWJsZS1idWZmZXIuCi0gICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90
VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIHJlc3VtZVRoZVdv
cmxkKCk7CiAgICAgICAgIAorICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQg
ZHJhaW5SZXN1bHQ7CiAgICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGlt
aW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CiAgICAgICAg
ICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQ29sbGVjdG9yVGltZXNsaWNpbmcoKSkg
ewotICAgICAgICAgICAgICAgIHNjaGVkdWxlci5zbmFwUGhhc2UoKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5S
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRl
Y2lzaW9uID0gc2NoZWR1bGVyLmN1cnJlbnREZWNpc2lvbigpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZGVjaXNpb24uc2hvdWxkQmVSZXN1bWVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJl
c3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy
YWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KGRlY2lzaW9u
LnRpbWVUb1N0b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWluUmVz
dWx0ID09IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0
IG1heWJlIHRoZSBzY2hlZHVsZXIgZG9lcyBub3Qgd2FudAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNv
bmRzIHNjaGVkdWxlZElkbGUgPSBkZWNpc2lvbi50aW1lVG9TdG9wKCkgLSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5
IHVuY2xlYXIgd2hhdCB0aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUsIG90aGVyIHRoYW4gaXQg
c2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZlbgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhcmd1ZSBmb3IgaXQgYmVpbmcgZ3JlYXRlciB0aGFuIDEuIFdl
IHNob3VsZCB0dW5lIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcChz
Y2hlZHVsZWRJZGxlICogT3B0aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyB3YWtlVXBMYXRlbmN5ID0gTW9ub3RvbmljVGlt
ZTo6bm93KCkgLSBkZWNpc2lvbi50aW1lVG9TdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHdha2VVcExhdGVuY3kgPj0gMV9tcykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygid3VsIT0iLCB3YWtlVXBMYXRlbmN5Lm1pbGxpc2Vjb25kcygpLCAi
IG1zICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3Iu
ZHJhaW5JblBhcmFsbGVsKGRlY2lzaW9uLnRpbWVUb1Jlc3VtZSgpKTsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEaXNhYmxp
bmcgY29sbGVjdG9yIHRpbWVzbGljaW5nIGlzIG1lYW50IHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0
aAotICAgICAgICAgICAgICAgIC8vIC0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIHRvIG1heGlt
aXplIHRoZSBvcHBvcnR1bml0eSBmb3IgaGFybWZ1bCByYWNlcy4KLSAgICAgICAgICAgICAgICBS
ZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbCgpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZl
bHkobV9zY2hlZHVsZXItPnRpbWVUb1N0b3AoKSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAo
ZHJhaW5SZXN1bHQgPT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7Cisg
ICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0IG1heWJlIHRoZSBz
Y2hlZHVsZXIgZG9lcyBub3Qgd2FudAorICAgICAgICAgICAgLy8gdGhhdC4KKyAgICAgICAgICAg
IFNlY29uZHMgc2NoZWR1bGVkSWRsZSA9IG1fc2NoZWR1bGVyLT50aW1lVG9TdG9wKCkgLSBNb25v
dG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdo
YXQgdGhlIHZhbHVlIG9mIGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KKyAgICAgICAgICAgIC8v
IHNob3VsZCBiZSwgb3RoZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIFlvdSBj
b3VsZCBldmVuCisgICAgICAgICAgICAvLyBhcmd1ZSBmb3IgaXQgYmVpbmcgZ3JlYXRlciB0aGFu
IDEuIFdlIHNob3VsZCB0dW5lIGl0LgorICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAq
IE9wdGlvbnM6OmNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RvcFRoZVdvcmxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIltHQzogIik7CisgICAgICAgIAor
ICAgICAgICBtX3NjaGVkdWxlci0+ZGlkU3RvcCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBtX3NjaGVkdWxlci0+bG9nKCk7CiAgICAgfQor
ICAgIAorICAgIG1fc2NoZWR1bGVyLT5lbmRDb2xsZWN0aW9uKCk7CiAKICAgICB7CiAgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTY5NCw2ICs2
NDgsMTIgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAg
ICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9o
ZWxwZXJDbGllbnQuZmluaXNoKCk7CisKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5n
Q29kZUJsb2NrcygKKyAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgICAgICAKICAg
ICB1cGRhdGVPYmplY3RDb3VudHMoZ2NTdGFydFRpbWUpOwogICAgIGVuZE1hcmtpbmcoKTsKIH0K
QEAgLTczMiwyNSArNjkyLDYgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIG1fYmFy
cmllcnNFeGVjdXRlZCA9IDA7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCi17Ci0gICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+YXBwZW5kKHJvb3RzKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1f
Y29sbGVjdG9yU2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3Jr
bGlzdFdlYWtSZWZlcmVuY2VzKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6
ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5n
OjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBp
bGVyV29ya2xpc3RFbnRyaWVzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTg1MCw4ICs3
OTEsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgIGZvciAoYXV0byYgcGFyYWxsZWxW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgcGFyYWxsZWxWaXNpdG9y
LT5yZXNldCgpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRhdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkpOworICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAg
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmpl
Y3RTcGFjZS5lbmRNYXJraW5nKCk7CkBAIC0xMTM2LDcgKzEwNzYsNyBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgCiAgICAgd2lsbFN0YXJ0Q29sbGVjdGlvbihzY29wZSk7CiAg
ICAgY29sbGVjdEltcGxUaW1pbmdTY29wZS5zZXRTY29wZSgqdGhpcyk7Ci0gICAgICAgIAorICAg
IAogICAgIGdjU3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
ICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVj
dHMgZnJvbSB0aGUgbGFzdCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CkBAIC0x
MTQ2LDExICsxMDg2LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAgICAg
bV92ZXJpZmllci0+aW5pdGlhbGl6ZUdDQ3ljbGUoKTsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0
aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAg
fQotICAgICAgICAKKyAgICAKICAgICBwcmVwYXJlRm9yTWFya2luZygpOwotICAgICAgICAKKyAg
ICAKICAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7Ci0gICAgICAgIAorICAgIAogICAg
IGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3Rz
KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXIt
PnZlcmlmeShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMTE2Niw4ICsx
MTA2LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRy
aWVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIAotICAgIG1f
Y29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgIAor
ICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZygKKyAgICAgICAgWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7CisgICAgICAgIH0pOwogICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJDdXJyZW50bHlFeGVj
dXRpbmcoKTsKICAgICAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQWxsb2NhdGlv
bigpOwpAQCAtMTM1NCw2ICsxMjk3LDcgQEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93
KCkKICAgICAKICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgp
OworICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVj
ZXNzYXJ5U2xvdyh1bnNpZ25lZCBvbGRTdGF0ZSkKQEAgLTEzNjYsNyArMTMxMCw3IEBAIGJvb2wg
SGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVl
ZEZpbmFsaXplKG9sZFN0YXRlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYg
KCEob2xkU3RhdGUgJiBzaG91bGRTdG9wQml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hv
dWxkU3RvcEJpdCkgJiYgIW1fc2NoZWR1bGVyLT5zaG91bGRTdG9wKCkpIHsKICAgICAgICAgaWYg
KCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgbV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0ZSwgb2xkU3Rh
dGUgJiB+c3RvcHBlZEJpdCk7CkBAIC0xNDM5LDYgKzEzODMsNyBAQCB2b2lkIEhlYXA6OmFjcXVp
cmVBY2Nlc3NTbG93KCkKICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHsKICAgICAgICAgICAgIGhhbmRsZUdDRGlkSklUKCk7
CiAgICAgICAgICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAgICAgICAgICAgIG1fbXV0YXRv
ckRpZFJ1biA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBA
IC0yMDc1LDEwICsyMDIwLDEwIEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNp
dGVkKHMKIH0KICNlbmRpZgogCi1ib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3ZvaWQgSGVhcDo6Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewog
ICAgIGlmICghY2FuQ29sbGVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KSB7CiAgICAgICAgIGRlZmVycmFs
Q29udGV4dC0+bV9zaG91bGRHQyB8PQpAQCAtMjA4NywxMyArMjAzMiwxMyBAQCBib29sIEhlYXA6
OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NECiAgICAgICAgIHN0b3BJZk5lY2Vzc2FyeSgp
OwogICAgIAogICAgIGlmICghc2hvdWxkQ29sbGVjdEhldXJpc3RpYygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChkZWZlcnJhbENvbnRleHQpCiAg
ICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CiAgICAgZWxzZQogICAg
ICAgICBjb2xsZWN0QXN5bmMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm47CiB9CiAK
IHZvaWQgSGVhcDo6Y29sbGVjdEFjY29yZGluZ1RvRGVmZXJHQ1Byb2JhYmlsaXR5KCkKQEAgLTIx
NTgsOCArMjEwMywxNTQgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5M
bwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQo
KQoreworICAgIG1fY29uc3RyYWludFNldCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0
cmFpbnRTZXQ+KCk7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJD
cyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBUaW1pbmdT
Y29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2Vy
dmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNl
cnZhdGl2ZVNjYW4oKTsKKyAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2
ZVJvb3RzKCp0aGlzKTsKKyAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKyAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZl
Um9vdHMpOworICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3Rz
KTsKKyAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290
cyk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwor
ICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24p
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiTXNyIiwgIk1pc2Mg
U21hbGwgUm9vdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAg
ICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Cisj
ZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNp
dGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICAgICAgbV92bS0+c21hbGxTdHJp
bmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQorICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6
ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoc2xv
dFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2xv
dFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICAg
ICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIlNoIiwgIlN0cm9u
ZyBIYW5kbGVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ry
b25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0
KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAg
ICAgIkQiLCAiRGVidWdnZXIiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVy
ID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkK
KyAgICAgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCisgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAorICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldz
IiwgIldlYWsgU2V0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBzbG90VmlzaXRvci5tZXJn
ZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYWxs
ZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgICAgICBwYXJh
bGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwor
ICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsK
KyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldyaCIsICJXZWFrIFJl
ZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIGZvciAoV2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVh
ZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICAgICAgICAg
IGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAor
ICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkR3Iiwg
IkRGRyBXb3JrbGlzdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQorICAgICAgICAgICAgICAgIERGRzo6
ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3Qg
Y2VydGFpbmx5IHVubmVjZXNzYXJ5LgorICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKAorICAgICAgICAgICAgICAgICptX3ZtLAorICAgICAgICAgICAgICAgIFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1h
cmtpbmcpOworI2VuZGlmCisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAg
ICJDYiIsICJDb2RlQmxvY2tzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAg
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFj
ay4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNvZGVCbG9jaykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0
YXRlOjpQb3NzaWJseU9sZE9yQmxhY2spCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24p
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiTW1zIiwgIk11dGF0
b3IgTWFyayBTdGFjayIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0
aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCisgICAgICAgICAgICBzaXplX3Qg
c2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIiki
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2Zl
clRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgICAgIH0sCisgICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgeworICAgICAgICAgICAgcmV0dXJuIG1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29u
c3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworfQorCiB2b2lkIEhlYXA6Om5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpCiB7CisgICAgYnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCiAgICAgbV9p
c1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29u
dGludW91c2x5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9u
IDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC03Myw4ICs3MywxMCBAQCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgTXV0YXRvclNjaGVkdWxl
cjsKIGNsYXNzIFNsb3RWaXNpdG9yOwotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworY2xhc3Mg
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwog
Y2xhc3MgVk07CiAKQEAgLTIwMyw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIHRoaXMg
d2lsbCB3YWl0IGZvciB0aGF0IGJhY2tsb2cgYmVmb3JlIHJ1bm5pbmcgaXRzIEdDIGFuZCByZXR1
cm5pbmcuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0U3luYyhzdGQ6Om9wdGlv
bmFsPENvbGxlY3Rpb25TY29wZT4gPSBzdGQ6Om51bGxvcHQpOwogICAgIAotICAgIGJvb2wgY29s
bGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsgLy8g
UmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xsZWN0LgorICAgIHZvaWQgY29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICB2b2lkIGNvbGxl
Y3RBY2NvcmRpbmdUb0RlZmVyR0NQcm9iYWJpbGl0eSgpOwogCiAgICAgdm9pZCBjb21wbGV0ZUFs
bEpJVFBsYW5zKCk7CkBAIC0zNDEsNiArMzQzLDkgQEAgcHVibGljOgogICAgIC8vIGFscmVhZHkg
YmUgY2FsbGVkIGZvciB5b3UgYXQgdGhlIHJpZ2h0IHRpbWVzLgogICAgIHZvaWQgc3RvcElmTmVj
ZXNzYXJ5KCk7CiAgICAgCisgICAgLy8gRklYTUUKKyAgICB2b2lkIHN0b3BJZlJlcXVpcmVkQnlT
Y2hlZHVsZXIoKTsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgbXVjaCBzdHJvbmdlciBraW5kIG9m
IHN0b3BwaW5nIG9mIHRoZSBjb2xsZWN0b3IsIGFuZCBpdCBtYXkgcmVxdWlyZSB3YWl0aW5nIGZv
ciBhCiAgICAgLy8gd2hpbGUuIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBsZWdhY3kgQVBJIGZvciBj
bGllbnRzIG9mIGNvbGxlY3RBbGxHYXJiYWdlIHRoYXQgZXhwZWN0IHRoYXQgdGhlcmUKICAgICAv
LyBpcyBubyBHQyBiZWZvcmUgb3IgYWZ0ZXIgdGhhdCBmdW5jdGlvbiBjYWxsLiBBZnRlciBjYWxs
aW5nIHRoaXMsIHlvdSBhcmUgZnJlZSB0byBzdGFydCBHQ3MKQEAgLTM3Niw3ICszODEsNyBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAgICBmcmll
bmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKQEAg
LTQxMyw5ICs0MTgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAg
dm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2Nv
cGU7Ci0gICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgCiAgICAgdm9p
ZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApA
QCAtNDU1LDcgKzQ1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNp
dENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENv
bXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91
YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ5OCw2ICs0OTksMTYgQEAgcHJpdmF0ZToKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKICAg
ICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKKyAgICAK
KyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
cyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2
b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdM
b2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tz
RW1wdHkoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6
ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1NDUsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNl
dDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBt
YXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJh
dGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02MTUsNiArNjI4LDggQEAgcHJpdmF0ZToKICAg
ICBzaXplX3QgbV9leHRlcm5hbE1lbW9yeVNpemUgeyAwIH07CiAjZW5kaWYKICAgICAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TXV0YXRvclNjaGVkdWxlcj4gbV9zY2hlZHVsZXI7CisgICAgCiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3VsZFN0b3BCaXQgPSAxdSA8PCAwdTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc3RvcHBlZEJpdCA9IDF1IDw8IDF1OwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBoYXNBY2Nlc3NCaXQgPSAxdSA8PCAydTsKQEAgLTYzMCw2ICs2NDUsNyBAQCBw
cml2YXRlOgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsgMCB9OwogICAgIGJvb2wg
bV90aHJlYWRTaG91bGRTdG9wIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGhyZWFkSXNTdG9wcGlu
ZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX211dGF0b3JEaWRSdW4geyB0cnVlIH07CiAgICAgQm94
PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
PiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBub3Qgd2FpdCBvbiB0aGlz
LiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+
IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBWb2xh
dGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5h
bWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9u
KFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5
KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAor
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24sCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogbV9hYmJyZXZpYXRlZE5h
bWUoYWJicmV2aWF0ZWROYW1lKQorICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgLCBt
X2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkK
KyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWlu
dDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
cmVzZXRTdGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZp
c2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOworICAgIFZpc2l0
aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRp
bWVvdXQpOworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7
CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0
b3IpOworICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29t
ZXRoaW5nKHZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gVm9sYXRpbGl0eSB7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBpbnRyb2R1Y2UgYSBuZXcga2luZCBvZiB2b2xhdGlsaXR5IGNhbGxl
ZCBHcmV5ZWRCeVJlc3VtcHRpb24sIHdoaWNoCisgICAgICAgIC8vIHdvdWxkIG1lYW4gcnVubmlu
ZyBhbGwgb2YgdGhlIHRpbWVzIHRoYXQgR3JleWVkQnlFeGVjdXRpb24gcnVucyBleGNlcHQgYXMg
YSByb290IGluIGEKKyAgICAgICAgLy8gZnVsbCBHQy4KKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueXRpbWUgdGhlIG11dGF0b3Ig
cnVuczogc28gYXQgR0Mgc3RhcnQgYW5kCisgICAgICAgIC8vIHdoZW5ldmVyIHRoZSBHQyByZXN1
c3BlbmRzIGFmdGVyIGEgcmVzdW1wdGlvbi4gVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHNvbWV0aGlu
ZyB0aGF0CisgICAgICAgIC8vIHlvdSdkIGNhbGwgYSAicm9vdCIgaW4gYSB0cmFkaXRpb25hbCBH
Qy4KKyAgICAgICAgR3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIAorICAgICAgICAvLyBUaGUg
Y29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBhbnkgdGltZSBhbnkgb2JqZWN0IGlz
IG1hcmtlZCBhbmQgYW55dGltZSB0aGUKKyAgICAgICAgLy8gbXV0YXRvciByZXN1bWVzLgorICAg
ICAgICBHcmV5ZWRCeU1hcmtpbmcKKyAgICB9OworICAgIAorICAgIE1hcmtpbmdDb25zdHJhaW50
KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4s
CisgICAgICAgIFZvbGF0aWxpdHkpOworICAgIAorICAgIE1hcmtpbmdDb25zdHJhaW50KAorICAg
ICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAg
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBWb2xhdGlsaXR5
KTsKKyAgICAKKyAgICB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICBjb25zdCBjaGFyKiBh
YmJyZXZpYXRlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2FiYnJldmlhdGVkTmFtZS5kYXRhKCk7
IH0KKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsg
fQorICAgIAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAgIAorICAgIHNpemVfdCBsYXN0Vmlz
aXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICAKKyAgICB2
b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1h
dGVGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIH0KKyAgICAKKyAgICBkb3VibGUg
d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKKyAgICB9Cisg
ICAgCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGls
aXR5OyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgorICAgIAorICAgIHVuc2lnbmVkIG1faW5k
ZXggeyBVSU5UX01BWCB9OworICAgIENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CisgICAgQ1N0
cmluZyBtX25hbWU7CisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0JiB0aW1lb3V0KT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworICAg
IFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsg
MCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCisKKyNpbmNsdWRl
ICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlv
bkNvbnRleHQgeworcHVibGljOgorICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFp
bnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkK
KyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCisgICAg
ICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRp
ZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RpZFZpc2l0
U29tZXRoaW5nOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZCht
X3RpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVz
IG91dC4KKyAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAgICAgICAgZXhlY3V0
ZShpbmRleCk7CisgICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGRp
ZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRl
eCk7IH0KKworICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBt
X3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5n
LCBtX3RpbWVvdXQpOworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgU2xvdFZp
c2l0b3ImIG1fdmlzaXRvcjsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKKyAgICBCaXRW
ZWN0b3IgbV9leGVjdXRlZDsKKyAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9
OworfTsKKworTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK3sK
K30KKworTWFya2luZ0NvbnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OnJlc2V0U3RhdHMoKQoreworICAgIG1fdW5l
eGVjdXRlZFJvb3RzLmNsZWFyQWxsKCk7CisgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5jbGVh
ckFsbCgpOworICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KSB7CisgICAgICAgIGNv
bnN0cmFpbnQtPnJlc2V0U3RhdHMoKTsKKyAgICAgICAgc3dpdGNoIChjb25zdHJhaW50LT52b2xh
dGlsaXR5KCkpIHsKKyAgICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVj
dXRpb246CisgICAgICAgICAgICBtX3VuZXhlY3V0ZWRSb290cy5zZXQoY29uc3RyYWludC0+aW5k
ZXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWlu
dDo6R3JleWVkQnlNYXJraW5nOgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5z
ZXQoY29uc3RyYWludC0+aW5kZXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwKKyAgICBNYXJraW5nQ29u
c3RyYWludDo6Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUo
bmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAorICAgIEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIEZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRv
ciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdDb25zdHJhaW50OjpW
b2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24p
LCB2b2xhdGlsaXR5KSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCit7CisgICAg
Y29uc3RyYWludC0+bV9pbmRleCA9IG1fc2V0LnNpemUoKTsKKyAgICBtX29yZGVyZWQuYXBwZW5k
KGNvbnN0cmFpbnQuZ2V0KCkpOworICAgIGlmIChjb25zdHJhaW50LT52b2xhdGlsaXR5KCkgPT0g
TWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZykKKyAgICAgICAgbV9vdXRncm93dGhz
LmFwcGVuZChjb25zdHJhaW50LmdldCgpKTsKKyAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25z
dHJhaW50KSk7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVCb290c3Ry
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICAv
LyBCb290c3RyYXAgbWVhbnMgdGhhdCB3ZSBoYXZlbid0IGRvbmUgYW55IG9iamVjdCB2aXNpdGlu
ZyB5ZXQuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvCisgICAgLy8gb25seSBleGVjdXRlIHJv
b3QgY29uc3RyYWludHMgKHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSB0aG9zZSB0aGF0IHdlIHNh
eSBhcmUgZ3JleWVkIGJ5CisgICAgLy8gcmVzdW1wdGlvbiksIHNpbmNlIHRoZSBvdGhlciBjb25z
dHJhaW50cyBhcmUgc3VwZXIgdW5saWtlbHkgdG8gdHJpZ2dlciB3aXRob3V0IHNvbWUgb2JqZWN0
CisgICAgLy8gdmlzaXRpbmcuIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjYWxsZXIgd2ls
bCBnbyBzdHJhaWdodCB0byBvYmplY3QgdmlzaXRpbmcgYWZ0ZXIKKyAgICAvLyB0aGlzLgorICAg
IEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91
dCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coImJvb3Q6Iik7
CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJv
b3RzKTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiICIpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQoreworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0
aW1lb3V0KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiICIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6Omlz
V2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoTWFy
a2luZ0NvbnN0cmFpbnQqIG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3RocykgeworICAgICAgICBpZiAo
b3V0Z3Jvd3RoLT53b3JrRXN0aW1hdGUodmlzaXRvcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCit7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0
KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKKyAgICAgICAgZGF0YUxvZygiY29udmVyZ2U6Iik7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUg
YW55IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0
aGlzIGN5Y2xlLCB0aGVuCisgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgorICAg
IGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1
dGVkT3V0Z3Jvd3RocykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSB3
YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9u
ZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKKyAgICAvLyBldmVuIGluIGEgc3RvcC10aGUt
d29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5j
eSB0byBnbyB0b3RhbGx5CisgICAgLy8gc2lsZW50IGF0IHNvbWUgcG9pbnQgZHVyaW5nIEdDLCBh
dCB3aGljaCBwb2ludCBpdCBtYWtlcyBzZW5zZSBub3QgdG8gcnVuIHRoZW0gYWdhaW4gdW50aWwK
KyAgICAvLyB0aGUgZW5kLiBPdXRncm93dGhzIHByb2R1Y2luZyBuZXcgaW5mb3JtYXRpb24gY29y
cmVzcG9uZHMgYWxtb3N0IGV4YWN0bHkgdG8gdGhlIHdhdmVmcm9udAorICAgIC8vIGFkdmFuY2lu
ZzogaXQgdXN1YWxseSBtZWFucyB0aGF0IHdlIGFyZSBtYXJraW5nIG9iamVjdHMgdGhhdCBzaG91
bGQgYmUgbWFya2VkIGJhc2VkIG9uCisgICAgLy8gb3RoZXIgb2JqZWN0cyB0aGF0IHdlIHdvdWxk
IGhhdmUgbWFya2VkIGFueXdheS4gT25jZSB0aGUgd2F2ZWZyb250IGlzIG5vIGxvbmdlciBhZHZh
bmNpbmcsCisgICAgLy8gd2Ugd2FudCB0byBydW4gbW9zdGx5IHRoZSByb290IGNvbnN0cmFpbnRz
IChiYXNlZCBvbiB0aGVpciBwcmVkaWN0aW9ucyBvZiBob3cgbXVjaCB3b3JrCisgICAgLy8gdGhl
eSB3aWxsIGhhdmUpIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB3ZSBhcmUganVzdCB0cnlpbmcgdG8g
b3V0cGFjZSB0aGUgcmV0cmVhdGluZworICAgIC8vIHdhdmVmcm9udC4KKyAgICAvLworICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIChleGVjdXRlQ29udmVyZ2VuY2VJbXBsKSBvbmx5IHJl
dHVybnMgdHJ1ZSBpZiBpdCBydW5zIGFsbAorICAgIC8vIGNvbnN0cmFpbnRzLiBTbywgYWxsIHdl
IGFyZSBjb250cm9sbGluZyBhcmUgdGhlIGhldXJpc3RpY3MgdGhhdCBzYXkgd2hpY2ggY29uc3Ry
YWludHMgdG8KKyAgICAvLyBydW4gZmlyc3QuIENob29zaW5nIHRoZSBjb25zdHJhaW50cyB0aGF0
IGFyZSB0aGUgbW9zdCBsaWtlbHkgdG8gcHJvZHVjZSBtZWFucyBydW5uaW5nIGZld2VyCisgICAg
Ly8gY29uc3RyYWludHMgYmVmb3JlIHJldHVybmluZy4KKyAgICBib29sIGlzV2F2ZWZyb250QWR2
YW5jaW5nID0gdGhpcy0+aXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7CisgICAgCisgICAg
c3RkOjpzb3J0KAorICAgICAgICBtX29yZGVyZWQuYmVnaW4oKSwgbV9vcmRlcmVkLmVuZCgpLAor
ICAgICAgICBbJl0gKE1hcmtpbmdDb25zdHJhaW50KiBhLCBNYXJraW5nQ29uc3RyYWludCogYikg
LT4gYm9vbCB7CisgICAgICAgICAgICAvLyBSZW1lbWJlcjogcmV0dXJuIHRydWUgaWYgYSBzaG91
bGQgY29tZSBiZWZvcmUgYi4KKyAgICAgICAgICAgIGlmIChhLT52b2xhdGlsaXR5KCkgIT0gYi0+
dm9sYXRpbGl0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzV2F2ZWZyb250QWR2YW5jaW5n
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRp
bGl0eSgpOyAvLyBHcmV5ZWRCeU1hcmtpbmcgc2hvdWxkIGNvbWUgYmVmb3JlIEdyZXllZEJ5RXhl
Y3V0aW9uLgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGEtPnZvbGF0aWxpdHkoKSA8IGItPnZvbGF0aWxpdHkoKTsgLy8gR3JleWVkQnlFeGVjdXRpb24g
c2hvdWxkIGNvbWUgYmVmb3JlIEdyZXllZEJ5TWFya2luZy4KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGEtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSA+IGIt
PndvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgZm9yIChNYXJr
aW5nQ29uc3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgeworICAgICAgICBzaXplX3Qg
aSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dC5kaWRFeGVjdXRlKGkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGV4
ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9uY2Ugd2Un
cmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1h
cmtpbmcgaGFwcGVuIGFueXRpbWUKKyAgICAgICAgLy8gd2UgZmluZCB3b3JrLiBOb25ldGhlbGVz
cywgd2Ugb25seSB3YW50IGNvbnN0cmFpbnRzIHRvIGludGVycnVwdCB0aGVtc2VsdmVzIHVwb24K
KyAgICAgICAgLy8gdGltZW91dCAtIG5vdCBqdXN0IGJlY2F1c2UgdGhleSBmb3VuZCBzb21lIHdv
cmsuCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25z
dHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCisgICAgICAgIC8vIGJl
dHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKKyAgICAgICAgLy8gLSBJ
ZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgorICAgICAgICAvLyAtIElmIHRo
ZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgorICAgICAgICAvLyAt
IEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCisgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRp
ZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGJvb2wgZGlkVmlzaXRTb21ldGhp
bmcgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKKyAgICAgICAg
Y29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRh
dGFMb2coIiAiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWlu
dFNldCgpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHZvaWQgcmVz
ZXRTdGF0cygpOworICAgIAorICAgIHZvaWQgYWRkKAorICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwKKyAgICAgICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAg
ICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludD4pOworICAgIAorICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1h
cmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRv
IHdoZXRoZXIgb3IKKyAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCisgICAg
Ym9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZl
ZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJv
bnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICAKKyAgICAvLyBFeGVjdXRlcyBvbmx5IHJvb3Rz
LiBSZXR1cm5zIHRydWUgaWYgYWxsIHJvb3RzIGhhdmUgYmVlbiBleGVjdXRlZC4gSXQncyBleHBl
Y3RlZAorICAgIC8vIHRoYXQgeW91J2xsIGRvIHNvbWUgZHJhaW5pbmcgYWZ0ZXIgdGhpcyBhbmQg
dGhlbiB1c2UgZXhlY3V0ZUNvbnZlcmdlbmNlKCkuCisgICAgYm9vbCBleGVjdXRlQm9vdHN0cmFw
KFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25zdHJhaW50cyB3
ZXJlIGV4ZWN1dGVkLiBUaGlzIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeQorICAgIC8vIHZp
c2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KKyAgICBib29sIGV4ZWN1dGVDb252
ZXJnZW5jZSgKKyAgICAgICAgU2xvdFZpc2l0b3ImLAorICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCisgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgCitwcml2YXRlOgorICAgIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgCisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KTsKKyAgICAKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3Rvbmlj
VGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZyk7CisgICAgCisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3Rz
OworICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKKyAgICBWZWN0b3I8TWFya2lu
Z0NvbnN0cmFpbnQqPiBtX29yZGVyZWQ7CisgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4g
bV9vdXRncm93dGhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk11dGF0
b3JTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK011dGF0b3JTY2hlZHVsZXI6Ok11dGF0b3JTY2hlZHVs
ZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjp+TXV0YXRvclNjaGVkdWxlcigpCit7Cit9
CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7Cit9CisKK3ZvaWQgTXV0YXRv
clNjaGVkdWxlcjo6d2lsbFJlc3VtZSgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6
d2F2ZWZyb250RGlkUmV0cmVhdCgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6bG9n
KCkKK3sKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRTdG9wKCkKK3sKKyAgICBy
ZXR1cm4gaGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQorCitib29sIE11dGF0b3JTY2hlZHVs
ZXI6OnNob3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvUmVzdW1l
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE11dGF0b3JTY2hlZHVsZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBOb3JtYWwsIC8vIE5vdCBj
b2xsZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAgICBSZXN1bWVkCisgICAgfTsKKyAg
ICAKKyAgICBNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgdmlydHVhbCB+TXV0YXRvclNjaGVkdWxl
cigpOworICAgIAorICAgIHZpcnR1YWwgU3RhdGUgc3RhdGUoKSBjb25zdCA9IDA7CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVzdW1lKCk7CisgICAgdmly
dHVhbCB2b2lkIHdhdmVmcm9udERpZFJldHJlYXQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIE1vbm90
b25pY1RpbWUgdGltZVRvU3RvcCgpID0gMDsgLy8gQ2FsbCB3aGlsZSByZXN1bWVkLCB0byBhc2sg
d2hlbiB0byBzdG9wLgorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSA9
IDA7IC8vIENhbGwgd2hpbGUgc3RvcHBlZCwgdG8gYXNrIHdoZW4gdG8gcmVzdW1lLgorICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBsb2coKTsKKyAgICAKKyAgICBib29sIHNob3VsZFN0b3AoKTsgLy8g
Q2FsbCB3aGlsZSByZXN1bWVkLCB0byBhc2sgaWYgd2Ugc2hvdWxkIHN0b3Agbm93LgorICAgIGJv
b2wgc2hvdWxkUmVzdW1lKCk7IC8vIENhbGwgd2hpbGUgc3RvcHBlZCwgdG8gYXNrIGlmIHdlIHNo
b3VsZCByZXN1bWUgbm93LgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBlbmRDb2xsZWN0aW9uKCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSwxMSAr
NTksMTEgQEAgcHVibGljOgogICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFs
c2U7CiAgICAgfQogCi0gICAgdm9pZCBhZGQodm9pZCogcm9vdCkKKyAgICBib29sIGFkZCh2b2lk
KiByb290KQogICAgIHsKICAgICAgICAgaWYgKHJvb3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCiAg
ICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgbV9y
b290cy5hZGQocm9vdCk7CisgICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0Vu
dHJ5OwogICAgIH0KIAogICAgIGludCBzaXplKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0Nyw2ICszNDcsMTEgQEAgcHJpdmF0ZToKICAgICBTbG90VmlzaXRvciYgbV92aXNp
dG9yOwogfTsKIAordm9pZCBTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlND
ZWxsKiBjZWxsKQoreworICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CisgICAg
dmlzaXRDaGlsZHJlbihjZWxsKTsKK30KIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
Ojp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKQEAgLTQ2MSw3ICs0NjYsNyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpCiAgICAgCiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3JpZ2h0VG9SdW4pOwogICAgIAotICAgIHdoaWxlICgoIW1f
Y29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYm
ICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgd2hpbGUgKCFoYXNFbGFwc2VkKHRpbWVvdXQp
KSB7CiAgICAgICAgIHVwZGF0ZU11dGF0b3JJc1N0b3BwZWQobG9ja2VyKTsKICAgICAgICAgaWYg
KCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9jb2xsZWN0b3JT
dGFjay5yZWZpbGwoKTsKQEAgLTQ3Niw3ICs0ODEsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFp
bihNb25vdG9uaWNUaW1lIHRpCiAgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sg
PSB0cnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjpt
aW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRhdG9yU3RhY2suY2Fu
UmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKICAgICAgICAgICAgICAgICB2aXNpdENoaWxk
cmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgp
OwogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQpAQCAtNDg2LDEyICs0OTIs
MTggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogCiBib29sIFNs
b3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKIHsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgIHJldHVybiBpc0VtcHR5KCkgJiYgZGlkUmVh
Y2hUZXJtaW5hdGlvbihsb2NrZXIpOworfQorCitib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRl
cm1pbmF0aW9uKGNvbnN0IExvY2tIb2xkZXImKQorewogICAgIHJldHVybiAhbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpoYXNXb3Jr
KCkKK2Jvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
cmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAg
ICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwpAQCAt
NTE4LDEyICs1MzAsMTIgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNp
dAogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5h
dGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxv
Y2tlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1dvcmsoKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc1dvcmsobG9ja2VyKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0
ZXgsIHRpbWVvdXQpOwpAQCAtNTM0LDEzICs1NDYsMTMgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERy
YWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVv
dXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVk
T3V0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1p
bmF0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24obG9ja2Vy
KSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
Lm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLndhaXRVbnRpbCgKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2lu
Z011dGV4LCB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsoKQorICAgICAgICAgICAgICAgICAgICBbJl0g
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIApAQCAtNTg5LDcg
KzYwMSw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAg
ICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJh
aW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAKLSAgICAgICAgaWYgKGRpZFJlYWNoVGVybWlu
YXRpb24oKSkgeworICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKSB7CiAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7
CiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgIH0K
QEAgLTYwNSwxMyArNjE3LDEzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9p
ZCogcm8KICAgICAKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7
CiAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAg
ICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgICAgICBtX3Zpc2l0Q291bnQg
Kz0gbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdp
dGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgogICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBz
dXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCiAgICAgbWVyZ2VP
cGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwor
ICAgIG1fdmlzaXRDb3VudCArPSBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKIH0KIAogYm9vbCBT
bG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw2ICsxMDMsOCBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qg
Ynl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KICAgICBzaXpl
X3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorICAgIAorICAg
IHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFs
dWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKQEAgLTE1MSw2ICsxNTMsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJl
YXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQogICAgIHZvaWQg
ZGlkTm90UmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKTsKICAgICB2b2lkIGRpZE5vdFJhY2UoSlND
ZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkTm90UmFjZShWaXNpdFJhY2VLZXko
Y2VsbCwgcmVhc29uKSk7IH0KKyAgICAKKyAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0
IEpTQ2VsbCopOworICAgIAorICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbigpOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMTgwLDggKzE4
Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgdm9p
ZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJh
eSYgdG8pOwogICAgIAotICAgIGJvb2wgaGFzV29yaygpOwotICAgIGJvb2wgZGlkUmVhY2hUZXJt
aW5hdGlvbigpOworICAgIGJvb2wgaGFzV29yayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgYm9v
bCBkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IExvY2tIb2xkZXImKTsKIAogICAgIE1hcmtTdGFj
a0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3Rh
Y2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDMzKQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwOjIxMDQzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGFj
ZVRpbWVTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRh
dG9yVXRpbGl6YXRpb24oKSBjb25zdAoreworICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5n
T2ZDeWNsZSA9CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBtX3NjaGVkdWxl
ci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIAorICAgIGRv
dWJsZSBtYXhIZWFkcm9vbSA9CisgICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nOworICAgIAorICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzID0KKyAg
ICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKKyAgICAKKyAg
ICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRo
aW5ncyBpZgorICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMg
emVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQorICAgIC8vIGRlZmVu
ZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KKyAgICAKKyAgICBpZiAoISho
ZWFkcm9vbUZ1bGxuZXNzID49IDApKQorICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKKyAg
ICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQorICAgICAgICBoZWFkcm9vbUZ1bGxuZXNz
ID0gMTsKKyAgICAKKyAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29t
RnVsbG5lc3M7CisgICAgCisgICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50
byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KKyAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQorICAgICAg
ICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKworICAgICAgICBtdXRhdG9y
VXRpbGl6YXRpb24gKiAoCisgICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxp
emF0aW9uKCkgLQorICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlv
bigpKTsKKyAgICAKKyAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOworfQorCitkb3VibGUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Cit9
CisKK1NlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9k
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRp
bWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQorCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAoreworICAgIHJldHVybiBlbGFwc2VkSW5QZXJp
b2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworYm9vbCBTcGFjZVRpbWVTY2hlZHVs
ZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAoreworICAgIGlmIChPcHRpb25z
Ojpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gcGhhc2UoKSA8
PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4gcGhhc2UoKSA+IHRhcmdl
dENvbGxlY3RvclV0aWxpemF0aW9uKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXNo
b3VsZEJlUmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1l
Rmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3Nj
aGVkdWxlci0+bV9wZXJpb2Q7CisgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkg
KyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwor
fQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0
b3AoKSBjb25zdAoreworICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQoKSk7CisgICAgaWYgKE9w
dGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBtX25v
dyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkg
KyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK1NwYWNlVGltZVNjaGVkdWxlcjo6U3BhY2VU
aW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fcGVy
aW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9k
TVMoKSkpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcoaGVh
cC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZUF0VGhlRW5kKAorICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgp
ICoKKyAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCit7CisgICAgc25hcFBoYXNlKCk7Cit9
CisKK3ZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQoreworICAgIG1faW5pdGlh
bFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworU3BhY2VUaW1lU2NoZWR1bGVyOjpE
ZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lvbigpCit7CisgICAgRGVj
aXNpb24gcmVzdWx0OworICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7CisgICAgcmVzdWx0
Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZTsKKyAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5j
cHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDEwNCArMjQsMTg3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWRvdWJsZSBTcGFjZVRpbWVTY2hl
ZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdAorU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJiBoZWFw
KQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX211dGF0b3JUaW1lc2xpY2UoU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSkpCiB7Ci0gICAg
ZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIG1heEhlYWRyb29tID0KLSAgICAgICAgbV9z
Y2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVy
LT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91
YmxlIGhlYWRyb29tRnVsbG5lc3MgPQotICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNs
ZSAvIG1heEhlYWRyb29tOwotICAgIAotICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5h
TiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCi0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0
cy4gVGhpcyBjb2RlCi0gICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBk
cmFnb25zLgotICAgIAotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCi0gICAgICAg
IGhlYWRyb29tRnVsbG5lc3MgPSAwOwotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkp
Ci0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOwotICAgIAotICAgIGRvdWJsZSBtdXRhdG9y
VXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKLSAgICAKLSAgICAvLyBTY2FsZSB0
aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgotICAgIG11
dGF0b3JVdGlsaXphdGlvbiA9Ci0gICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6
YXRpb24oKSArCi0gICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKLSAgICAgICAgICAgIE9w
dGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCi0gICAgICAgICAgICBPcHRpb25z
OjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworfQorCitTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjp+U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcigpCit7Cit9CisKK011dGF0b3JTY2hl
ZHVsZXI6OlN0YXRlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gTm9y
bWFsKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworCisgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kID0gCisgICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01h
eEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgbV9oZWFwLm1fbWF4RWRlblNpemUpOwogICAgIAotICAg
IHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247CisgICAgbV9yZXRyZWF0TXVsdGlwbGllciA9IDE7
Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkIHx8IG1fc3RhdGUgPT0gUmVzdW1lZCk7
CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKIH0KIAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdl
dENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6d2lsbFJlc3VtZSgpCiB7Ci0gICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6
YXRpb24oKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0
ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gUmVzdW1lZDsKKyAgICBtX3N0YXJ0VGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit2b2lkIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI6OndhdmVmcm9udERpZFJldHJlYXQoKQogewotICAgIHJldHVybiAobV9ub3cgLSBt
X3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7CisgICAg
bV9yZXRyZWF0TXVsdGlwbGllciAqPSBPcHRpb25zOjpyZXRyZWF0aW5nV2F2ZWZyb250TXVsdGlw
bGllcigpOwogfQogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2Uo
KSBjb25zdAorTW9ub3RvbmljVGltZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9T
dG9wKCkKIHsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9w
ZXJpb2Q7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb3JtYWw6CisgICAgICAg
IHJldHVybiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOworICAgIGNhc2UgU3RvcHBlZDoKKyAg
ICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGNhc2UgUmVzdW1lZDoKKyAg
ICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgbV9tdXRhdG9yVGltZXNsaWNlOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9u
aWNUaW1lKCk7CiB9CiAKLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxk
QmVSZXN1bWVkKCkgY29uc3QKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
cjo6dGltZVRvUmVzdW1lKCkKIHsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVz
dW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxp
emF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlv
bigpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9ybWFsOgorICAgIGNhc2Ug
UmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGNhc2Ug
U3RvcHBlZDoKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRUaW1lICsgc3RvcER1cmF0aW9uKCk7Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IE1vbm90b25pY1RpbWUoKTsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjpsb2coKQogewotICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlm
IChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4g
bV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLSAgICBy
ZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAq
IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7CisgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0dD
KCkpOworICAgIGRhdGFMb2coCisgICAgICAgICJhPSIsIGZvcm1hdCgiJS4wbGYiLCBieXRlc1Np
bmNlQmVnaW5uaW5nT2ZDeWNsZSgpIC8gMTAyNCksICIga2IgIiwKKyAgICAgICAgImhmPSIsIGZv
cm1hdCgiJS4zbGYiLCBoZWFkcm9vbUZ1bGxuZXNzKCkpLCAiICIsCisgICAgICAgICJtdT0iLCBm
b3JtYXQoIiUuM2xmIiwgbXV0YXRvclV0aWxpemF0aW9uKCkpLCAiICIsCisgICAgICAgICJ0cD0i
LCBmb3JtYXQoIiUuM2xmIiwgc3RvcER1cmF0aW9uKCkubWlsbGlzZWNvbmRzKCkpLCAiIG1zICIp
OwogfQogCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVU
b1N0b3AoKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0
aW9uKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25z
Ojpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBl
bGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JV
dGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9z
Y2hlZHVsZXItPm1fcGVyaW9kOworICAgIG1fc3RhdGUgPSBOb3JtYWw7CisgICAgbV9zdGFydFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotU3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFj
ZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQotICAgICwgbV9w
ZXJpb2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50R0NQZXJp
b2RNUygpKSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyho
ZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVFbmQoCi0gICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29t
KCkgKgotICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVB
dFRoZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkKK2RvdWJsZSBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyOjpieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSgpCiB7Ci0gICAgc25hcFBo
YXNlKCk7CisgICAgcmV0dXJuIG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogfQogCi12b2lkIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjptYXhIZWFkcm9vbSgpCiB7Ci0gICAgbV9pbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CiB9CiAKLVNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQorZG91
YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmhlYWRyb29tRnVsbG5lc3MoKQogewotICAg
IERlY2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJl
c3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
ZG91YmxlIHJlc3VsdCA9IGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKCkgLyBtYXhIZWFkcm9v
bSgpOworCisgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRl
cmVzdGluZyB0aGluZ3MgaWYKKyAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKKyAg
ICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCisgICAgCisg
ICAgaWYgKCEocmVzdWx0ID49IDApKQorICAgICAgICByZXN1bHQgPSAwOworICAgIGlmICghKHJl
c3VsdCA8PSAxKSkKKyAgICAgICAgcmVzdWx0ID0gMTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptdXRhdG9yVXRpbGl6YXRpb24o
KQoreworICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVz
cygpOworICAgIAorICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhl
IHBlcm1pdHRlZCB3aW5kb3cuCisgICAgbXV0YXRvclV0aWxpemF0aW9uID0KKyAgICAgICAgT3B0
aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKKyAgICAgICAgbXV0YXRvclV0aWxp
emF0aW9uICogKAorICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlv
bigpIC0KKyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7
CisgICAgCisgICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKK30KKworU2Vjb25kcyBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpzdG9wRHVyYXRpb24oKQoreworICAgIC8vIFRoaXMgcHJl
c2VydmVzIHR3byB0aGluZ3M6CisgICAgLy8gLSBNdXRhdG9yIGdldHMgdG8gYWx3YXlzIHJ1biBm
b3IgbV9tdXRhdG9yVGltZXNsaWNlLgorICAgIC8vIC0gVGhlIHJhdGlvIGJldHdlZW4gbXV0YXRv
ciByZXN1bWUgdGltZSBhbmQgbXV0YXRvciBzdG9wIHRpbWUgaXMgZ292ZXJuZWQgYXMgZm9sbG93
cy4KKyAgICAvLworICAgIC8vIElmIHdlIHJlc3VtZSBmb3IgdGhpcyBhbW91bnQ6CisgICAgLy8K
KyAgICAvLyAgICAgQyAqIG11dGF0b3JVdGlsaXphdGlvbgorICAgIC8vCisgICAgLy8gRm9yIHNv
bWUgY29uc3RhbnQgQywgdGhlbiB3ZSBtdXN0IHN0b3AgZm9yIHRoaXMgYW1vdW50OgorICAgIC8v
CisgICAgLy8gICAgIEMgKiAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikKKyAgICAvLworICAgIC8v
IEluIG90aGVyIHdvcmRzLCB3ZSB3YW50IHRoZSByYXRpbyBvZiByZXN1bWUgdGltZSAobnVtZXJh
dG9yKSB0byBzdG9wIHRpbWUgKGRlbm9taW5hdG9yKQorICAgIC8vIHRvIGJlOgorICAgIC8vCisg
ICAgLy8gICAgIG11dGF0b3JVdGlsaXphdGlvbiAvICgxIC0gbXV0YXRvclV0aWxpemF0aW9uKQor
ICAgIC8vCisgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHdlIHJlc3VtZWQgdGhlIG11dGF0b3IgZm9y
IFggdGltZSB0aGVuIHdlIHdvdWxkIGRpdmlkZSBYIGJ5IHRoZSBhYm92ZQorICAgIC8vIHF1YW50
aXR5IHRvIGdldCB0aGUgYW1vdW50IG9mIHRpbWUgd2Ugc2hvdWxkIHN0b3AgZm9yLgorICAgIC8v
CisgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgaWYgd2UgcmVzdW1lIGZvciBtX211dGF0b3JUaW1l
c2xpY2UgKGFzIHRoaXMgc2NoZWR1bGVyIGFsd2F5cyBkb2VzKQorICAgIC8vIHRoZW4gd2Ugc2hv
dWxkIHN0b3AgZm9yOgorICAgIC8vCisgICAgLy8gICAgIG1fbXV0YXRvclRpbWVzbGljZSAvICht
dXRhdG9yVXRpbGl6YXRpb24gLyAoMSAtIG11dGF0b3JVdGlsaXphdGlvbikpCisgICAgLy8KKyAg
ICAvLyBXaGljaCBzaW1wbGlmaWVzIHRvOgorICAgIC8vCisgICAgLy8gICAgIG1fbXV0YXRvclRp
bWVzbGljZSAqICgxIC0gbXV0YXRvclV0aWxpemF0aW9uKSAvIG11dGF0b3JVdGlsaXphdGlvbgor
ICAgIC8vCisgICAgLy8gQW5kIHRoZW4gaWYgd2UgZGlzdHJpYnV0ZSB3ZSBnZXQ6CisgICAgU2Vj
b25kcyByZXN1bHQgPSBtX211dGF0b3JUaW1lc2xpY2UgLyBtdXRhdG9yVXRpbGl6YXRpb24oKSAt
IG1fbXV0YXRvclRpbWVzbGljZTsKKyAgICAKKyAgICAvLyBUaGUgYWJvdmUgZW5zdXJlcyB0aGF0
IHdlIGRvbid0IHJ1biBvdXQgb2YgbWVtb3J5LiBCdXQgc29tZSBwcm9ncmFtcyByZXBlYXRlZGx5
IHN0b3JlIHRvCisgICAgLy8gc29tZSBvYmplY3RzIHdpdGhvdXQgc2lnbmlmaWNhbnRseSBncm93
aW5nIHRoZSBoZWFwLiBXZSBkb24ndCB3YW50IHRvIHJlcGVhdGVkbHkgcGF1c2UgdGhlCisgICAg
Ly8gcHJvZ3JhbSB0byBzY2FuIHNvbWUganVuayBvbmx5IHRvIHJlc3VtZSwgaGF2ZSBhIGJhcnJp
ZXIgZmlyZSwgYW5kIHRoZW4gaGF2ZSB0byBkbyBpdCBhbGwKKyAgICAvLyBvdmVyIGFnYWluLiBU
aGlzIGlzIGEgcG93ZXJmdWwgZ3VhcmFudGVlIGFnYWluc3QgdGhpczogZXZlcnkgdGltZSB0aGF0
IHdlIHJlYWxpemUgdGhhdCB0aGUKKyAgICAvLyB3YXZlZnJvbnQgaGFzIHJldHJlYXRlZCAod2Ug
cmFuIG91dCBvZiB3b3JrIGV4Y2VwdCBmcm9tIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGdyZXllZCBi
eQorICAgIC8vIHJlc3VtcHRpb24pLCB0aGlzIG1ha2VzIHVzIGdlb21ldHJpY2FsbHkgbW9yZSBh
Z2dyZXNzaXZlLgorICAgIHJlc3VsdCAqPSBtX3JldHJlYXRNdWx0aXBsaWVyOworICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQzMykJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6MjEw
NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBIZWFwOworCitjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgeworcHVi
bGljOgorICAgIGNsYXNzIERlY2lzaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9CisgICAgICAg
IAorICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAg
ICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAgICBT
ZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0OworICAgICAgICBkb3VibGUgcGhhc2UoKSBj
b25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKKyAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0
aW1lVG9TdG9wKCkgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CisKKyAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVy
KiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKKyAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgeyAwIH07CisgICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAgfTsK
KyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBH
QyBjeWNsZS4KKyAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIAorICAgIC8vIEZv
cmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cuCisgICAgdm9pZCBzbmFwUGhhc2UoKTsK
KyAgICAKKyAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGlu
ZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCisgICAgLy8gU3BhY2VU
aW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4K
KyAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIERlY2lzaW9uOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNlY29uZHMgbV9w
ZXJpb2Q7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmlu
ZzsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOworICAgIE1v
bm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMg
KzI1LDUzIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUu
aD4KKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29uZHMu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGltZVNj
aGVkdWxlciB7CisvLyBUaGUgSlNDIGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRoZSB3
b3JsZCBpbiBvcmRlciB0byBzdGF5IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAorLy8g
c3ludGhldGljIHBhdXNlcyBlbnN1cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBvbmUg
aHVnZSBwYXVzZSBpbiBvcmRlciB0byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcgd2F2
ZWZyb250LiBUaGUgc2NoZWR1bGVyIGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBpdCBs
aW5rcyB0aGUgYW1vdW50IG9mIHRpbWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBmb3Ig
dG8gdGhlIGFtb3VudCBvZiBzcGFjZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2UgdGhl
IEdDIGN5Y2xlCisvLyBiZWdhbi4KKworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlciA6
IHB1YmxpYyBNdXRhdG9yU2NoZWR1bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lvbiB7
Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3NjaGVkdWxlcjsgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdldE11
dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVjdG9y
VXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoKSBj
b25zdDsKLSAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hvdWxk
QmVSZXN1bWVkKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkg
Y29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAgICAg
ICAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVy
OwotCi0gICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRyIH07
Ci0gICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAgICAg
ICBNb25vdG9uaWNUaW1lIG1fbm93OwotICAgIH07Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0IHRo
ZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCi0gICAgU3BhY2VUaW1lU2No
ZWR1bGVyKEhlYXAmKTsKLSAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8gc3Rh
cnQgbm93LgotICAgIHZvaWQgc25hcFBoYXNlKCk7Ci0gICAgCi0gICAgLy8gUmV0dXJucyBhIHNu
YXBzaG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwgYmUg
dmFsaWQgc28gbG9uZyBhcwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFuZCB5
b3UgaGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERlY2lz
aW9uKCk7CisgICAgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJik7CisgICAgflNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIAorICAgIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkgb3ZlcnJpZGU7CisgICAg
CisgICAgdm9pZCBkaWRTdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVzdW1lKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCB3YXZlZnJvbnREaWRSZXRyZWF0KCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgb3ZlcnJpZGU7CisgICAgTW9ub3RvbmljVGlt
ZSB0aW1lVG9SZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGxvZygpIG92ZXJyaWRl
OworICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOwogICAgIAogcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgRGVjaXNpb247Ci0KKyAgICBkb3VibGUgYnl0ZXNTaW5jZUJl
Z2lubmluZ09mQ3ljbGUoKTsKKyAgICBkb3VibGUgbWF4SGVhZHJvb20oKTsKKyAgICBkb3VibGUg
aGVhZHJvb21GdWxsbmVzcygpOworICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24oKTsKKyAg
ICBTZWNvbmRzIHN0b3BEdXJhdGlvbigpOworICAgIAogICAgIEhlYXAmIG1faGVhcDsKLSAgICBT
ZWNvbmRzIG1fcGVyaW9kOwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmc7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVu
ZDsKLSAgICBNb25vdG9uaWNUaW1lIG1faW5pdGlhbFRpbWU7CisgICAgU2Vjb25kcyBtX211dGF0
b3JUaW1lc2xpY2U7CisgICAgU3RhdGUgbV9zdGF0ZSB7IE5vcm1hbCB9OworICAgIGRvdWJsZSBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgeyAwIH07CisgICAgZG91Ymxl
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCB7IDAgfTsKKyAgICBkb3VibGUgbV9y
ZXRyZWF0TXVsdGlwbGllciB7IDEgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BhY2VUaW1lU2No
ZWR1bGVyLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxp
emF0aW9uKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUg
PQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgbWF4
SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0gICAgICAgIGJ5
dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0gICAgLy8gaGVh
ZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYK
LSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdl
IHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZlbmRzIGFnYWlu
c3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEoaGVhZHJvb21G
dWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAgaWYgKCEo
aGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Ci0g
ICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNz
OwotICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBl
cm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAgT3B0aW9u
czo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0aWxpemF0
aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigp
IC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Ci0g
ICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91YmxlIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotfQotCi1TZWNv
bmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1f
c2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVj
dG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0
TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0
b3JVdGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFzaG91bGRCZVJl
c3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkp
Ci0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXIt
Pm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hl
ZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLX0KLQotTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFw
c2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hl
ZHVsZXItPm1fcGVyaW9kOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVk
dWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQot
ICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRo
ZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAg
ICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwotfQotCi12b2lk
IFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRpYWxUaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24g
U3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQotewotICAgIERlY2lzaW9uIHJl
c3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0g
ICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgotI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBI
ZWFwOwotCi1jbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgewotcHVibGljOgotICAgIGNsYXNzIERl
Y2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUg
dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRD
b2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBl
cmlvZCgpIGNvbnN0OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9v
bCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9S
ZXN1bWUoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7
Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVT
Y2hlZHVsZXI7Ci0KLSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51
bGxwdHIgfTsKLSAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07
Ci0gICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25z
dHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFj
ZVRpbWVTY2hlZHVsZXIoSGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFz
ZSB0byBzdGFydCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1
cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2gg
d2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxp
dmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJy
ZW50RGVjaXNpb24oKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERlY2lzaW9u
OwotCi0gICAgSGVhcCYgbV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91Ymxl
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0
aWFsVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUgU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUg
PT0gTm9ybWFsKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKworTW9ub3RvbmljVGltZSBT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQorewor
ICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkg
OiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7CisgICAgcmV0dXJu
IG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6bm93KCkgOiBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9
PSBTdG9wcGVkKTsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIFRoZSBKU0MgY29uY3VycmVudCBHQyByZWxpZXMgb24gc3RvcHBpbmcgdGhlIHdvcmxkIHRv
IHN0YXkgYWhlYWQgb2YgdGhlIHJldHJlYXRpbmcgd2F2ZWZyb250LgorLy8gSXQgc28gaGFwcGVu
cyB0aGF0IHRoZSBzYW1lIEFQSSBjYW4gYmUgcmV1c2VkIHRvIGltcGxlbWVudCBhIG5vbi1jb25j
dXJyZW50IEdDIG1vZGUsIHdoaWNoIHdlCisvLyB1c2Ugb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qg
c3VwcG9ydCB0aGUgR0MncyBhdG9taWNpdHkgcHJvdG9jb2xzLiBUaGF0IG1lYW5zIGFueXRoaW5n
IG90aGVyCisvLyB0aGFuIFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMgc2NoZWR1bGVyIGlzIGEgZHJv
cC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGNvbmN1cnJlbnQgR0MncworLy8gU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3VtZSB0aGUgd29ybGQg
b25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZE11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7CitwdWJsaWM6Cisg
ICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgflN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIFN0YXRlIHN0
YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBv
dmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsK
KyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZv
aWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0YXRlIG1fc3Rh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKK3B1YmxpYzoKKyAgICBWaXNpdGluZ1RpbWVv
dXQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CisgICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKKyAgICAg
ICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCisgICAgICAgICwg
bV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRD
b3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2
aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKKyAgICB9CisKKyAgICBi
b29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9y
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0
b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAgc2l6ZV90IG1fdmlzaXRD
b3VudEJlZm9yZSB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0
aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICBpZiAoV1RGOjpudW1iZXJPZlByb2Nlc3Nv
ckNvcmVzKCkgPCA0KSB7CiAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSA9IDAuNjsKICAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSA9
IDEuNDsKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSA9IDEwOworICAg
ICAgICBPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSA9IDU7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTA0MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMSw4ICsyMDEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsK
ICAgICB2KGRvdWJsZSwgbWluaW11bU11dGF0b3JVdGlsaXphdGlvbiwgMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDAuNywgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbmN1cnJlbnRHQ01heEhlYWRyb29tLCAx
LjUsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NQZXJpb2RN
UywgMiwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBjb2xsZWN0b3JTaG91bGRSZXN1
bWVGaXJzdCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoZG91YmxlLCBtdXRhdG9y
VGltZXNsaWNlTVMsIDEsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoZG91YmxlLCByZXRyZWF0
aW5nV2F2ZWZyb250TXVsdGlwbGllciwgMS4zLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRv
dWJsZSwgY29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0
cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298250</attachid>
            <date>2017-01-06 19:44:59 -0800</date>
            <delta_ts>2017-01-07 11:05:59 -0800</delta_ts>
            <desc>giving up on the new scheduler</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>137622</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVuYyhjb2RlQmxv
Y2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICsz
NTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29k
ZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2Nr
cyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lk
IFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5s
b2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0
b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0
YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21w
aWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0
aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAg
IHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBG
dW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQog
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsxMTIsNiBAQCBi
b29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xk
Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmco
SGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVj
dXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhl
Y3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8vIEFkZCBhbGwg
Y3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVkIHNldCB0byBi
ZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9uLgotICAgIHZv
aWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAgIHZvaWQgY2xl
YXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTG9ja0hv
bGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcsOSBAQCBwdWJs
aWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2
aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQg
aXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAg
IC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKLSAgICAgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYpOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1ICs2MCwzMCBA
QCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50
bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxv
Y2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSw0MiBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBl
bmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwordm9pZCBIZWFw
Ojphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQoreworICAgIGJvb2wgb2sgPSB0cnVlOwor
ICAgIAorICAgIGlmICghbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewor
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogU2hhcmVkIGNvbGxlY3RvciBtYXJrIHN0YWNrIG5vdCBl
bXB0eSEgSXQgaGFzICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxl
bWVudHMuXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhTG9nKCJG
QVRBTDogU2hhcmVkIG11dGF0b3IgbWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBlbGVtZW50cy5cbiIpOworICAgICAgICBv
ayA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKIHZv
aWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIFRpbWlu
Z1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhw
b2ludCIpOwpAQCAtNTYwLDEzMyArNTY2LDgwIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQo
ZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAotICAg
IFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWludFNl
dC0+cmVzZXRTdGF0cygpOworICAgIAorICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24o
KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXItPmxvZygp
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUJvb3RzdHJhcChzbG90VmlzaXRv
ciwgbV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgpKTsKKworICAgIC8vIEFmdGVyIHRoaXMsIHdl
IHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWxsIHRocm91Z2ggYWxsIG9mIHRoZSAic2xvdFZpc2l0
b3IuaXNFbXB0eSgpIgorICAgIC8vIGNoZWNrcyBiZWNhdXNlIGJvb3RzdHJhcCB3b3VsZCBoYXZl
IHB1dCB0aGluZ3MgaW50byB0aGUgdmlzaXRvci4gU28sIHdlIHNob3VsZCBmYWxsCisgICAgLy8g
dGhyb3VnaCB0byBkcmFpbmluZy4KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9
IDE7IDsgKytpdGVyYXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKLSAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6
Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAgICAgICAgICBtX29iamVj
dFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7Ci0gICAgICAgICAgICBDb25zZXJ2
YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7Ci0gICAgICAgICAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgICAgICBnYXRoZXJT
dGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlckpTU3RhY2tS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNo
IGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCi0gICAgICAgIC8vIGFsbCBvZiB0aGVt
LgotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKLSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAg
IGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2Nv
cGUpKQotICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDog
bV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChwYWlyLmtleSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQg
JiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAg
ICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwor
ICAgICAgICAgICAgYm9vbCBleGVjdXRlZEV2ZXJ5dGhpbmcgPQorICAgICAgICAgICAgICAgIG1f
Y29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBtX3NjaGVkdWxl
ci0+dGltZVRvUmVzdW1lKCkpOworICAgICAgICAgICAgaWYgKGV4ZWN1dGVkRXZlcnl0aGluZyAm
JiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRTaGFyZWRN
YXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xv
dFZpc2l0b3IpOwotICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKLQot
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmls
ZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7Ci0g
ICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2Vz
KCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7Ci0g
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMo
KTsKICAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgIG1fdm0t
PnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9y
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKLQotICAgICAgICBzbG90VmlzaXRvci5tZXJn
ZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFyYWxsZWxWaXNp
dG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKLQotICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwotICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVy
ZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsK
LSAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgc2xvdFZpc2l0b3IpOwotICAgICAg
ICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1wdHkoKSAmJiBtX211dGF0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9y
LmRyYWluSW5QYXJhbGxlbChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxS
ZXN1bWUoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nKHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwg
IisiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJr
U3RhY2soKS5zaXplKCksICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQs
ICIga2IsIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVu
dERlY2lzaW9uKCkudGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAg
ICBkb3VibGUgdGhpc1BhdXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1l
KS5taWxsaXNlY29uZHMoKTsKKyAgICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMs
ICIgbXMgKG1heCAiLCBtYXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZh
dGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAg
ICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0
byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgLy8gc28gdGhh
dCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRo
aXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKLSAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBv
dGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2Fu
dCB0byBkbyB0aGlzCi0gICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGlu
ZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0Ci0g
ICAgICAgIC8vIEdDLgotICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRs
eUV4ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0p
OwotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3Mg
YXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQot
ICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCi0g
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRs
ZXM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgICAg
IAorICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQ7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CiAgICAgICAgICAgICBQYXJhbGxlbE1v
ZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlQ29sbGVjdG9yVGltZXNsaWNpbmcoKSkgewotICAgICAgICAgICAg
ICAgIHNjaGVkdWxlci5zbmFwUGhhc2UoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRlY2lzaW9uID0gc2NoZWR1
bGVyLmN1cnJlbnREZWNpc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVjaXNpb24u
c2hvdWxkQmVSZXN1bWVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2Nv
cGUoKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gc2xv
dFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KGRlY2lzaW9uLnRpbWVUb1N0b3AoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ID09IFNsb3RWaXNp
dG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0IG1heWJlIHRoZSBzY2hl
ZHVsZXIgZG9lcyBub3Qgd2FudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRzIHNjaGVkdWxlZElk
bGUgPSBkZWNpc2lvbi50aW1lVG9TdG9wKCkgLSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5IHVuY2xlYXIgd2hhdCB0
aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzaG91bGQgYmUsIG90aGVyIHRoYW4gaXQgc2hvdWxkIGJlIGdyZWF0
ZXIgdGhhbiAwLiBZb3UgY291bGQgZXZlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhcmd1ZSBmb3IgaXQgYmVpbmcgZ3JlYXRlciB0aGFuIDEuIFdlIHNob3VsZCB0dW5lIGl0
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcChzY2hlZHVsZWRJZGxlICog
T3B0aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2Vjb25kcyB3YWtlVXBMYXRlbmN5ID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBkZWNp
c2lvbi50aW1lVG9TdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdha2VV
cExhdGVuY3kgPj0gMV9tcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Zygid3VsIT0iLCB3YWtlVXBMYXRlbmN5Lm1pbGxpc2Vjb25kcygpLCAiIG1zICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVs
KGRlY2lzaW9uLnRpbWVUb1Jlc3VtZSgpKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChkcmFp
blJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEaXNhYmxpbmcgY29sbGVjdG9yIHRp
bWVzbGljaW5nIGlzIG1lYW50IHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAotICAgICAgICAgICAg
ICAgIC8vIC0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIHRvIG1heGltaXplIHRoZSBvcHBvcnR1
bml0eSBmb3IgaGFybWZ1bCByYWNlcy4KLSAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNj
b3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmRyYWluSW5QYXJhbGxlbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZHJhaW5S
ZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkobV9zY2hlZHVsZXIt
PnRpbWVUb1N0b3AoKSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhaW5SZXN1bHQgPT0g
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAgICAgICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0IG1heWJlIHRoZSBzY2hlZHVsZXIgZG9lcyBu
b3Qgd2FudAorICAgICAgICAgICAgLy8gdGhhdC4KKyAgICAgICAgICAgIFNlY29uZHMgc2NoZWR1
bGVkSWRsZSA9IG1fc2NoZWR1bGVyLT50aW1lVG9TdG9wKCkgLSBNb25vdG9uaWNUaW1lOjpub3co
KTsKKyAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdoYXQgdGhlIHZhbHVlIG9m
IGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KKyAgICAgICAgICAgIC8vIHNob3VsZCBiZSwgb3Ro
ZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIFlvdSBjb3VsZCBldmVuCisgICAg
ICAgICAgICAvLyBhcmd1ZSBmb3IgaXQgYmVpbmcgZ3JlYXRlciB0aGFuIDEuIFdlIHNob3VsZCB0
dW5lIGl0LgorICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAqIE9wdGlvbnM6OmNvbGxl
Y3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RvcFRoZVdvcmxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgICAgIGRhdGFMb2coIltHQzogIik7CisgICAgICAgIAorICAgICAgICBtX3NjaGVk
dWxlci0+ZGlkU3RvcCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBtX3NjaGVkdWxlci0+bG9nKCk7CiAgICAgfQorICAgIAorICAgIG1fc2No
ZWR1bGVyLT5lbmRDb2xsZWN0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTY5NCw2ICs2NDcsMTIgQEAgdm9pZCBI
ZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICBtX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxwZXJDbGllbnQuZmlu
aXNoKCk7CisKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAg
ICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgd3JpdGVCYXJy
aWVyKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgICAgICAKICAgICB1cGRhdGVPYmplY3RD
b3VudHMoZ2NTdGFydFRpbWUpOwogICAgIGVuZE1hcmtpbmcoKTsKIH0KQEAgLTczMiwyNSArNjkx
LDYgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9
IDA7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVS
b290cyYgcm9vdHMpCi17Ci0gICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5kKHJvb3Rz
KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVu
Y2VzKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6
Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRy
aWVzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTg1MCw4ICs3OTAsNyBAQCB2b2lkIEhl
YXA6OmVuZE1hcmtpbmcoKQogICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCi0g
ICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
OworICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJr
aW5nKCk7CkBAIC0xMTM2LDcgKzEwNzUsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgp
CiAgICAgCiAgICAgd2lsbFN0YXJ0Q29sbGVjdGlvbihzY29wZSk7CiAgICAgY29sbGVjdEltcGxU
aW1pbmdTY29wZS5zZXRTY29wZSgqdGhpcyk7Ci0gICAgICAgIAorICAgIAogICAgIGdjU3RhcnRU
aW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBpZiAobV92ZXJp
ZmllcikgewogICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJvbSB0aGUgbGFz
dCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CkBAIC0xMTQ2LDExICsxMDg1LDEx
IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAgICAgbV92ZXJpZmllci0+aW5p
dGlhbGl6ZUdDQ3ljbGUoKTsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVjdHMo
SGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQotICAgICAgICAKKyAg
ICAKICAgICBwcmVwYXJlRm9yTWFya2luZygpOwotICAgICAgICAKKyAgICAKICAgICBtYXJrVG9G
aXhwb2ludChnY1N0YXJ0VGltZSk7Ci0gICAgICAgIAorICAgIAogICAgIGlmIChtX3ZlcmlmaWVy
KSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6
UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFwVmVy
aWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMTE2Niw4ICsxMTA1LDExIEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCk7CiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgbm90
aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIAotICAgIG1fY29kZUJsb2Nrcy0+d3Jp
dGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgIAorICAgIG1fY29kZUJsb2Nr
cy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZygKKyAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgeworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgICAg
IH0pOwogICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKICAgICAg
ICAgCiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwpAQCAtMTM1NCw2
ICsxMjk2LDcgQEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICAKICAgICBo
YW5kbGVHQ0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgIG1fbXV0YXRv
ckRpZFJ1biA9IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNp
Z25lZCBvbGRTdGF0ZSkKQEAgLTEzNjYsNyArMTMwOSw3IEBAIGJvb2wgSGVhcDo6c3RvcElmTmVj
ZXNzYXJ5U2xvdyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0
YXRlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCEob2xkU3RhdGUgJiBz
aG91bGRTdG9wQml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYg
IW1fc2NoZWR1bGVyLT5zaG91bGRTdG9wKCkpIHsKICAgICAgICAgaWYgKCEob2xkU3RhdGUgJiBz
dG9wcGVkQml0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV93b3JsZFN0
YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+c3RvcHBlZEJp
dCk7CkBAIC0xNDM5LDYgKzEzODIsNyBAQCB2b2lkIEhlYXA6OmFjcXVpcmVBY2Nlc3NTbG93KCkK
ICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBu
ZXdTdGF0ZSkpIHsKICAgICAgICAgICAgIGhhbmRsZUdDRGlkSklUKCk7CiAgICAgICAgICAgICBo
YW5kbGVOZWVkRmluYWxpemUoKTsKKyAgICAgICAgICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDc1LDEwICsyMDE5
LDEwIEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHMKIH0KICNlbmRp
ZgogCi1ib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKK3ZvaWQgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIGlmICghY2FuQ29s
bGVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAoZGVmZXJyYWxDb250ZXh0KSB7CiAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91
bGRHQyB8PQpAQCAtMjA4NywxMyArMjAzMSwxMyBAQCBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoR0NECiAgICAgICAgIHN0b3BJZk5lY2Vzc2FyeSgpOwogICAgIAogICAgIGlm
ICghc2hvdWxkQ29sbGVjdEhldXJpc3RpYygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGRlZmVycmFs
Q29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CiAgICAgZWxzZQogICAgICAgICBjb2xsZWN0QXN5
bmMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm47CiB9CiAKIHZvaWQgSGVhcDo6Y29s
bGVjdEFjY29yZGluZ1RvRGVmZXJHQ1Byb2JhYmlsaXR5KCkKQEAgLTIxNTgsOCArMjEwMiwxNTQg
QEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8v
IFVTRShDRikKIAordm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQoKQoreworICAgIG1fY29u
c3RyYWludFNldCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCk7Cisg
ICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDcyIsICJDb25zZXJ2YXRp
dmUgU2NhbiIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJn
ZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsK
KyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsK
KyAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsK
KyAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
KyAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAg
ICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAg
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9LAorICAg
ICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgICAgICBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CisjZW5kaWYKKworICAgICAg
ICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rp
b25TY29wZSkpCisgICAgICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQorICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21h
cmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90
VmlzaXRvcik7CisgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkQiLCAiRGVidWdn
ZXIiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0JikgeworI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAg
ICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxp
bmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAg
ICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90
VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJK
c3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgbV9qaXRT
dHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldzIiwgIldlYWsgU2V0cyIs
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9w
YXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAg
ICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0
ZXJzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0
V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5n
Q29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMi
LAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJP
ZldvcmtsaXN0cygpOyBpLS07KQorICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVj
ZXNzYXJ5LgorICAgICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAg
ICAgICAgICAgICptX3ZtLAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAg
IH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworI2VuZGlm
CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDYiIsICJDb2RlQmxv
Y2tzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKKyAgICAgICAgICAgICAgICBbJl0gKENv
ZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBD
b2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseU9s
ZE9yQmxhY2spCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29u
c3RyYWludChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAg
ICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiTW1zIiwgIk11dGF0b3IgTWFyayBTdGFjayIs
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhh
dCB3ZSBpbnRyb2R1Y2VkIHdvcmshCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENv
dW50KHNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9y
Lm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImKSAtPiBkb3VibGUgeworICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVk
QnlFeGVjdXRpb24pOworfQorCiB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiB7
CisgICAgYnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCiAgICAgbV9pc1NhZmVUb0NvbGxlY3Qg
PSB0cnVlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03Myw4ICs3
MywxMCBAQCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xh
c3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIE1h
cmtpbmdDb25zdHJhaW50U2V0OworY2xhc3MgTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFNsb3RW
aXNpdG9yOwotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworY2xhc3MgU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAg
LTIwMyw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIHRoaXMgd2lsbCB3YWl0IGZvciB0
aGF0IGJhY2tsb2cgYmVmb3JlIHJ1bm5pbmcgaXRzIEdDIGFuZCByZXR1cm5pbmcuCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0U3luYyhzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25T
Y29wZT4gPSBzdGQ6Om51bGxvcHQpOwogICAgIAotICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsgLy8gUmV0dXJucyB0cnVlIGlm
IGl0IGRpZCBjb2xsZWN0LgorICAgIHZvaWQgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0Rl
ZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICB2b2lkIGNvbGxlY3RBY2NvcmRpbmdUb0Rl
ZmVyR0NQcm9iYWJpbGl0eSgpOwogCiAgICAgdm9pZCBjb21wbGV0ZUFsbEpJVFBsYW5zKCk7CkBA
IC0zNDEsNiArMzQzLDkgQEAgcHVibGljOgogICAgIC8vIGFscmVhZHkgYmUgY2FsbGVkIGZvciB5
b3UgYXQgdGhlIHJpZ2h0IHRpbWVzLgogICAgIHZvaWQgc3RvcElmTmVjZXNzYXJ5KCk7CiAgICAg
CisgICAgLy8gRklYTUUKKyAgICB2b2lkIHN0b3BJZlJlcXVpcmVkQnlTY2hlZHVsZXIoKTsKKyAg
ICAKICAgICAvLyBUaGlzIGlzIGEgbXVjaCBzdHJvbmdlciBraW5kIG9mIHN0b3BwaW5nIG9mIHRo
ZSBjb2xsZWN0b3IsIGFuZCBpdCBtYXkgcmVxdWlyZSB3YWl0aW5nIGZvciBhCiAgICAgLy8gd2hp
bGUuIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBsZWdhY3kgQVBJIGZvciBjbGllbnRzIG9mIGNvbGxl
Y3RBbGxHYXJiYWdlIHRoYXQgZXhwZWN0IHRoYXQgdGhlcmUKICAgICAvLyBpcyBubyBHQyBiZWZv
cmUgb3IgYWZ0ZXIgdGhhdCBmdW5jdGlvbiBjYWxsLiBBZnRlciBjYWxsaW5nIHRoaXMsIHlvdSBh
cmUgZnJlZSB0byBzdGFydCBHQ3MKQEAgLTM3Niw3ICszODEsNyBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2Nr
OwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU3BhY2VU
aW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNsYXNz
IEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKQEAgLTQxMyw5ICs0MTgsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVX
b3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgZnJpZW5k
IGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRv
cigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDU1LDcgKzQ1Nyw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290
cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xp
c3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RF
bnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KTsKQEAgLTQ5OCw2ICs0OTksMTYgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNl
dE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxk
Q29uc3RyYWludFNldCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5j
Jik7CisgICAgCisgICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAogICAg
IGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsK
QEAgLTUzNCw2ICs1NDUsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
bG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKIAogICAgIC8vIFdl
IHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMu
IEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBh
bmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1l
bW9yeSBmcm9tCkBAIC02MTUsNiArNjI4LDggQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRl
cm5hbE1lbW9yeVNpemUgeyAwIH07CiAjZW5kaWYKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TXV0YXRvclNjaGVkdWxlcj4gbV9zY2hlZHVsZXI7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNob3VsZFN0b3BCaXQgPSAxdSA8PCAwdTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc3RvcHBlZEJpdCA9IDF1IDw8IDF1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNB
Y2Nlc3NCaXQgPSAxdSA8PCAydTsKQEAgLTYzMCw2ICs2NDUsNyBAQCBwcml2YXRlOgogICAgIFRp
Y2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsgMCB9OwogICAgIGJvb2wgbV90aHJlYWRTaG91bGRT
dG9wIHsgZmFsc2UgfTsKICAgICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX211dGF0b3JEaWRSdW4geyB0cnVlIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFk
TG9jazsKICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRp
dGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBub3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVz
ZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFya2luZ0NvbnN0
cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxp
dHkpCisgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25h
bWUoV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0
ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJr
aW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248
ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgVm9s
YXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWRO
YW1lKQorICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlv
bihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRp
bGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25z
dHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7
CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAg
ICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOworICAgIFZpc2l0aW5nVGltZW91dCB2aXNp
dGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOworICAgIG1f
ZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7CisgICAgbV9sYXN0Vmlz
aXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOworICAgIGRpZFZp
c2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3Ip
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZp
c2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKK2NsYXNzIFNsb3RW
aXNpdG9yOworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIGVudW0gVm9sYXRpbGl0eSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBpbnRyb2R1Y2UgYSBuZXcga2luZCBvZiB2b2xhdGlsaXR5IGNhbGxlZCBHcmV5ZWRCeVJlc3Vt
cHRpb24sIHdoaWNoCisgICAgICAgIC8vIHdvdWxkIG1lYW4gcnVubmluZyBhbGwgb2YgdGhlIHRp
bWVzIHRoYXQgR3JleWVkQnlFeGVjdXRpb24gcnVucyBleGNlcHQgYXMgYSByb290IGluIGEKKyAg
ICAgICAgLy8gZnVsbCBHQy4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBjb25zdHJhaW50IG5l
ZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueXRpbWUgdGhlIG11dGF0b3IgcnVuczogc28gYXQgR0Mg
c3RhcnQgYW5kCisgICAgICAgIC8vIHdoZW5ldmVyIHRoZSBHQyByZXN1c3BlbmRzIGFmdGVyIGEg
cmVzdW1wdGlvbi4gVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHNvbWV0aGluZyB0aGF0CisgICAgICAg
IC8vIHlvdSdkIGNhbGwgYSAicm9vdCIgaW4gYSB0cmFkaXRpb25hbCBHQy4KKyAgICAgICAgR3Jl
eWVkQnlFeGVjdXRpb24sCisgICAgICAgIAorICAgICAgICAvLyBUaGUgY29uc3RyYWludCBuZWVk
cyB0byBiZSByZWV2YWx1YXRlZCBhbnkgdGltZSBhbnkgb2JqZWN0IGlzIG1hcmtlZCBhbmQgYW55
dGltZSB0aGUKKyAgICAgICAgLy8gbXV0YXRvciByZXN1bWVzLgorICAgICAgICBHcmV5ZWRCeU1h
cmtpbmcKKyAgICB9OworICAgIAorICAgIE1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIFZvbGF0
aWxpdHkpOworICAgIAorICAgIE1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248
ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB+
TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICBjb25zdCBjaGFyKiBhYmJyZXZpYXRlZE5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2FiYnJldmlhdGVkTmFtZS5kYXRhKCk7IH0KKyAgICBjb25zdCBj
aGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQorICAgIAorICAgIHZv
aWQgcmVzZXRTdGF0cygpOworICAgIAorICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoU2xv
dFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0
KTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisgICAgeworICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uKHZpc2l0b3IpOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50
KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKKyAgICB9CisgICAgCisgICAgVm9sYXRp
bGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQg
Y2FuIHNldCBtX2luZGV4LgorICAgIAorICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9
OworICAgIENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CisgICAgQ1N0cmluZyBtX25hbWU7Cisg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0
aW1lb3V0KT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZp
c2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworICAgIFZvbGF0aWxpdHkgbV92
b2xhdGlsaXR5OworICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisj
aW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQgeworcHVi
bGljOgorICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKKyAgICAgICAgOiBtX3Nl
dChzZXQpCisgICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCisgICAgICAgICwgbV90aW1lb3V0
KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5n
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOworICAg
IH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAg
IH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KKyAgICBib29s
IGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4IDogdW5leGVjdXRlZCkgeworICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7CisgICAg
ICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRU
aW1lT3V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KKworICAgIHZv
aWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBtX3NldC5tX3NldFtpbmRl
eF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwor
ICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRv
cjsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKKyAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OworfTsKKworTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK3sKK30KKworTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OnJlc2V0U3RhdHMoKQoreworICAgIG1fdW5leGVjdXRlZFJvb3RzLmNs
ZWFyQWxsKCk7CisgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5jbGVhckFsbCgpOworICAgIGZv
ciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KSB7CisgICAgICAgIGNvbnN0cmFpbnQtPnJlc2V0
U3RhdHMoKTsKKyAgICAgICAgc3dpdGNoIChjb25zdHJhaW50LT52b2xhdGlsaXR5KCkpIHsKKyAg
ICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb246CisgICAgICAg
ICAgICBtX3VuZXhlY3V0ZWRSb290cy5zZXQoY29uc3RyYWludC0+aW5kZXgoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJr
aW5nOgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocy5zZXQoY29uc3RyYWludC0+
aW5kZXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25z
dHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
ZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIEZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0
ZUZ1bmN0aW9uLAorICAgIEZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uLAorICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCit7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCit7CisgICAgY29uc3RyYWludC0+bV9p
bmRleCA9IG1fc2V0LnNpemUoKTsKKyAgICBtX29yZGVyZWQuYXBwZW5kKGNvbnN0cmFpbnQuZ2V0
KCkpOworICAgIGlmIChjb25zdHJhaW50LT52b2xhdGlsaXR5KCkgPT0gTWFya2luZ0NvbnN0cmFp
bnQ6OkdyZXllZEJ5TWFya2luZykKKyAgICAgICAgbV9vdXRncm93dGhzLmFwcGVuZChjb25zdHJh
aW50LmdldCgpKTsKKyAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7Cit9CisK
K2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVCb290c3RyYXAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICAvLyBCb290c3RyYXAgbWVh
bnMgdGhhdCB3ZSBoYXZlbid0IGRvbmUgYW55IG9iamVjdCB2aXNpdGluZyB5ZXQuIFRoaXMgbWVh
bnMgdGhhdCB3ZSB3YW50IHRvCisgICAgLy8gb25seSBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
KHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSB0aG9zZSB0aGF0IHdlIHNheSBhcmUgZ3JleWVkIGJ5
CisgICAgLy8gcmVzdW1wdGlvbiksIHNpbmNlIHRoZSBvdGhlciBjb25zdHJhaW50cyBhcmUgc3Vw
ZXIgdW5saWtlbHkgdG8gdHJpZ2dlciB3aXRob3V0IHNvbWUgb2JqZWN0CisgICAgLy8gdmlzaXRp
bmcuIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBnbyBzdHJhaWdodCB0
byBvYmplY3QgdmlzaXRpbmcgYWZ0ZXIKKyAgICAvLyB0aGlzLgorICAgIEV4ZWN1dGlvbkNvbnRl
eHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coImJvb3Q6Iik7CisgICAgYm9vbCByZXN1
bHQgPSBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKKyAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiICIpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShT
bG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGJvb2wg
cmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiICIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5j
aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQq
IG91dGdyb3d0aCA6IG1fb3V0Z3Jvd3RocykgeworICAgICAgICBpZiAob3V0Z3Jvd3RoLT53b3Jr
RXN0aW1hdGUodmlzaXRvcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
Cit7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzLCB2aXNpdG9y
LCB0aW1lb3V0KTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0
YUxvZygiY29udmVyZ2U6Iik7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRz
IHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVu
CisgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgorICAgIGlmICghZXhlY3V0aW9u
Q29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJl
ZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRv
IGJlIGZpeHBvaW50ZWQKKyAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRp
bCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5
CisgICAgLy8gc2lsZW50IGF0IHNvbWUgcG9pbnQgZHVyaW5nIEdDLCBhdCB3aGljaCBwb2ludCBp
dCBtYWtlcyBzZW5zZSBub3QgdG8gcnVuIHRoZW0gYWdhaW4gdW50aWwKKyAgICAvLyB0aGUgZW5k
LiBPdXRncm93dGhzIHByb2R1Y2luZyBuZXcgaW5mb3JtYXRpb24gY29ycmVzcG9uZHMgYWxtb3N0
IGV4YWN0bHkgdG8gdGhlIHdhdmVmcm9udAorICAgIC8vIGFkdmFuY2luZzogaXQgdXN1YWxseSBt
ZWFucyB0aGF0IHdlIGFyZSBtYXJraW5nIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgbWFya2VkIGJh
c2VkIG9uCisgICAgLy8gb3RoZXIgb2JqZWN0cyB0aGF0IHdlIHdvdWxkIGhhdmUgbWFya2VkIGFu
eXdheS4gT25jZSB0aGUgd2F2ZWZyb250IGlzIG5vIGxvbmdlciBhZHZhbmNpbmcsCisgICAgLy8g
d2Ugd2FudCB0byBydW4gbW9zdGx5IHRoZSByb290IGNvbnN0cmFpbnRzIChiYXNlZCBvbiB0aGVp
ciBwcmVkaWN0aW9ucyBvZiBob3cgbXVjaCB3b3JrCisgICAgLy8gdGhleSB3aWxsIGhhdmUpIGJl
Y2F1c2UgYXQgdGhpcyBwb2ludCB3ZSBhcmUganVzdCB0cnlpbmcgdG8gb3V0cGFjZSB0aGUgcmV0
cmVhdGluZworICAgIC8vIHdhdmVmcm9udC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGZ1bmN0aW9uIChleGVjdXRlQ29udmVyZ2VuY2VJbXBsKSBvbmx5IHJldHVybnMgdHJ1ZSBpZiBp
dCBydW5zIGFsbAorICAgIC8vIGNvbnN0cmFpbnRzLiBTbywgYWxsIHdlIGFyZSBjb250cm9sbGlu
ZyBhcmUgdGhlIGhldXJpc3RpY3MgdGhhdCBzYXkgd2hpY2ggY29uc3RyYWludHMgdG8KKyAgICAv
LyBydW4gZmlyc3QuIENob29zaW5nIHRoZSBjb25zdHJhaW50cyB0aGF0IGFyZSB0aGUgbW9zdCBs
aWtlbHkgdG8gcHJvZHVjZSBtZWFucyBydW5uaW5nIGZld2VyCisgICAgLy8gY29uc3RyYWludHMg
YmVmb3JlIHJldHVybmluZy4KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nID0gdGhpcy0+
aXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7CisgICAgCisgICAgc3RkOjpzb3J0KAorICAg
ICAgICBtX29yZGVyZWQuYmVnaW4oKSwgbV9vcmRlcmVkLmVuZCgpLAorICAgICAgICBbJl0gKE1h
cmtpbmdDb25zdHJhaW50KiBhLCBNYXJraW5nQ29uc3RyYWludCogYikgLT4gYm9vbCB7CisgICAg
ICAgICAgICAvLyBSZW1lbWJlcjogcmV0dXJuIHRydWUgaWYgYSBzaG91bGQgY29tZSBiZWZvcmUg
Yi4KKyAgICAgICAgICAgIGlmIChhLT52b2xhdGlsaXR5KCkgIT0gYi0+dm9sYXRpbGl0eSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzV2F2ZWZyb250QWR2YW5jaW5nKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOyAvLyBHcmV5
ZWRCeU1hcmtpbmcgc2hvdWxkIGNvbWUgYmVmb3JlIEdyZXllZEJ5RXhlY3V0aW9uLgorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHko
KSA8IGItPnZvbGF0aWxpdHkoKTsgLy8gR3JleWVkQnlFeGVjdXRpb24gc2hvdWxkIGNvbWUgYmVm
b3JlIEdyZXllZEJ5TWFya2luZy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIGEtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSA+IGItPndvcmtFc3RpbWF0ZSh2
aXNpdG9yKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCog
Y29uc3RyYWludCA6IG1fb3JkZXJlZCkgeworICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQt
PmluZGV4KCk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVj
dXRlKGkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQu
ZXhlY3V0ZShpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2Vu
Y2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFu
eXRpbWUKKyAgICAgICAgLy8gd2UgZmluZCB3b3JrLiBOb25ldGhlbGVzcywgd2Ugb25seSB3YW50
IGNvbnN0cmFpbnRzIHRvIGludGVycnVwdCB0aGVtc2VsdmVzIHVwb24KKyAgICAgICAgLy8gdGlt
ZW91dCAtIG5vdCBqdXN0IGJlY2F1c2UgdGhleSBmb3VuZCBzb21lIHdvcmsuCisgICAgICAgIC8v
IEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0
aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCisgICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4g
TWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKKyAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBp
cyBlbXB0eSwga2VlcCBydW5uaW5nLgorICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhh
cyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgorICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGls
IHRpbWVvdXQuCisgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKKyAg
ICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKKyAgICAgICAgY29uc3RyYWludC0+ZXhl
Y3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coIiAiKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25z
dHJhaW50U2V0IHsKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIH5N
YXJraW5nQ29uc3RyYWludFNldCgpOworICAgIAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAg
IAorICAgIHZvaWQgYWRkKAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKKyAgICAg
ICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xh
dGlsaXR5KTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9u
PGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0
aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3Ry
YWludD4pOworICAgIAorICAgIC8vIEFzc3VtaW5nIHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBh
bGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlvdSBhIGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKKyAg
ICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBhZHZhbmNpbmcuCisgICAgYm9vbCBpc1dhdmVmcm9u
dEFkdmFuY2luZyhTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5n
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJldHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlz
aXRvcik7IH0KKyAgICAKKyAgICAvLyBFeGVjdXRlcyBvbmx5IHJvb3RzLiBSZXR1cm5zIHRydWUg
aWYgYWxsIHJvb3RzIGhhdmUgYmVlbiBleGVjdXRlZC4gSXQncyBleHBlY3RlZAorICAgIC8vIHRo
YXQgeW91J2xsIGRvIHNvbWUgZHJhaW5pbmcgYWZ0ZXIgdGhpcyBhbmQgdGhlbiB1c2UgZXhlY3V0
ZUNvbnZlcmdlbmNlKCkuCisgICAgYm9vbCBleGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiwg
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAg
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25zdHJhaW50cyB3ZXJlIGV4ZWN1dGVkLiBU
aGlzIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeQorICAgIC8vIHZpc2l0ZWQgcm9vdHMgYW5k
IGRyYWluZWQgZnJvbSB0aGVyZS4KKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKKyAgICAg
ICAgU2xvdFZpc2l0b3ImLAorICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3Ry
YWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCisgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RW
aXNpdG9yJik7CisgICAgCitwcml2YXRlOgorICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7Cisg
ICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgCisgICAgYm9vbCBleGVjdXRl
Q29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAg
ICAKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9y
JiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGlu
Zyk7CisgICAgCisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOworICAgIEJpdFZlY3Rv
ciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKKyAgICBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiBt
X29yZGVyZWQ7CisgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4gbV9vdXRncm93dGhzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIK
KworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK011dGF0b3JTY2hlZHVsZXI6Ok11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitN
dXRhdG9yU2NoZWR1bGVyOjp+TXV0YXRvclNjaGVkdWxlcigpCit7Cit9CisKK3ZvaWQgTXV0YXRv
clNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6d2ls
bFJlc3VtZSgpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6ZGlkRXhlY3V0ZUNvbnN0
cmFpbnRzKCkKK3sKK30KKwordm9pZCBNdXRhdG9yU2NoZWR1bGVyOjpsb2coKQoreworfQorCiti
b29sIE11dGF0b3JTY2hlZHVsZXI6OnNob3VsZFN0b3AoKQoreworICAgIHJldHVybiBoYXNFbGFw
c2VkKHRpbWVUb1N0b3AoKSk7Cit9CisKK2Jvb2wgTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkUmVz
dW1lKCkKK3sKKyAgICByZXR1cm4gaGFzRWxhcHNlZCh0aW1lVG9SZXN1bWUoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRh
dG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TXV0YXRvclNjaGVkdWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgTXV0YXRvclNjaGVkdWxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TXV0YXRvclNjaGVkdWxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIE5vcm1hbCwgLy8gTm90IGNvbGxlY3RpbmcuCisg
ICAgICAgIFN0b3BwZWQsCisgICAgICAgIFJlc3VtZWQKKyAgICB9OworICAgIAorICAgIE11dGF0
b3JTY2hlZHVsZXIoKTsKKyAgICB2aXJ0dWFsIH5NdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisg
ICAgdmlydHVhbCBTdGF0ZSBzdGF0ZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5Db2xsZWN0aW9uKCkgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9w
KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZXN1bWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RXhlY3V0ZUNvbnN0cmFpbnRzKCk7CisgICAgCisgICAgdmlydHVhbCBNb25vdG9uaWNUaW1lIHRp
bWVUb1N0b3AoKSA9IDA7IC8vIENhbGwgd2hpbGUgcmVzdW1lZCwgdG8gYXNrIHdoZW4gdG8gc3Rv
cC4KKyAgICB2aXJ0dWFsIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgPSAwOyAvLyBDYWxs
IHdoaWxlIHN0b3BwZWQsIHRvIGFzayB3aGVuIHRvIHJlc3VtZS4KKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgbG9nKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRTdG9wKCk7IC8vIENhbGwgd2hpbGUg
cmVzdW1lZCwgdG8gYXNrIGlmIHdlIHNob3VsZCBzdG9wIG5vdy4KKyAgICBib29sIHNob3VsZFJl
c3VtZSgpOyAvLyBDYWxsIHdoaWxlIHN0b3BwZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgcmVzdW1l
IG5vdy4KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ29sbGVjdGlvbigpID0gMDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9P
cGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
T3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksMTEgKzU5LDExIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwogICAgIH0K
IAotICAgIHZvaWQgYWRkKHZvaWQqIHJvb3QpCisgICAgYm9vbCBhZGQodm9pZCogcm9vdCkKICAg
ICB7CiAgICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJpZWRSb290KQogICAgICAgICAgICAg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0gICAgICAgIG1fcm9vdHMuYWRkKHJv
b3QpOworICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKICAgICB9
CiAKICAgICBpbnQgc2l6ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDcs
NiArMzQ3LDExIEBAIHByaXZhdGU6CiAgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKIH07CiAK
K3ZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgIHZpc2l0Q2hpbGRy
ZW4oY2VsbCk7Cit9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGls
ZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CkBAIC00NjEsNyArNDY2LDcgQEAgdm9pZCBTbG90
VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogICAgIAogICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9yaWdodFRvUnVuKTsKICAgICAKLSAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNl
ZCh0aW1lb3V0KSkgeworICAgIHdoaWxlICghaGFzRWxhcHNlZCh0aW1lb3V0KSkgewogICAgICAg
ICB1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGxvY2tlcik7CiAgICAgICAgIGlmICghbV9jb2xsZWN0
b3JTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxs
KCk7CkBAIC00NzYsNyArNDgxLDggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3Rvbmlj
VGltZSB0aQogICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJl
ck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0
b3JTdGFjay5yZW1vdmVMYXN0KCkpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAg
ZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KQEAgLTQ4NiwxMiArNDkyLDE4IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKIAogYm9vbCBTbG90VmlzaXRvcjo6
ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiB7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKKyAgICByZXR1cm4gaXNFbXB0eSgpICYmIGRpZFJlYWNoVGVybWluYXRp
b24obG9ja2VyKTsKK30KKworYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihj
b25zdCBMb2NrSG9sZGVyJikKK3sKICAgICByZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzCiAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjay0+aXNFbXB0eSgpCiAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKTsKIH0KIAotYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yaygpCitib29sIFNs
b3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIHJldHVybiAhbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKQEAgLTUxOCwxMiArNTMw
LDEyIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
bm90aWZ5QWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNXb3JrKGxvY2tlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0
KTsKQEAgLTUzNCwxMyArNTQ2LDEzIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBT
bG90VmlzaXQKICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbigpKQor
ICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGlt
ZW91dCwKLSAgICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoYXNXb3JrKCkKKyAgICAgICAgICAgICAgICAgICAgWyZdIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKQEAgLTU4OSw3ICs2MDEsNyBAQCBT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgIGlmIChoYXNF
bGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpU
aW1lZE91dDsKICAgICAgICAgCi0gICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsK
KyAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKSkgewogICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAg
ICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICB9CkBAIC02MDUsMTMg
KzYxNywxMyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAv
LyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5t
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAgbV92aXNpdENvdW50ICs9IG1faGVhcC5t
X29wYXF1ZVJvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFy
ZWQgb25lIGV2ZXJ5IG9uY2UgaW4KICAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgogICAgIG1lcmdlT3BhcXVlUm9vdHNJ
ZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICBtX3Zpc2l0
Q291bnQgKz0gbV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KKyAgICAKKyAgICB2b2lkIGFkZFRv
VmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsgbV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAg
ICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlk
UmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICB2b2lkIGRpZE5vdFJhY2Uo
Y29uc3QgVmlzaXRSYWNlS2V5Jik7CiAgICAgdm9pZCBkaWROb3RSYWNlKEpTQ2VsbCogY2VsbCwg
Y29uc3QgY2hhciogcmVhc29uKSB7IGRpZE5vdFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNv
bikpOyB9CisgICAgCisgICAgdm9pZCB2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsK
KyAgICAKKyAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKQEAgLTE4MCw4ICsxODYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIHZvaWQgZG9uYXRlS25v
d25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKICAg
ICAKLSAgICBib29sIGhhc1dvcmsoKTsKLSAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsK
KyAgICBib29sIGhhc1dvcmsoY29uc3QgTG9ja0hvbGRlciYpOworICAgIGJvb2wgZGlkUmVhY2hU
ZXJtaW5hdGlvbihjb25zdCBMb2NrSG9sZGVyJik7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQzMykJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcDoyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1
bGVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitk
b3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0
aW9uKCkgY29uc3QKK3sKKyAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQor
ICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBkb3VibGUgbWF4SGVh
ZHJvb20gPQorICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICAKKyAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9CisgICAgICAgIGJ5dGVz
U2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207CisgICAgCisgICAgLy8gaGVhZHJv
b21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAg
ICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNl
ZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKKyAgICAvLyBkZWZlbmRzIGFnYWluc3Qg
YWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCisgICAgCisgICAgaWYgKCEoaGVhZHJvb21GdWxs
bmVzcyA+PSAwKSkKKyAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7CisgICAgaWYgKCEoaGVh
ZHJvb21GdWxsbmVzcyA8PSAxKSkKKyAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7CisgICAg
CisgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOwor
ICAgIAorICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1p
dHRlZCB3aW5kb3cuCisgICAgbXV0YXRvclV0aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6
bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9u
ICogKAorICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0K
KyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAg
CisgICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKK30KKworZG91YmxlIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworfQorCitTZWNvbmRz
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZDsKK30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNp
b246OnBoYXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3Nj
aGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK2Jvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lv
bjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpOworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRCZVJlc3Vt
ZWQoKSk7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisg
ICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1f
cGVyaW9kOworICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3Rv
bmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xs
ZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2Vk
SW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXph
dGlvbigpOworICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kOworfQorCitTcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxl
cihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRz
Ojpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQorICAg
ICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVu
ZCgKKyAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCisgICAgICAg
IHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
LCBoZWFwLm1fbWF4RWRlblNpemUpKQoreworICAgIHNuYXBQaGFzZSgpOworfQorCit2b2lkIFNw
YWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKK3sKKyAgICBtX2luaXRpYWxUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7Cit9CisKK1NwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQoreworICAgIERlY2lzaW9uIHJlc3Vs
dDsKKyAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOworICAgIHJlc3VsdC5tX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAg
cmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lv
biAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCwxMDQgKzI0LDE5NSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKyNpbmNs
dWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QKK1NwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoSGVhcCYgaGVhcCkKKyAgICA6IG1f
aGVhcChoZWFwKQorICAgICwgbV9tdXRhdG9yVGltZXNsaWNlKFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoT3B0aW9uczo6bXV0YXRvclRpbWVzbGljZU1TKCkpKQogewotICAgIGRvdWJsZSBieXRl
c1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OwotICAgIAotICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9v
bUZ1bGxuZXNzID0KLSAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFk
cm9vbTsKLSAgICAKLSAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVy
IGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29k
ZQotICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAg
ICAKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1
bGxuZXNzID0gMDsKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBo
ZWFkcm9vbUZ1bGxuZXNzID0gMTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9u
ID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Cit9CisKK1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6
On5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6
U3RhdGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0YXRlOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJlZ2lu
Q29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwpOwor
ICAgIG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgPSBt
X2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVFbmQgPSAKKyAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJv
b20oKSAqCisgICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nLCBtX2hlYXAubV9tYXhFZGVuU2l6ZSk7CiAgICAgCi0gICAgLy8gU2Nh
bGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAg
ICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0
aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAg
ICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAgICAgICAgT3B0
aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICBtX3JldHJlYXRNdWx0aXBs
aWVyID0gMTsKKyAgICBtX3JldHJlYXRGcmVlYmllcyA9IE9wdGlvbnM6OnJldHJlYXRpbmdXYXZl
ZnJvbnRGcmVlYmllcygpOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmRp
ZFN0b3AoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0
YXRlID09IFJlc3VtZWQpOworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6d2lsbFJlc3VtZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9w
cGVkIHx8IG1fc3RhdGUgPT0gUmVzdW1lZCk7CisgICAgbV9zdGF0ZSA9IFJlc3VtZWQ7CisgICAg
bV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyOjp3YXZlZnJvbnREaWRSZXRyZWF0KCkKK3sKKyAgICAvLyBJdCBkb2Vz
bid0IG1ha2Ugc2Vuc2UgdG8gc3RhcnQgdGhlIGdlb21ldHJpYyBwcm9ncmVzc2lvbiB1bnRpbCBv
bmUgZnJlZWJpZSBydW4gb2YgdGhlCisgICAgLy8gcmV0cmVhdGluZyB3YXZlZnJvbnQgY29uc3Ry
YWludHMsIHNpbmNlIG9mdGVuIGV2ZW4gYSBzaG9ydCBwYXVzZSBpcyBzdWZmaWNpZW50LgorICAg
IGlmIChtX3JldHJlYXRGcmVlYmllcykgeworICAgICAgICBtX3JldHJlYXRGcmVlYmllcy0tOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRp
b247CisgICAgbV9yZXRyZWF0TXVsdGlwbGllciAqPSBPcHRpb25zOjpyZXRyZWF0aW5nV2F2ZWZy
b250TXVsdGlwbGllcigpOwogfQogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lv
bjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAorTW9ub3RvbmljVGltZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkKIHsKLSAgICByZXR1cm4gMSAtIHRh
cmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNh
c2UgTm9ybWFsOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKTsKKyAg
ICBjYXNlIFN0b3BwZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJldHVybiBtX3N0YXJ0VGltZSArIG1fbXV0YXRvclRp
bWVzbGljZTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgpOwogfQogCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0CitNb25vdG9uaWNUaW1lIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCiB7Ci0gICAgcmV0dXJuICht
X25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3Blcmlv
ZDsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vcm1hbDoKKyAgICBjYXNlIFJl
c3VtZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFN0
b3BwZWQ6CisgICAgICAgIHJldHVybiBtX3N0YXJ0VGltZSArIHN0b3BEdXJhdGlvbigpOworICAg
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBN
b25vdG9uaWNUaW1lKCk7CiB9CiAKLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
OjpwaGFzZSgpIGNvbnN0Cit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmxvZygpCiB7
Ci0gICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOwor
ICAgIEFTU0VSVChPcHRpb25zOjpsb2dHQygpKTsKKyAgICBkYXRhTG9nKAorICAgICAgICAiYT0i
LCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoKSAvIDEwMjQpLCAi
IGtiICIsCisgICAgICAgICJoZj0iLCBmb3JtYXQoIiUuM2xmIiwgaGVhZHJvb21GdWxsbmVzcygp
KSwgIiAiLAorICAgICAgICAibXU9IiwgZm9ybWF0KCIlLjNsZiIsIG11dGF0b3JVdGlsaXphdGlv
bigpKSwgIiAiLAorICAgICAgICAidHA9IiwgZm9ybWF0KCIlLjNsZiIsIHN0b3BEdXJhdGlvbigp
Lm1pbGxpc2Vjb25kcygpKSwgIiBtcyAiKTsKIH0KIAotYm9vbCBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKIHsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpOworICAgIG1fc3RhdGUgPSBOb3JtYWw7CisgICAgbV9zdGFydFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVs
ZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAorZG91YmxlIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OmJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKCkKIHsKLSAgICBBU1NFUlQo
IXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVz
dW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9k
KCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigp
OworICAgIHJldHVybiBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFj
ZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK2RvdWJsZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptYXhIZWFkcm9vbSgpCiB7Ci0gICAgQVNTRVJUKHNob3Vs
ZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmly
c3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVk
dWxlci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4g
bV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICBy
ZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNl
VGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3Bl
cmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1Blcmlv
ZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhl
YXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20o
KSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorZG91YmxlIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OmhlYWRyb29tRnVsbG5lc3MoKQogewotICAgIHNuYXBQaGFzZSgpOworICAg
IGRvdWJsZSByZXN1bHQgPSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSgpIC8gbWF4SGVhZHJv
b20oKTsKKworICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50
ZXJlc3RpbmcgdGhpbmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisg
ICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgorICAgIAor
ICAgIGlmICghKHJlc3VsdCA+PSAwKSkKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBpZiAoIShy
ZXN1bHQgPD0gMSkpCisgICAgICAgIHJlc3VsdCA9IDE7CisKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKK2RvdWJsZSBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjptdXRhdG9yVXRpbGl6YXRpb24oKQogewotICAgIG1faW5pdGlh
bFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0
aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3MoKTsKKyAgICAKKyAgICAvLyBTY2FsZSB0aGUgbXV0
YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgIG11dGF0b3JV
dGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24o
KSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgIE9wdGlvbnM6
Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICBPcHRpb25zOjptaW5p
bXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJldHVybiBtdXRhdG9yVXRpbGl6
YXRpb247CiB9CiAKLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1
bGVyOjpjdXJyZW50RGVjaXNpb24oKQorU2Vjb25kcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjpzdG9wRHVyYXRpb24oKQogewotICAgIERlY2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9z
Y2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0g
bV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdHdvIHRoaW5nczoKKyAg
ICAvLyAtIE11dGF0b3IgZ2V0cyB0byBhbHdheXMgcnVuIGZvciBtX211dGF0b3JUaW1lc2xpY2Uu
CisgICAgLy8gLSBUaGUgcmF0aW8gYmV0d2VlbiBtdXRhdG9yIHJlc3VtZSB0aW1lIGFuZCBtdXRh
dG9yIHN0b3AgdGltZSBpcyBnb3Zlcm5lZCBhcyBmb2xsb3dzLgorICAgIC8vCisgICAgLy8gSWYg
d2UgcmVzdW1lIGZvciB0aGlzIGFtb3VudDoKKyAgICAvLworICAgIC8vICAgICBDICogbXV0YXRv
clV0aWxpemF0aW9uCisgICAgLy8KKyAgICAvLyBGb3Igc29tZSBjb25zdGFudCBDLCB0aGVuIHdl
IG11c3Qgc3RvcCBmb3IgdGhpcyBhbW91bnQ6CisgICAgLy8KKyAgICAvLyAgICAgQyAqICgxIC0g
bXV0YXRvclV0aWxpemF0aW9uKQorICAgIC8vCisgICAgLy8gSW4gb3RoZXIgd29yZHMsIHdlIHdh
bnQgdGhlIHJhdGlvIG9mIHJlc3VtZSB0aW1lIChudW1lcmF0b3IpIHRvIHN0b3AgdGltZSAoZGVu
b21pbmF0b3IpCisgICAgLy8gdG8gYmU6CisgICAgLy8KKyAgICAvLyAgICAgbXV0YXRvclV0aWxp
emF0aW9uIC8gKDEgLSBtdXRhdG9yVXRpbGl6YXRpb24pCisgICAgLy8KKyAgICAvLyBGb3IgZXhh
bXBsZSwgaWYgd2UgcmVzdW1lZCB0aGUgbXV0YXRvciBmb3IgWCB0aW1lIHRoZW4gd2Ugd291bGQg
ZGl2aWRlIFggYnkgdGhlIGFib3ZlCisgICAgLy8gcXVhbnRpdHkgdG8gZ2V0IHRoZSBhbW91bnQg
b2YgdGltZSB3ZSBzaG91bGQgc3RvcCBmb3IuCisgICAgLy8KKyAgICAvLyBUaGlzIGltcGxpZXMg
dGhhdCBpZiB3ZSByZXN1bWUgZm9yIG1fbXV0YXRvclRpbWVzbGljZSAoYXMgdGhpcyBzY2hlZHVs
ZXIgYWx3YXlzIGRvZXMpCisgICAgLy8gdGhlbiB3ZSBzaG91bGQgc3RvcCBmb3I6CisgICAgLy8K
KyAgICAvLyAgICAgbV9tdXRhdG9yVGltZXNsaWNlIC8gKG11dGF0b3JVdGlsaXphdGlvbiAvICgx
IC0gbXV0YXRvclV0aWxpemF0aW9uKSkKKyAgICAvLworICAgIC8vIFdoaWNoIHNpbXBsaWZpZXMg
dG86CisgICAgLy8KKyAgICAvLyAgICAgbV9tdXRhdG9yVGltZXNsaWNlICogKDEgLSBtdXRhdG9y
VXRpbGl6YXRpb24pIC8gbXV0YXRvclV0aWxpemF0aW9uCisgICAgLy8KKyAgICAvLyBBbmQgdGhl
biBpZiB3ZSBkaXN0cmlidXRlIHdlIGdldDoKKyAgICBTZWNvbmRzIHJlc3VsdCA9IG1fbXV0YXRv
clRpbWVzbGljZSAvIG11dGF0b3JVdGlsaXphdGlvbigpIC0gbV9tdXRhdG9yVGltZXNsaWNlOwor
ICAgIAorICAgIC8vIFRoZSBhYm92ZSBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgcnVuIG91dCBvZiBt
ZW1vcnkuIEJ1dCBzb21lIHByb2dyYW1zIHJlcGVhdGVkbHkgc3RvcmUgdG8KKyAgICAvLyBzb21l
IG9iamVjdHMgd2l0aG91dCBzaWduaWZpY2FudGx5IGdyb3dpbmcgdGhlIGhlYXAuIFdlIGRvbid0
IHdhbnQgdG8gcmVwZWF0ZWRseSBwYXVzZSB0aGUKKyAgICAvLyBwcm9ncmFtIHRvIHNjYW4gc29t
ZSBqdW5rIG9ubHkgdG8gcmVzdW1lLCBoYXZlIGEgYmFycmllciBmaXJlLCBhbmQgdGhlbiBoYXZl
IHRvIGRvIGl0IGFsbAorICAgIC8vIG92ZXIgYWdhaW4uIFRoaXMgaXMgYSBwb3dlcmZ1bCBndWFy
YW50ZWUgYWdhaW5zdCB0aGlzOiBldmVyeSB0aW1lIHRoYXQgd2UgcmVhbGl6ZSB0aGF0IHRoZQor
ICAgIC8vIHdhdmVmcm9udCBoYXMgcmV0cmVhdGVkICh3ZSByYW4gb3V0IG9mIHdvcmsgZXhjZXB0
IGZyb20gY29uc3RyYWludHMgdGhhdCBhcmUgZ3JleWVkIGJ5CisgICAgLy8gcmVzdW1wdGlvbiks
IHRoaXMgbWFrZXMgdXMgZ2VvbWV0cmljYWxseSBtb3JlIGFnZ3Jlc3NpdmUuCisgICAgcmVzdWx0
ICo9IG1fcmV0cmVhdE11bHRpcGxpZXI7CisgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuaAkocmV2aXNpb24gMjEwNDMzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaDoyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7
CisKK2NsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgY2xhc3MgRGVjaXNp
b24geworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSB0YXJn
ZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgZG91YmxlIHRhcmdldENvbGxl
Y3RvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9k
KCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OworICAgICAgICBib29sIHNo
b3VsZEJlUmVzdW1lZCgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3Vt
ZSgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBjb25zdDsKKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVk
dWxlcjsKKworICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0
ciB9OworICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAgfTsKKyAg
ICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKKyAgICB9OworICAgIAorICAgIC8vIENvbnN0cnVj
dCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgorICAgIFNwYWNlVGlt
ZVNjaGVkdWxlcihIZWFwJik7CisgICAgCisgICAgLy8gRm9yY2VzIHRoZSBuZXh0IHBoYXNlIHRv
IHN0YXJ0IG5vdy4KKyAgICB2b2lkIHNuYXBQaGFzZSgpOworICAgIAorICAgIC8vIFJldHVybnMg
YSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3aGljaCB3aWxs
IGJlIHZhbGlkIHNvIGxvbmcgYXMKKyAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIgaXMgbGl2ZSBh
bmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgorICAgIERlY2lzaW9uIGN1cnJlbnRE
ZWNpc2lvbigpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRGVjaXNpb247CisK
KyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2Vjb25kcyBtX3BlcmlvZDsKKyAgICBkb3VibGUgbV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIGRvdWJsZSBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7CisgICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxU
aW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHJldmlz
aW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsNTUgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgIk11dGF0b3JT
Y2hlZHVsZXIuaCIKICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSGVhcDsKIAotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKKy8vIFRoZSBKU0Mg
Y29uY3VycmVudCBHQyBzb21ldGltZXMgc3RvcHMgdGhlIHdvcmxkIGluIG9yZGVyIHRvIHN0YXkg
YWhlYWQgb2YgaXQuIFRoZXNlIGRlbGliZXJhdGUsCisvLyBzeW50aGV0aWMgcGF1c2VzIGVuc3Vy
ZSB0aGF0IHRoZSBHQyB3b24ndCBoYXZlIHRvIGRvIG9uZSBodWdlIHBhdXNlIGluIG9yZGVyIHRv
IGNhdGNoIHVwIHRvIHRoZQorLy8gcmV0cmVhdGluZyB3YXZlZnJvbnQuIFRoZSBzY2hlZHVsZXIg
aXMgY2FsbGVkICJzcGFjZS10aW1lIiBiZWNhdXNlIGl0IGxpbmtzIHRoZSBhbW91bnQgb2YgdGlt
ZQorLy8gdGhhdCB0aGUgd29ybGQgaXMgcGF1c2VkIGZvciB0byB0aGUgYW1vdW50IG9mIHNwYWNl
IHRoYXQgdGhlIHdvcmxkIGFsbG9jYXRlZCBzaW5jZSB0aGUgR0MgY3ljbGUKKy8vIGJlZ2FuLgor
CitjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyIDogcHVibGljIE11dGF0b3JTY2hlZHVs
ZXIgewogcHVibGljOgotICAgIGNsYXNzIERlY2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9
Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29u
c3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0Owot
ICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0OwotICAgICAgICBkb3VibGUg
cGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKLSAg
ICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKLSAgICAgICAgTW9ub3Rv
bmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7Ci0KLSAgICAgICAgU3BhY2VUaW1l
U2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKLSAgICAgICAgZG91YmxlIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Ci0gICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7
Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3Rh
cnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOwotICAgIAot
ICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cuCi0gICAgdm9pZCBzbmFw
UGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQg
c2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAg
Ly8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFw
UGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsKKyAgICBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyKEhlYXAmKTsKKyAgICB+U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcigp
OworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9p
ZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRpZFN0b3AoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxF
eGVjdXRlQ29uc3RyYWludHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhdmVmcm9udERpZFJldHJl
YXQoKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVy
cmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAor
ICAgIHZvaWQgbG9nKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkg
b3ZlcnJpZGU7CiAgICAgCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKLQor
ICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSgpOworICAgIGRvdWJsZSBtYXhI
ZWFkcm9vbSgpOworICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzKCk7CisgICAgZG91YmxlIG11
dGF0b3JVdGlsaXphdGlvbigpOworICAgIFNlY29uZHMgc3RvcER1cmF0aW9uKCk7CisgICAgCiAg
ICAgSGVhcCYgbV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91YmxlIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGlt
ZTsKKyAgICBTZWNvbmRzIG1fbXV0YXRvclRpbWVzbGljZTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsg
Tm9ybWFsIH07CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZyB7IDAgfTsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5k
IHsgMCB9OworICAgIGRvdWJsZSBtX3JldHJlYXRNdWx0aXBsaWVyIHsgMSB9OworICAgIHVuc2ln
bmVkIG1fcmV0cmVhdEZyZWViaWVzIHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRp
bWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGFjZVRp
bWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9y
VXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZD
eWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBtX3NjaGVkdWxlci0+
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJs
ZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzID0KLSAgICAg
ICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKLSAgICAKLSAgICAv
LyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5n
cyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVy
by4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQotICAgIC8vIGRlZmVuZHMg
YWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAgICAKLSAgICBpZiAoIShoZWFk
cm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKLSAgICBp
ZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0g
MTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29tRnVs
bG5lc3M7Ci0gICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0
aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICBP
cHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9yVXRp
bGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0
aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigp
KTsKLSAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOwotfQotCi1kb3VibGUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci19Ci0K
LVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRpbWUp
ICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVy
OjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAotewotICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2Qo
KSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotYm9vbCBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAotewotICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gcGhhc2UoKSA8PSB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gcGhhc2UoKSA+IHRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXNob3Vs
ZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmly
c3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVk
dWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBt
X3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQot
Ci1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0b3Ao
KSBjb25zdAotewotICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0TXV0YXRv
clV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6U3BhY2VUaW1l
U2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fcGVyaW9k
KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMo
KSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcoaGVhcC5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoK
LSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCi17Ci0gICAgc25hcFBoYXNlKCk7Ci19Ci0K
LXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQotewotICAgIG1faW5pdGlhbFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQotU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lvbigpCi17Ci0gICAgRGVjaXNp
b24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7Ci0gICAgcmVzdWx0Lm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShub25l
eGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNU
aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIEhlYXA7Ci0KLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7Ci1wdWJsaWM6Ci0gICAgY2xh
c3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KLSAgICAgICAgCi0gICAgICAgIGRv
dWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgZG91YmxlIHRh
cmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFNlY29uZHMgZWxhcHNl
ZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OwotICAgICAg
ICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBj
b25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNl
VGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVy
IHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7
IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKLSAgICB9OwotICAgIAotICAgIC8v
IENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgotICAg
IFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAgCi0gICAgLy8gRm9yY2VzIHRoZSBuZXh0
IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNuYXBQaGFzZSgpOwotICAgIAotICAgIC8v
IFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3
aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIg
aXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgotICAgIERlY2lzaW9u
IGN1cnJlbnREZWNpc2lvbigpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGVj
aXNpb247Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25kcyBtX3BlcmlvZDsKLSAgICBk
b3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIGRvdWJs
ZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBt
X2luaXRpYWxUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6On5TeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjpTdGF0ZSBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9z
dGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworfQorCitNb25vdG9uaWNU
aW1lIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvU3RvcCgp
Cit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSA6IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitNb25vdG9uaWNUaW1lIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBy
ZXR1cm4gbV9zdGF0ZSA9PSBOb3JtYWwgPyBNb25vdG9uaWNUaW1lOjpub3coKSA6IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCk7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0
YXRlID09IFN0b3BwZWQpOworICAgIG1fc3RhdGUgPSBOb3JtYWw7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiTXV0YXRvclNjaGVkdWxlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gVGhlIEpTQyBjb25jdXJyZW50IEdDIHJlbGllcyBvbiBzdG9wcGluZyB0aGUgd29y
bGQgdG8gc3RheSBhaGVhZCBvZiB0aGUgcmV0cmVhdGluZyB3YXZlZnJvbnQuCisvLyBJdCBzbyBo
YXBwZW5zIHRoYXQgdGhlIHNhbWUgQVBJIGNhbiBiZSByZXVzZWQgdG8gaW1wbGVtZW50IGEgbm9u
LWNvbmN1cnJlbnQgR0MgbW9kZSwgd2hpY2ggd2UKKy8vIHVzZSBvbiBwbGF0Zm9ybXMgdGhhdCBk
b24ndCBzdXBwb3J0IHRoZSBHQydzIGF0b21pY2l0eSBwcm90b2NvbHMuIFRoYXQgbWVhbnMgYW55
dGhpbmcgb3RoZXIKKy8vIHRoYW4gWDg2LTY0IGFuZCBBUk02NC4gVGhpcyBzY2hlZHVsZXIgaXMg
YSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgY29uY3VycmVudCBHQydzCisvLyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLiBJdCB0ZWxscyB0aGUgR0MgdG8gbmV2ZXIgcmVzdW1lIHRoZSB3
b3JsZCBvbmNlIHRoZSBHQyBjeWNsZSBiZWdpbnMuCisKK2NsYXNzIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1bGVyIHsKK3B1Ymxp
YzoKKyAgICBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICB+
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgU3Rh
dGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJlZ2luQ29sbGVjdGlv
bigpIG92ZXJyaWRlOworICAgIAorICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIG92ZXJy
aWRlOworICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgU3RhdGUg
bV9zdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBWaXNpdGluZ1RpbWVvdXQgeworcHVibGljOgorICAgIFZpc2l0aW5n
VGltZW91dCgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKKyAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQor
ICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICAg
ICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCB2
aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOworICAgIH0KKwor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZp
c2l0b3IpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmco
dmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBzaXplX3QgbV92
aXNpdENvdW50QmVmb3JlIHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSwxMCBA
QCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICBpZiAoV1RGOjpudW1iZXJPZlBy
b2Nlc3NvckNvcmVzKCkgPCA0KSB7CiAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRp
bGl6YXRpb24oKSA9IDAuNjsKICAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJv
b20oKSA9IDEuNDsKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSA9IDEw
OworICAgICAgICBPcHRpb25zOjptdXRhdG9yVGltZXNsaWNlTVMoKSA9IDU7CiAgICAgfQorICAg
IAorICAgIE9wdGlvbnM6OmNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpID0gMDsKIH0KIAog
c3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw5
ICsyMDEsMTAgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihkb3Vi
bGUsIG1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoZG91YmxlLCBtYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uLCAwLjcsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NNYXhIZWFkcm9vbSwgMS41LCBOb3JtYWws
IG51bGxwdHIpIFwKLSAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDUGVyaW9kTVMsIDIsIE5vcm1h
bCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgY29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGRvdWJsZSwgY29sbGVjdG9yUGVybWl0dGVk
SWRsZVJhdGlvLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGRvdWJsZSwgbXV0YXRvclRp
bWVzbGljZU1TLCAxLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGRvdWJsZSwgcmV0cmVhdGlu
Z1dhdmVmcm9udE11bHRpcGxpZXIsIDEuMSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdih1bnNp
Z25lZCwgcmV0cmVhdGluZ1dhdmVmcm9udEZyZWViaWVzLCAxLCBOb3JtYWwsIG51bGxwdHIpIFwK
KyAgICB2KGRvdWJsZSwgY29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvLCAxLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAw
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298280</attachid>
            <date>2017-01-07 11:05:59 -0800</date>
            <delta_ts>2017-01-07 11:05:59 -0800</delta_ts>
            <desc>reverted to the old scheduling algorithm</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136063</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDk3LDYgKzQ5Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01h
cmtlZFNwYWNlLmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCisgICAgaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFi
b3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFEQ0FEQzMzMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CkBAIC00
NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3
NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYz
MUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWly
QXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCAq
LzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNDFF
MDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJMEY2NjBFMzkx
RTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYy
QyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNBMUUwNTE3QzEw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIwMEExMSAvKiBD
b2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5l
cy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJG
MTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0LDggQEAKIAkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9Owog
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJ
MEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRD
MzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87
IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRG
NjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlE
QzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3Bw
ICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUzN0MyQ0IwMDBG
OTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0aCA9IGRmZy9E
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzkyMUUx
NzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJ
bmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1MTdCODAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMsOCArMzIxNSw4
IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQjFERkU2
RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3
RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyog
QjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzS2luZC5j
cHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc1MSw4
ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNl
LmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAq
LywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
aCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywK
KwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJ
CQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAgLTU3NjEsMTQg
KzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVy
LmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAwOThDQzEyIC8q
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0
cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3Bw
ICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywK
IAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC02OTk1LDYg
KzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywK
IAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCTBGMUZC
Mzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJ
MEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5N0YzQzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBG
REIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3OTc4LDcgQEAK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIz
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNv
ZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAogCQkJCUExRDc5
MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1h
dFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFDMDI0QTQ5MDAy
NDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3MTEsNyBAQAog
CQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAu
aCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNCMjNFMDBGQzYx
MTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMz
OTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBl
clNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdF
QzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3
NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5
MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
NkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0
MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUx
MDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRCMzFEMUREQUQ5
MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzQ2
LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkRF
ODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMgLyogTWFy
a2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAw
RDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9
CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQot
ewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdD
b2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENv
ZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBT
bywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwg
b3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw4IEBA
IHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBDb21waWxhdGlv
bktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBGdW5jJik7CiAg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAg
IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVuYyhjb2RlQmxv
Y2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI4ICsz
NTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0OjptYXJrQ29k
ZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2Nr
cyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiB2b2lk
IFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5zaW9uTG9jay5s
b2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9
IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29y
a2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAg
ICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQotfQotCiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0
b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7
CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0
YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21w
aWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0
aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiB2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAg
IHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nr
c0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBG
dW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQog
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsxMTIsNiBAQCBi
b29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0dXJuIG1fb2xk
Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nrcy5jb250YWlu
cyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNvZGVCbG9jayk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmco
SGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVj
dXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3VycmVudGx5RXhl
Y3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8vIEFkZCBhbGwg
Y3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVkIHNldCB0byBi
ZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9uLgotICAgIHZv
aWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAgIHZvaWQgY2xl
YXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgTG9ja0hv
bGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcsOSBAQCBwdWJs
aWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2
aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQg
aXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgogICAg
IC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKLSAgICAgICAg
ICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYpOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJlbnRseUV4ZWN1
dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1ICs2MCwzMCBA
QCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAgbV9jdXJyZW50
bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRvJiBjb2RlQmxv
Y2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUg
IlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgorI2luY2x1
ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRvdWJsZSB0
aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVibGljOgot
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVh
cCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxv
ZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMp
LCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsKLX07Ci0K
LW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlwZSwgc2l6
ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpAQCAtMzE2
LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1ha2luZyB0
aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAgIG1fc2No
ZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
ICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05leHQoKSkg
ewpAQCAtNTExLDYgKzQ4MSw0MiBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
ICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJy
ZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKCpt
X3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29kZUJsb2Nr
czsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBl
bmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwordm9pZCBIZWFw
Ojphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQoreworICAgIGJvb2wgb2sgPSB0cnVlOwor
ICAgIAorICAgIGlmICghbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewor
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogU2hhcmVkIGNvbGxlY3RvciBtYXJrIHN0YWNrIG5vdCBl
bXB0eSEgSXQgaGFzICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxl
bWVudHMuXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhTG9nKCJG
QVRBTDogU2hhcmVkIG11dGF0b3IgbWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBlbGVtZW50cy5cbiIpOworICAgICAgICBv
ayA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKIHZv
aWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIFRpbWlu
Z1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhw
b2ludCIpOwpAQCAtNTYwLDEzMyArNTY2LDcwIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQo
ZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKIAotICAg
IFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3RyYWludFNl
dC0+cmVzZXRTdGF0cygpOworICAgIAorICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxlY3Rpb24o
KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXItPmxvZygp
OworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUJvb3RzdHJhcChzbG90VmlzaXRv
ciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgbV9zY2hlZHVsZXItPmRpZEV4ZWN1
dGVDb25zdHJhaW50cygpOworCisgICAgLy8gQWZ0ZXIgdGhpcywgd2Ugd2lsbCBhbG1vc3QgY2Vy
dGFpbmx5IGZhbGwgdGhyb3VnaCBhbGwgb2YgdGhlICJzbG90VmlzaXRvci5pc0VtcHR5KCkiCisg
ICAgLy8gY2hlY2tzIGJlY2F1c2UgYm9vdHN0cmFwIHdvdWxkIGhhdmUgcHV0IHRoaW5ncyBpbnRv
IHRoZSB2aXNpdG9yLiBTbywgd2Ugc2hvdWxkIGZhbGwKKyAgICAvLyB0aHJvdWdoIHRvIGRyYWlu
aW5nLgogICAgIAogICAgIGZvciAodW5zaWduZWQgaXRlcmF0aW9uID0gMTsgOyArK2l0ZXJhdGlv
bikgewogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgICAgIGRhdGFMb2co
ImkjIiwgaXRlcmF0aW9uLCAiICIpOwotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29w
ZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQg
Y29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZv
ckNvbnNlcnZhdGl2ZVNjYW4oKTsKLSAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNl
cnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2Vy
dmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIE5vdyB3ZSB2aXNp
dCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0
aW9uIGp1c3QgcmV2aXNpdHMKLSAgICAgICAgLy8gYWxsIG9mIHRoZW0uCi0jaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKLSAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgc2xv
dFZpc2l0b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fdm0tPnNtYWxs
U3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgICAg
ICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsK
LSAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsK
LSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0
LT5zaXplKCkpCi0gICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNs
b3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdFZp
c2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgICAgICBhc3NlcnRTaGFyZWRN
YXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBib29s
IGV4ZWN1dGVkRXZlcnl0aGluZyA9CisgICAgICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5l
eGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkp
OworICAgICAgICAgICAgaWYgKGV4ZWN1dGVkRXZlcnl0aGluZyAmJiBzbG90VmlzaXRvci5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwotICAgICAg
ICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKLQotI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKLSAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7Ci0gICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKICAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgCi0gICAgICAgIGlmICht
X3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygp
LT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1fdm0tPnNo
YWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNs
b3RWaXNpdG9yKTsKLQotICAgICAgICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVs
U2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKTsKLQotICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMo
c2xvdFZpc2l0b3IpOwotICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAg
dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgREZHOjptYXJr
Q29kZUJsb2NrcygqbV92bSwgc2xvdFZpc2l0b3IpOwotICAgICAgICBib29sIHNob3VsZFRlcm1p
bmF0ZSA9IHNsb3RWaXNpdG9yLmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKTsKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVy
KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbCht
X3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxSZXN1bWUoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKHNs
b3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JNYXJr
U3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIs
IGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9iYXJy
aWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFyZ2V0
TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAgICBkb3VibGUgdGhpc1BhdXNl
TVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsK
KyAgICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQ
YXVzZU1TKHRoaXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0
IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAgICAgICAgLy8gcnVubmluZyBy
aWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdl
IG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJl
IGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBlbiBh
ZnRlciB0aGUKLSAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWlnaHQg
bG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCi0gICAg
ICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9mIHRo
ZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0Ci0gICAgICAgIC8vIEdDLgotICAg
ICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAg
ICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5IHRo
ZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQotICAgICAgICAvLyB3aXRob3V0
IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCi0gICAgICAgIG1fbXV0YXRvck1h
cmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBzbG90VmlzaXRv
cik7CisgICAgICAgIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgICAgIAogICAgICAgICB7Ci0gICAg
ICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Rv
Rml4cG9pbnQgdHJhY2luZyIpOwogICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUNvbGxlY3RvclRpbWVzbGljaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZXIu
c25hcFBoYXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwotICAgICAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBkZWNpc2lvbiA9IHNjaGVkdWxlci5jdXJyZW50RGVj
aXNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uLnNob3VsZEJlUmVzdW1l
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWlu
SW5QYXJhbGxlbFBhc3NpdmVseShkZWNpc2lvbi50aW1lVG9TdG9wKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVkRHJh
aW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1bGVyIGRvZXMgbm90
IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gZGVjaXNpb24u
dGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdoYXQgdGhlIHZhbHVlIG9mIGNv
bGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4gWW91
IGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndWUgZm9y
IGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBpdC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAqIE9wdGlvbnM6OmNvbGxl
Y3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29uZHMg
d2FrZVVwTGF0ZW5jeSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gZGVjaXNpb24udGltZVRvU3Rv
cCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWtlVXBMYXRlbmN5ID49IDFf
bXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coInd1bCE9Iiwgd2Fr
ZVVwTGF0ZW5jeS5taWxsaXNlY29uZHMoKSwgIiBtcyAiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChkZWNpc2lvbi50aW1l
VG9SZXN1bWUoKSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoZHJhaW5SZXN1bHQgIT0gU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1lc2xpY2luZyBpcyBt
ZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKLSAgICAgICAgICAgICAgICAvLyAtLWNvbGxl
Y3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0dW5pdHkgZm9yIGhhcm1m
dWwgcmFjZXMuCi0gICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVX
b3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFy
YWxsZWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsKICAgICAgICAgfQor
CisgICAgICAgIHN0b3BUaGVXb3JsZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJbR0M6ICIpOworICAgICAgICAKKyAgICAg
ICAgbV9zY2hlZHVsZXItPmRpZFN0b3AoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9zY2hlZHVsZXItPmxvZygpOwogICAgIH0KKyAgICAK
KyAgICBtX3NjaGVkdWxlci0+ZW5kQ29sbGVjdGlvbigpOwogCiAgICAgewogICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC02OTQsNiArNjM3LDEy
IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAgbV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogICAgIG1faGVscGVy
Q2xpZW50LmZpbmlzaCgpOworCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAg
IHdyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgICAgICB9KTsKKyAgICAgICAgCiAgICAgdXBk
YXRlT2JqZWN0Q291bnRzKGdjU3RhcnRUaW1lKTsKICAgICBlbmRNYXJraW5nKCk7CiB9CkBAIC03
MzIsMjUgKzY4MSw2IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBtX2JhcnJpZXJz
RXhlY3V0ZWQgPSAwOwogfQogCi12b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmIHJvb3RzKQotewotICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFw
cGVuZChyb290cyk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpCi17Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4aXN0
aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCiB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldv
cmtsaXN0RW50cmllcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC04NTAsOCArNzgwLDcg
QEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVz
ZXQoKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+
aXNFbXB0eSgpKTsKKyAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICBtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3Bh
Y2UuZW5kTWFya2luZygpOwpAQCAtMTEzNiw3ICsxMDY1LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0
SW5UaHJlYWQoKQogICAgIAogICAgIHdpbGxTdGFydENvbGxlY3Rpb24oc2NvcGUpOwogICAgIGNv
bGxlY3RJbXBsVGltaW5nU2NvcGUuc2V0U2NvcGUoKnRoaXMpOwotICAgICAgICAKKyAgICAKICAg
ICBnY1N0YXJ0VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAg
aWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgbGl2ZSBvYmplY3RzIGZy
b20gdGhlIGxhc3QgR0MgY3ljbGUgaGF2ZW4ndCBiZWVuIGNvcnJ1cHRlZCBieQpAQCAtMTE0Niwx
MSArMTA3NSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVy
aWZpZXItPmluaXRpYWxpemVHQ0N5Y2xlKCk7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxp
dmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KLSAg
ICAgICAgCisgICAgCiAgICAgcHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICAgICAgCisgICAgCiAg
ICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUpOwotICAgICAgICAKKyAgICAKICAgICBpZiAo
bV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTExNjYsOCArMTA5NSwx
MSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygp
OwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwotICAgICAgICAKLSAgICBtX2NvZGVC
bG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAKKyAgICBt
X2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoCisgICAgICAgIFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihjb2RlQmxvY2sp
OworICAgICAgICB9KTsKICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyQ3VycmVudGx5RXhlY3V0aW5n
KCk7CiAgICAgICAgIAogICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckFsbG9jYXRpb24oKTsK
QEAgLTEzNTQsNiArMTI4Niw3IEBAIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdygpCiAg
ICAgCiAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAg
ICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogfQogCiBib29sIEhlYXA6OnN0b3BJZk5lY2Vzc2Fy
eVNsb3codW5zaWduZWQgb2xkU3RhdGUpCkBAIC0xMzY2LDcgKzEyOTksNyBAQCBib29sIEhlYXA6
OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQgCiAgICAgICAgICYmIGhhbmRsZU5lZWRGaW5h
bGl6ZShvbGRTdGF0ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICghKG9s
ZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkpIHsKKyAgICBpZiAoIShvbGRTdGF0ZSAmIHNob3VsZFN0
b3BCaXQpICYmICFtX3NjaGVkdWxlci0+c2hvdWxkU3RvcCgpKSB7CiAgICAgICAgIGlmICghKG9s
ZFN0YXRlICYgc3RvcHBlZEJpdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcob2xkU3RhdGUsIG9sZFN0YXRlICYg
fnN0b3BwZWRCaXQpOwpAQCAtMTQzOSw2ICsxMzcyLDcgQEAgdm9pZCBIZWFwOjphY3F1aXJlQWNj
ZXNzU2xvdygpCiAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRTdGF0ZSwgbmV3U3RhdGUpKSB7CiAgICAgICAgICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAg
ICAgICAgICAgaGFuZGxlTmVlZEZpbmFsaXplKCk7CisgICAgICAgICAgICBtX211dGF0b3JEaWRS
dW4gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA3
NSwxMCArMjAwOSwxMCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChz
CiB9CiAjZW5kaWYKIAotYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit2b2lkIEhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBp
ZiAoIWNhbkNvbGxlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkgewogICAgICAgICBkZWZlcnJhbENvbnRl
eHQtPm1fc2hvdWxkR0MgfD0KQEAgLTIwODcsMTMgKzIwMjEsMTMgQEAgYm9vbCBIZWFwOjpjb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRAogICAgICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKICAg
ICAKICAgICBpZiAoIXNob3VsZENvbGxlY3RIZXVyaXN0aWMoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQogICAgICAg
ICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOwogICAgIGVsc2UKICAgICAgICAg
Y29sbGVjdEFzeW5jKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuOwogfQogCiB2b2lk
IEhlYXA6OmNvbGxlY3RBY2NvcmRpbmdUb0RlZmVyR0NQcm9iYWJpbGl0eSgpCkBAIC0yMTU4LDgg
KzIwOTIsMTU0IEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0K
ICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkKK3sK
KyAgICBtX2NvbnN0cmFpbnRTZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50
U2V0PigpOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiQ3MiLCAi
Q29uc2VydmF0aXZlIFNjYW4iLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgVGltaW5nU2NvcGUg
cHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCk7CisgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290
cygqdGhpcyk7CisgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CisgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3Rz
KTsKKyAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Cisg
ICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwor
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIk1zciIsICJNaXNjIFNtYWxs
IFJvb3RzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgICAgICAg
ICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgc2xvdFZpc2l0b3IpOworI2VuZGlm
CisKKyAgICAgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgq
bV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkK
KyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHNsb3RWaXNp
dG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CisgICAg
ICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7Cisg
ICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJTaCIsICJTdHJvbmcgSGFu
ZGxlcyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hh
bmRsZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90
VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJE
IiwgIkRlYnVnZ2VyIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CisgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1f
dm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAg
ICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90VmlzaXRv
cik7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisgICAg
ICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hp
bGRyZW4oc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAor
ICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRv
cik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJXcyIsICJX
ZWFrIFNldHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlz
aXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICAgICAgcGFyYWxsZWxW
aXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAg
CisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVu
Y2UgSGFydmVzdGVycyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKKyAgICAgICAgICAgICAgICBjdXJy
ZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisgICAgCisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJEdyIsICJERkcg
V29ya2xpc3RzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICBERkc6OmV4aXN0
aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRh
aW5seSB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QygKKyAgICAgICAgICAgICAgICAqbV92bSwKKyAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3Ip
OworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5n
KTsKKyNlbmRpZgorICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiQ2Ii
LCAiQ29kZUJsb2NrcyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5n
QW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCisgICAgICAgICAgICAg
ICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgICAgICAgICAvLyBW
aXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCisg
ICAgICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjb2RlQmxvY2spCisgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6
UG9zc2libHlPbGRPckJsYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3Iu
dmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIk1tcyIsICJNdXRhdG9yIE1h
cmsgU3RhY2siLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZp
eHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQorICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFk
ZFRvVmlzaXRDb3VudChzaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhz
bG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICB9LAorICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKKyAgICAgICAgICAgIHJldHVybiBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFp
bnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKK30KKwogdm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0Nv
bGxlY3QoKQogeworICAgIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAogICAgIG1faXNTYWZl
VG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMTA0
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtNzMsOCArNzMsMTAgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7
CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXI7CiBj
bGFzcyBTbG90VmlzaXRvcjsKLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKK2NsYXNzIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNz
IFZNOwogCkBAIC0yMDMsNyArMjA1LDcgQEAgcHVibGljOgogICAgIC8vIGFuZCB0aGlzIHdpbGwg
d2FpdCBmb3IgdGhhdCBiYWNrbG9nIGJlZm9yZSBydW5uaW5nIGl0cyBHQyBhbmQgcmV0dXJuaW5n
LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdFN5bmMoc3RkOjpvcHRpb25hbDxD
b2xsZWN0aW9uU2NvcGU+ID0gc3RkOjpudWxsb3B0KTsKICAgICAKLSAgICBib29sIGNvbGxlY3RJ
Zk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4KKyAgICB2b2lkIGNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgdm9pZCBjb2xsZWN0QWNj
b3JkaW5nVG9EZWZlckdDUHJvYmFiaWxpdHkoKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQ
bGFucygpOwpAQCAtMzQxLDYgKzM0Myw5IEBAIHB1YmxpYzoKICAgICAvLyBhbHJlYWR5IGJlIGNh
bGxlZCBmb3IgeW91IGF0IHRoZSByaWdodCB0aW1lcy4KICAgICB2b2lkIHN0b3BJZk5lY2Vzc2Fy
eSgpOwogICAgIAorICAgIC8vIEZJWE1FCisgICAgdm9pZCBzdG9wSWZSZXF1aXJlZEJ5U2NoZWR1
bGVyKCk7CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIga2luZCBvZiBzdG9w
cGluZyBvZiB0aGUgY29sbGVjdG9yLCBhbmQgaXQgbWF5IHJlcXVpcmUgd2FpdGluZyBmb3IgYQog
ICAgIC8vIHdoaWxlLiBUaGlzIGlzIG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQSSBmb3IgY2xpZW50
cyBvZiBjb2xsZWN0QWxsR2FyYmFnZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJlCiAgICAgLy8gaXMg
bm8gR0MgYmVmb3JlIG9yIGFmdGVyIHRoYXQgZnVuY3Rpb24gY2FsbC4gQWZ0ZXIgY2FsbGluZyB0
aGlzLCB5b3UgYXJlIGZyZWUgdG8gc3RhcnQgR0NzCkBAIC0zNzYsNyArMzgxLDcgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBN
YXJrZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Ci0gICAgZnJpZW5kIGNs
YXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKKyAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjsKICAgICBmcmllbmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogICAgIGZy
aWVuZCBjbGFzcyBIZWFwU3RhdGlzdGljczsKICAgICBmcmllbmQgY2xhc3MgVk07CkBAIC00MTMs
OSArNDE4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQg
cmVzdW1lVGhlV29ybGQoKTsKICAgICAKLSAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOwot
ICAgIGZyaWVuZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOwotICAgIAogICAgIHZvaWQgc3Rv
cFRoZU11dGF0b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQ1
NSw3ICs0NTcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRD
b25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlzaXRDb21w
aWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlbW92ZURlYWRDb21waWxl
cldvcmtsaXN0RW50cmllcygpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBn
Y1N0YXJ0VGltZSk7CkBAIC00OTgsNiArNDk5LDE2IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CiAgICAgCiAg
ICAgdm9pZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CisgICAgCisgICAg
dm9pZCBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoY29u
c3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBp
dGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3Mo
Y29uc3QgRnVuYyYpOworICAgIAorICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5
KCk7CiAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBt
X3JhbVNpemU7CkBAIC01MzQsNiArNTQ1LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CisgICAgCisgICAg
c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50U2V0PiBtX2NvbnN0cmFpbnRTZXQ7CiAK
ICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2lu
ZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92
ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFt
b3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNjE1LDYgKzYyOCw4IEBAIHByaXZhdGU6CiAgICAgc2l6
ZV90IG1fZXh0ZXJuYWxNZW1vcnlTaXplIHsgMCB9OwogI2VuZGlmCiAgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPE11dGF0b3JTY2hlZHVsZXI+IG1fc2NoZWR1bGVyOworICAgIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaG91bGRTdG9wQml0ID0gMXUgPDwgMHU7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHN0b3BwZWRCaXQgPSAxdSA8PCAxdTsKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaGFzQWNjZXNzQml0ID0gMXUgPDwgMnU7CkBAIC02MzAsNiArNjQ1LDcgQEAgcHJpdmF0
ZToKICAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKICAgICBib29sIG1fdGhy
ZWFkU2hvdWxkU3RvcCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAgIEJveDxMb2Nr
PiBtX3RocmVhZExvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV90
aHJlYWRDb25kaXRpb247IC8vIFRoZSBtdXRhdG9yIG11c3Qgbm90IHdhaXQgb24gdGhpcy4gSXQg
d291bGQgY2F1c2UgYSBkZWFkbG9jay4KICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkPiBtX3Ro
cmVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01h
cmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgVm9sYXRpbGl0
eSB2b2xhdGlsaXR5KQorICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQor
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZN
b3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKK3sK
K30KKworTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
LAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFi
YnJldmlhdGVkTmFtZSkKKyAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICwgbV9leGVj
dXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCisgICAg
LCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKK3sKK30KKworTWFya2luZ0NvbnN0cmFpbnQ6On5N
YXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0
U3RhdHMoKQoreworICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNv
bWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQorICAgICAgICBkYXRhTG9nKGFiYnJldmlhdGVkTmFtZSgpKTsKKyAgICBWaXNpdGluZ1Rp
bWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCB0aW1lb3V0
KTsKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yLCB2aXNpdGluZ1RpbWVvdXQpOworICAg
IG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdGluZ1RpbWVvdXQudmlzaXRDb3VudCh2aXNpdG9yKTsK
KyAgICBkaWRWaXNpdFNvbWV0aGluZyA9IHZpc2l0aW5nVGltZW91dC5kaWRWaXNpdFNvbWV0aGlu
Zyh2aXNpdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7Citj
bGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFZvbGF0aWxpdHkgeworICAgICAgICAvLyBGSVhN
RTogV2UgY291bGQgaW50cm9kdWNlIGEgbmV3IGtpbmQgb2Ygdm9sYXRpbGl0eSBjYWxsZWQgR3Jl
eWVkQnlSZXN1bXB0aW9uLCB3aGljaAorICAgICAgICAvLyB3b3VsZCBtZWFuIHJ1bm5pbmcgYWxs
IG9mIHRoZSB0aW1lcyB0aGF0IEdyZXllZEJ5RXhlY3V0aW9uIHJ1bnMgZXhjZXB0IGFzIGEgcm9v
dCBpbiBhCisgICAgICAgIC8vIGZ1bGwgR0MuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgY29u
c3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBhbnl0aW1lIHRoZSBtdXRhdG9yIHJ1bnM6
IHNvIGF0IEdDIHN0YXJ0IGFuZAorICAgICAgICAvLyB3aGVuZXZlciB0aGUgR0MgcmVzdXNwZW5k
cyBhZnRlciBhIHJlc3VtcHRpb24uIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyBzb21ldGhpbmcgdGhh
dAorICAgICAgICAvLyB5b3UnZCBjYWxsIGEgInJvb3QiIGluIGEgdHJhZGl0aW9uYWwgR0MuCisg
ICAgICAgIEdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGNvbnN0
cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55IHRpbWUgYW55IG9iamVjdCBpcyBtYXJr
ZWQgYW5kIGFueXRpbWUgdGhlCisgICAgICAgIC8vIG11dGF0b3IgcmVzdW1lcy4KKyAgICAgICAg
R3JleWVkQnlNYXJraW5nCisgICAgfTsKKyAgICAKKyAgICBNYXJraW5nQ29uc3RyYWludCgKKyAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAg
ICAgICBWb2xhdGlsaXR5KTsKKyAgICAKKyAgICBNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgVm9sYXRpbGl0eSk7Cisg
ICAgCisgICAgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgY29uc3QgY2hhciogYWJicmV2
aWF0ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hYmJyZXZpYXRlZE5hbWUuZGF0YSgpOyB9Cisg
ICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KKyAg
ICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBzaXplX3QgbGFzdFZpc2l0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CisgICAgCisgICAgdm9pZCBl
eGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1Rp
bWUgdGltZW91dCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHdvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIHJldHVybiBsYXN0
VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7CisgICAgfQorICAgIAor
ICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsg
fQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7
IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KKyAgICAKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsg
VUlOVF9NQVggfTsKKyAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOworICAgIENTdHJpbmcg
bV9uYW1lOworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKKyAgICBWb2xh
dGlsaXR5IG1fdm9sYXRpbGl0eTsKKyAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgorCisjaW5jbHVkZSAiT3B0
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250
ZXh0IHsKK3B1YmxpYzoKKyAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0
JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAg
ICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQorICAgICAgICAs
IG1fdGltZW91dCh0aW1lb3V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkaWRWaXNp
dFNvbWV0aGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0
aGluZzsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1l
b3V0KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQu
CisgICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgeworICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQpIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoaW5k
ZXgpOworICAgICAgICAgICAgdW5leGVjdXRlZC5jbGVhcihpbmRleCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkVGltZU91dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkaWRFeGVj
dXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9
CisKKyAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgbV9zZXQu
bV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZywgbV90
aW1lb3V0KTsKKyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OworICAgIFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7CisgICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CisgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKK307
CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCit7Cit9CisK
K01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFpbnRTZXQoKQoreworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX3VuZXhlY3V0
ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuY2xlYXJBbGwo
KTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkgeworICAgICAgICBjb25zdHJh
aW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIHN3aXRjaCAoY29uc3RyYWludC0+dm9sYXRpbGl0
eSgpKSB7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9u
OgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkUm9vdHMuc2V0KGNvbnN0cmFpbnQtPmluZGV4KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6Okdy
ZXllZEJ5TWFya2luZzoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZE91dGdyb3d0aHMuc2V0KGNv
bnN0cmFpbnQtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKKyAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIEZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sCisgICAgTWFya2luZ0NvbnN0cmFp
bnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKKyAgICBGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4g
cXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25z
dHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
ZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9s
YXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQoreworICAgIGNvbnN0
cmFpbnQtPm1faW5kZXggPSBtX3NldC5zaXplKCk7CisgICAgbV9vcmRlcmVkLmFwcGVuZChjb25z
dHJhaW50LmdldCgpKTsKKyAgICBpZiAoY29uc3RyYWludC0+dm9sYXRpbGl0eSgpID09IE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpCisgICAgICAgIG1fb3V0Z3Jvd3Rocy5hcHBl
bmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWlu
dCkpOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgLy8gQm9v
dHN0cmFwIG1lYW5zIHRoYXQgd2UgaGF2ZW4ndCBkb25lIGFueSBvYmplY3QgdmlzaXRpbmcgeWV0
LiBUaGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0bworICAgIC8vIG9ubHkgZXhlY3V0ZSByb290IGNv
bnN0cmFpbnRzICh3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgdGhvc2UgdGhhdCB3ZSBzYXkgYXJl
IGdyZXllZCBieQorICAgIC8vIHJlc3VtcHRpb24pLCBzaW5jZSB0aGUgb3RoZXIgY29uc3RyYWlu
dHMgYXJlIHN1cGVyIHVubGlrZWx5IHRvIHRyaWdnZXIgd2l0aG91dCBzb21lIG9iamVjdAorICAg
IC8vIHZpc2l0aW5nLiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZ28g
c3RyYWlnaHQgdG8gb2JqZWN0IHZpc2l0aW5nIGFmdGVyCisgICAgLy8gdGhpcy4KKyAgICBFeGVj
dXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOwor
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCJib290OiIpOworICAg
IGJvb2wgcmVzdWx0ID0gZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7
CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coIiAiKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sK
KyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91
dCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coIiAiKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVm
cm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKE1hcmtpbmdD
b25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMpIHsKKyAgICAgICAgaWYgKG91dGdy
b3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQoreworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhp
cywgdmlzaXRvciwgdGltZW91dCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisg
ICAgICAgIGRhdGFMb2coImNvbnZlcmdlOiIpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBj
b25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBj
eWNsZSwgdGhlbgorICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KKyAgICBpZiAo
IWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91
dGdyb3d0aHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2Ugd2FudCB0
byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRo
YXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCisgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxk
IEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8g
Z28gdG90YWxseQorICAgIC8vIHNpbGVudCBhdCBzb21lIHBvaW50IGR1cmluZyBHQywgYXQgd2hp
Y2ggcG9pbnQgaXQgbWFrZXMgc2Vuc2Ugbm90IHRvIHJ1biB0aGVtIGFnYWluIHVudGlsCisgICAg
Ly8gdGhlIGVuZC4gT3V0Z3Jvd3RocyBwcm9kdWNpbmcgbmV3IGluZm9ybWF0aW9uIGNvcnJlc3Bv
bmRzIGFsbW9zdCBleGFjdGx5IHRvIHRoZSB3YXZlZnJvbnQKKyAgICAvLyBhZHZhbmNpbmc6IGl0
IHVzdWFsbHkgbWVhbnMgdGhhdCB3ZSBhcmUgbWFya2luZyBvYmplY3RzIHRoYXQgc2hvdWxkIGJl
IG1hcmtlZCBiYXNlZCBvbgorICAgIC8vIG90aGVyIG9iamVjdHMgdGhhdCB3ZSB3b3VsZCBoYXZl
IG1hcmtlZCBhbnl3YXkuIE9uY2UgdGhlIHdhdmVmcm9udCBpcyBubyBsb25nZXIgYWR2YW5jaW5n
LAorICAgIC8vIHdlIHdhbnQgdG8gcnVuIG1vc3RseSB0aGUgcm9vdCBjb25zdHJhaW50cyAoYmFz
ZWQgb24gdGhlaXIgcHJlZGljdGlvbnMgb2YgaG93IG11Y2ggd29yaworICAgIC8vIHRoZXkgd2ls
bCBoYXZlKSBiZWNhdXNlIGF0IHRoaXMgcG9pbnQgd2UgYXJlIGp1c3QgdHJ5aW5nIHRvIG91dHBh
Y2UgdGhlIHJldHJlYXRpbmcKKyAgICAvLyB3YXZlZnJvbnQuCisgICAgLy8KKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBmdW5jdGlvbiAoZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCkgb25seSByZXR1cm5z
IHRydWUgaWYgaXQgcnVucyBhbGwKKyAgICAvLyBjb25zdHJhaW50cy4gU28sIGFsbCB3ZSBhcmUg
Y29udHJvbGxpbmcgYXJlIHRoZSBoZXVyaXN0aWNzIHRoYXQgc2F5IHdoaWNoIGNvbnN0cmFpbnRz
IHRvCisgICAgLy8gcnVuIGZpcnN0LiBDaG9vc2luZyB0aGUgY29uc3RyYWludHMgdGhhdCBhcmUg
dGhlIG1vc3QgbGlrZWx5IHRvIHByb2R1Y2UgbWVhbnMgcnVubmluZyBmZXdlcgorICAgIC8vIGNv
bnN0cmFpbnRzIGJlZm9yZSByZXR1cm5pbmcuCisgICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2lu
ZyA9IHRoaXMtPmlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOworICAgIAorICAgIHN0ZDo6
c29ydCgKKyAgICAgICAgbV9vcmRlcmVkLmJlZ2luKCksIG1fb3JkZXJlZC5lbmQoKSwKKyAgICAg
ICAgWyZdIChNYXJraW5nQ29uc3RyYWludCogYSwgTWFya2luZ0NvbnN0cmFpbnQqIGIpIC0+IGJv
b2wgeworICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHJldHVybiB0cnVlIGlmIGEgc2hvdWxkIGNv
bWUgYmVmb3JlIGIuCisgICAgICAgICAgICBpZiAoYS0+dm9sYXRpbGl0eSgpICE9IGItPnZvbGF0
aWxpdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1dhdmVmcm9udEFkdmFuY2luZykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHko
KTsgLy8gR3JleWVkQnlNYXJraW5nIHNob3VsZCBjb21lIGJlZm9yZSBHcmV5ZWRCeUV4ZWN1dGlv
bi4KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLT52
b2xhdGlsaXR5KCkgPCBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXllZEJ5RXhlY3V0aW9uIHNob3Vs
ZCBjb21lIGJlZm9yZSBHcmV5ZWRCeU1hcmtpbmcuCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBhLT53b3JrRXN0aW1hdGUodmlzaXRvcikgPiBiLT53b3Jr
RXN0aW1hdGUodmlzaXRvcik7CisgICAgICAgIH0pOworICAgIAorICAgIGZvciAoTWFya2luZ0Nv
bnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKKyAgICAgICAgc2l6ZV90IGkgPSBj
b25zdHJhaW50LT5pbmRleCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRl
eHQuZGlkRXhlY3V0ZShpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBleGVjdXRp
b25Db250ZXh0LmV4ZWN1dGUoaSk7CisgICAgICAgIAorICAgICAgICAvLyBPbmNlIHdlJ3JlIGlu
IGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5n
IGhhcHBlbiBhbnl0aW1lCisgICAgICAgIC8vIHdlIGZpbmQgd29yay4gTm9uZXRoZWxlc3MsIHdl
IG9ubHkgd2FudCBjb25zdHJhaW50cyB0byBpbnRlcnJ1cHQgdGhlbXNlbHZlcyB1cG9uCisgICAg
ICAgIC8vIHRpbWVvdXQgLSBub3QganVzdCBiZWNhdXNlIHRoZXkgZm91bmQgc29tZSB3b3JrLgor
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWlu
dHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncworICAgICAgICAvLyBiZXR0ZXIg
b3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6CisgICAgICAgIC8vIC0gSWYgdGhl
IHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KKyAgICAgICAgLy8gLSBJZiB0aGUgdmlz
aXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KKyAgICAgICAgLy8gLSBFbHNl
IHJ1biB1bnRpbCB0aW1lb3V0LgorICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNp
dFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFs
bChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0g
ZmFsc2U7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCisgICAgICAgIGNvbnN0
cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9n
KCIgIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldCB7CitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQo
KTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICAKKyAgICB2b2lkIHJlc2V0U3Rh
dHMoKTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9pZCBhZGQoCisgICAgICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoZSBtYXJrIHN0
YWNrcyBhcmUgYWxsIGVtcHR5LCB0aGlzIHdpbGwgZ2l2ZSB5b3UgYSBndWVzcyBhcyB0byB3aGV0
aGVyIG9yCisgICAgLy8gbm90IHRoZSB3YXZlZnJvbnQgaXMgYWR2YW5jaW5nLgorICAgIGJvb2wg
aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzV2F2ZWZyb250
UmV0cmVhdGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgeyByZXR1cm4gIWlzV2F2ZWZyb250QWR2
YW5jaW5nKHZpc2l0b3IpOyB9CisgICAgCisgICAgLy8gRXhlY3V0ZXMgb25seSByb290cy4gUmV0
dXJucyB0cnVlIGlmIGFsbCByb290cyBoYXZlIGJlZW4gZXhlY3V0ZWQuIEl0J3MgZXhwZWN0ZWQK
KyAgICAvLyB0aGF0IHlvdSdsbCBkbyBzb21lIGRyYWluaW5nIGFmdGVyIHRoaXMgYW5kIHRoZW4g
dXNlIGV4ZWN1dGVDb252ZXJnZW5jZSgpLgorICAgIGJvb2wgZXhlY3V0ZUJvb3RzdHJhcChTbG90
VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgY29uc3RyYWludHMgd2VyZSBl
eGVjdXRlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkKKyAgICAvLyB2aXNpdGVk
IHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2UoCisgICAgICAgIFNsb3RWaXNpdG9yJiwKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0
ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgLy8gU2ltcGx5IHJ1bnMg
YWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgorICAgIHZvaWQgZXhlY3V0
ZUFsbChTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToKKyAgICBjbGFzcyBFeGVjdXRpb25D
b250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIAorICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGlt
ZW91dCk7CisgICAgCisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUs
IEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcpOworICAgIAorICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKKyAg
ICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CisgICAgVmVjdG9yPE1hcmtpbmdDb25z
dHJhaW50Kj4gbV9vcmRlcmVkOworICAgIFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+IG1fb3V0
Z3Jvd3RoczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNdXRhdG9yU2No
ZWR1bGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitNdXRhdG9yU2NoZWR1bGVyOjpNdXRhdG9yU2NoZWR1bGVyKCkK
K3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCit2
b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQoreworfQorCit2b2lkIE11dGF0b3JTY2hl
ZHVsZXI6OndpbGxSZXN1bWUoKQoreworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZEV4
ZWN1dGVDb25zdHJhaW50cygpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6bG9nKCkK
K3sKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRTdG9wKCkKK3sKKyAgICByZXR1
cm4gaGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQorCitib29sIE11dGF0b3JTY2hlZHVsZXI6
OnNob3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvUmVzdW1lKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE11dGF0b3JTY2hlZHVsZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBOb3JtYWwsIC8vIE5vdCBjb2xs
ZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAgICBSZXN1bWVkCisgICAgfTsKKyAgICAK
KyAgICBNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgdmlydHVhbCB+TXV0YXRvclNjaGVkdWxlcigp
OworICAgIAorICAgIHZpcnR1YWwgU3RhdGUgc3RhdGUoKSBjb25zdCA9IDA7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVzdW1lKCk7CisgICAgdmlydHVh
bCB2b2lkIGRpZEV4ZWN1dGVDb25zdHJhaW50cygpOworICAgIAorICAgIHZpcnR1YWwgTW9ub3Rv
bmljVGltZSB0aW1lVG9TdG9wKCkgPSAwOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayB3
aGVuIHRvIHN0b3AuCisgICAgdmlydHVhbCBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpID0g
MDsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBhc2sgd2hlbiB0byByZXN1bWUuCisgICAgCisg
ICAgdmlydHVhbCB2b2lkIGxvZygpOworICAgIAorICAgIGJvb2wgc2hvdWxkU3RvcCgpOyAvLyBD
YWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgc3RvcCBub3cuCisgICAgYm9v
bCBzaG91bGRSZXN1bWUoKTsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBhc2sgaWYgd2Ugc2hv
dWxkIHJlc3VtZSBub3cuCisgICAgCisgICAgdmlydHVhbCB2b2lkIGVuZENvbGxlY3Rpb24oKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDExICs1
OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxz
ZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZCh2b2lkKiByb290KQorICAgIGJvb2wgYWRkKHZvaWQq
IHJvb3QpCiAgICAgewogICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKICAg
ICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICBtX3Jv
b3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50
cnk7CiAgICAgfQogCiAgICAgaW50IHNpemUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQ3LDYgKzM0NywxMSBAQCBwcml2YXRlOgogICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0
b3I7CiB9OwogCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdEFzQ29uc3RyYWludChjb25zdCBKU0Nl
bGwqIGNlbGwpCit7CisgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKKyAgICB2
aXNpdENoaWxkcmVuKGNlbGwpOworfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewpAQCAtNDYxLDcgKzQ2Niw3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICAKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7CiAgICAgCi0gICAgd2hpbGUgKCghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYg
IWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICB3aGlsZSAoIWhhc0VsYXBzZWQodGltZW91dCkp
IHsKICAgICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBlZChsb2NrZXIpOwogICAgICAgICBpZiAo
IW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2NvbGxlY3RvclN0
YWNrLnJlZmlsbCgpOwpAQCAtNDc2LDcgKzQ4MSw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWlu
KE1vbm90b25pY1RpbWUgdGkKICAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9
IHRydWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1p
bmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5jYW5S
ZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQogICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRy
ZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7
CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CkBAIC00ODYsMTIgKzQ5Miwx
OCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpCiAKIGJvb2wgU2xv
dFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQogeworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgcmV0dXJuIGlzRW1wdHkoKSAmJiBkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcik7Cit9CisKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVy
bWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpCit7CiAgICAgcmV0dXJuICFtX2hlYXAubV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwogICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xs
ZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmso
KQorYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBy
ZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAg
ICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CkBAIC01
MTgsMTIgKzUzMCwxMiBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0
CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24obG9j
a2VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV29yaygpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzV29yayhsb2NrZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRl
eCwgdGltZW91dCk7CkBAIC01MzQsMTMgKzU0NiwxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJh
aW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRP
dXQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWlu
YXRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIp
KQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
bm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGUud2FpdFVudGlsKAogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
TXV0ZXgsIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaGFzV29yaygpCisgICAgICAgICAgICAgICAgICAgIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgCkBAIC01ODksNyAr
NjAxLDcgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAg
ICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFp
blJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgIAotICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5h
dGlvbigpKSB7CisgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpIHsKICAg
ICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgfQpA
QCAtNjA1LDEzICs2MTcsMTMgQEAgdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lk
KiBybwogICAgIAogICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsK
ICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAg
ICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7CisgICAgICAgIG1fdmlzaXRDb3VudCAr
PSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0
aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCiAgICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KICAgICBtZXJnZU9w
YXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Cisg
ICAgbV92aXNpdENvdW50ICs9IG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogfQogCiBib29sIFNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBi
eXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQogICAgIHNpemVf
dCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CisgICAgCisgICAg
dm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVlKSB7IG1fdmlzaXRDb3VudCArPSB2YWx1
ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUg
dGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwpAQCAtMTUxLDYgKzE1MywxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVh
c29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CiAgICAgdm9pZCBk
aWROb3RSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOwogICAgIHZvaWQgZGlkTm90UmFjZShKU0Nl
bGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWROb3RSYWNlKFZpc2l0UmFjZUtleShj
ZWxsLCByZWFzb24pKTsgfQorICAgIAorICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3Qg
SlNDZWxsKik7CisgICAgCisgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CkBAIC0xODAsOCArMTg2
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB2b2lk
IGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5
JiB0byk7CiAgICAgCi0gICAgYm9vbCBoYXNXb3JrKCk7Ci0gICAgYm9vbCBkaWRSZWFjaFRlcm1p
bmF0aW9uKCk7CisgICAgYm9vbCBoYXNXb3JrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBib29s
IGRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgTWFya1N0YWNr
QXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFj
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMTA0MzMpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHA6MjEwNDMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwYWNl
VGltZVNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdP
ZkN5Y2xlID0KKyAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVy
LT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgCisgICAgZG91
YmxlIG1heEhlYWRyb29tID0KKyAgICAgICAgbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
QXRUaGVCZWdpbm5pbmc7CisgICAgCisgICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MgPQorICAg
ICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOworICAgIAorICAg
IC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhp
bmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6
ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgLy8gZGVmZW5k
cyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgorICAgIAorICAgIGlmICghKGhl
YWRyb29tRnVsbG5lc3MgPj0gMCkpCisgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOworICAg
IGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCisgICAgICAgIGhlYWRyb29tRnVsbG5lc3Mg
PSAxOworICAgIAorICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21G
dWxsbmVzczsKKyAgICAKKyAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRv
IHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAg
IE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCisgICAgICAgIG11dGF0b3JV
dGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6
YXRpb24oKSAtCisgICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9u
KCkpOworICAgIAorICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247Cit9CisKK2RvdWJsZSBT
cGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKK30K
KworU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJpb2Qo
KSBjb25zdAoreworICAgIHJldHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9pbml0aWFsVGlt
ZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVs
ZXI6OkRlY2lzaW9uOjpwaGFzZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsYXBzZWRJblBlcmlv
ZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQorCitib29sIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNvbnN0Cit7CisgICAgaWYgKE9wdGlvbnM6
OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBwaGFzZSgpIDw9
IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0
Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hl
ZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAoreworICAgIEFTU0VSVCghc2hv
dWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVG
aXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZDsKKyAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSAr
IG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Cit9
CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvU3Rv
cCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0
aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbm93
IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRh
dG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSAr
IG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworU3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRp
bWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9wZXJp
b2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50R0NQZXJpb2RN
UygpKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyhoZWFw
Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVFbmQoCisgICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkg
KgorICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRo
ZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkKK3sKKyAgICBzbmFwUGhhc2UoKTsKK30K
Kwordm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSgpCit7CisgICAgbV9pbml0aWFs
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitTcGFjZVRpbWVTY2hlZHVsZXI6OkRl
Y2lzaW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKK3sKKyAgICBEZWNp
c2lvbiByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKKyAgICByZXN1bHQu
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlOworICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTA1ICsyNCwxOTUgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVy
LmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIgogCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotZG91YmxlIFNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0CisvLyBUaGUg
c2NoZWR1bGVyIHdpbGwgb2Z0ZW4gbWFrZSBkZWNpc2lvbnMgYmFzZWQgb24gc3RhdGUgdGhhdCBp
cyBpbiBmbHV4LiBJdCB3aWxsIGJlIGZpbmUgc28KKy8vIGxvbmcgYXMgbXVsdGlwbGUgdXNlcyBv
ZiB0aGUgc2FtZSB2YWx1ZSBhbGwgc2VlIHRoZSBzYW1lIHZhbHVlLiBXZSB3b3VsZG4ndCBnZXQg
dGhpcyBmb3IgZnJlZSwKKy8vIHNpbmNlIG91ciBuZWVkIHRvIG1vZHVsYXJpemUgdGhlIGNhbGN1
bGF0aW9uIHJlc3VsdHMgaW4gYSB0ZW5kZW5jeSB0byBhY2Nlc3MgdGhlIHNhbWUgbXV0YWJsZQor
Ly8gZmllbGQgaW4gSGVhcCBtdWx0aXBsZSB0aW1lcywgYW5kIHRvIGFjY2VzcyB0aGUgY3VycmVu
dCB0aW1lIG11bHRpcGxlIHRpbWVzLgorY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
U25hcHNob3QgeworcHVibGljOgorICAgIFNuYXBzaG90KFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXImIHNjaGVkdWxlcikKKyAgICB7CisgICAgICAgIG1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBzY2hlZHVsZXIuYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKCk7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUg
bm93KCkgY29uc3QgeyByZXR1cm4gbV9ub3c7IH0KKyAgICAKKyAgICBkb3VibGUgYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
OyB9CisgICAgCitwcml2YXRlOgorICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAgZG91Ymxl
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Cit9OworCitTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAo
aGVhcCkKKyAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6
Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCiB7Ci0gICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5p
bmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1
bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAg
ZG91YmxlIG1heEhlYWRyb29tID0KLSAgICAgICAgbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MgPQot
ICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOwotICAgIAot
ICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3Rpbmcg
dGhpbmdzIGlmCi0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBp
cyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCi0gICAgLy8gZGVm
ZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgotICAgIAotICAgIGlmICgh
KGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCi0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOwot
ICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCi0gICAgICAgIGhlYWRyb29tRnVsbG5l
c3MgPSAxOwotICAgIAotICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJv
b21GdWxsbmVzczsKK30KKworU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6flNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjpTdGF0ZSBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7
Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9uKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IE5vcm1hbCk7CisgICAgbV9zdGF0ZSA9
IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAg
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyA9IG1faGVhcC5tX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVu
ZCA9IAorICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoKKyAgICAg
ICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5p
bmcsIG1faGVhcC5tX21heEVkZW5TaXplKTsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjpkaWRTdG9wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3Bw
ZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKwor
dm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp3aWxsUmVzdW1lKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAg
ICBtX3N0YXRlID0gUmVzdW1lZDsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjpkaWRFeGVjdXRlQ29uc3RyYWludHMoKQoreworICAgIC8vIElmIHdlIGV4ZWN1dGUgY29uc3Ry
YWludHMsIHdlIHdhbnQgdG8gZm9yZ2l2ZSB0aGUgR0MgZm9yIGFsbCBvZiB0aGUgdGltZSBpdCBo
YWQgc3RvcHBlZCB0aGUKKyAgICAvLyB3b3JsZCBmb3IgaW4gdGhpcyBpbmNyZW1lbnQuIFRoaXMg
aGFjayBpcyBlbXBpcmljYWxseSBiZXR0ZXIgdGhhbiBldmVyeSBvdGhlciBoZXVyaXN0aWMgSQor
ICAgIC8vIHRyaWVkLCBiZWNhdXNlIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgR0MgaXMgaGFwcHkg
dG8gcGF1c2UgZm9yIGxvbmdlciB3aGVuIGl0J3MgZGVhbGluZworICAgIC8vIHdpdGggdGhpbmdz
IHRoYXQgZG9uJ3QgcGxheSB3ZWxsIHdpdGggY29uY3VycmVuY3kuCisgICAgbV9zdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAg
ICBjYXNlIE5vcm1hbDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCk7
CisgICAgY2FzZSBTdG9wcGVkOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgY2FzZSBSZXN1bWVkOiB7CisgICAgICAgIFNuYXBzaG90IHNuYXBzaG90KCp0aGlzKTsK
KyAgICAgICAgaWYgKCFzaG91bGRCZVJlc3VtZWQoc25hcHNob3QpKQorICAgICAgICAgICAgcmV0
dXJuIHNuYXBzaG90Lm5vdygpOworICAgICAgICByZXR1cm4gc25hcHNob3Qubm93KCkgLSBlbGFw
c2VkSW5QZXJpb2Qoc25hcHNob3QpICsgbV9wZXJpb2Q7CisgICAgfSB9CiAgICAgCi0gICAgLy8g
U2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4K
LSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRv
clV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCi0gICAgICAg
ICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAgICAgICAg
T3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7Cit9CisKK01vbm90
b25pY1RpbWUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vcm1hbDoKKyAgICBjYXNlIFJlc3VtZWQ6
CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFN0b3BwZWQ6
IHsKKyAgICAgICAgU25hcHNob3Qgc25hcHNob3QoKnRoaXMpOworICAgICAgICBpZiAoc2hvdWxk
QmVSZXN1bWVkKHNuYXBzaG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdC5ub3coKTsK
KyAgICAgICAgcmV0dXJuIHNuYXBzaG90Lm5vdygpIC0gZWxhcHNlZEluUGVyaW9kKHNuYXBzaG90
KSArIG1fcGVyaW9kICogY29sbGVjdG9yVXRpbGl6YXRpb24oc25hcHNob3QpOworICAgIH0gfQog
ICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgpOwogfQogCi1kb3VibGUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24o
KSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpsb2coKQogewotICAgIHJl
dHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7CisgICAgQVNTRVJUKE9wdGlvbnM6
OmxvZ0dDKCkpOworICAgIFNuYXBzaG90IHNuYXBzaG90KCp0aGlzKTsKKyAgICBkYXRhTG9nKAor
ICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUo
c25hcHNob3QpIC8gMTAyNCksICIga2IgIiwKKyAgICAgICAgImhmPSIsIGZvcm1hdCgiJS4zbGYi
LCBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KSksICIgIiwKKyAgICAgICAgIm11PSIsIGZvcm1h
dCgiJS4zbGYiLCBtdXRhdG9yVXRpbGl6YXRpb24oc25hcHNob3QpKSwgIiAiKTsKIH0KIAotU2Vj
b25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJpb2QoKSBjb25z
dAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKIHsKLSAg
ICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kOworICAgIG1fc3RhdGUgPSBOb3JtYWw7CisgICAgbV9zdGFydFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnBoYXNlKCkgY29uc3QKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpi
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUltcGwoKQogewotICAgIHJldHVybiBlbGFwc2VkSW5QZXJp
b2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICByZXR1cm4gbV9oZWFwLm1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGU7CiB9CiAKLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lv
bjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyOjpieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShjb25zdCBTbmFwc2hvdCYgc25hcHNob3Qp
CiB7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAg
ICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJl
dHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4g
c25hcHNob3QuYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoKSAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZzsKIH0KIAotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVs
ZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAorZG91YmxlIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6Om1heEhlYWRyb29tKCkKIHsKLSAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1l
ZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAg
ICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9w
ZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxl
ci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworICAgIHJldHVybiBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVCZWdpbm5pbmc7CiB9CiAKLU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVy
OjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Citkb3VibGUgU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlcjo6aGVhZHJvb21GdWxsbmVzcyhjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0g
ICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVy
aW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24o
KTsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5t
X3BlcmlvZDsKKyAgICBkb3VibGUgcmVzdWx0ID0gYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUo
c25hcHNob3QpIC8gbWF4SGVhZHJvb20oKTsKKworICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2Fu
IGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCisgICAgLy8gYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1
ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBw
b2ludCBkcmFnb25zLgorICAgIAorICAgIGlmICghKHJlc3VsdCA+PSAwKSkKKyAgICAgICAgcmVz
dWx0ID0gMDsKKyAgICBpZiAoIShyZXN1bHQgPD0gMSkpCisgICAgICAgIHJlc3VsdCA9IDE7CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNj
aGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3BlcmlvZChT
ZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkp
KQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9i
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVB
dFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCi0g
ICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXI6Om11dGF0b3JVdGlsaXphdGlvbihjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0g
ICAgc25hcFBoYXNlKCk7CisgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFk
cm9vbUZ1bGxuZXNzKHNuYXBzaG90KTsKKyAgICAKKyAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1
dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgIG11dGF0b3JVdGlsaXph
dGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCisg
ICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgIE9wdGlvbnM6Om1heGlt
dW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0
YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247
CiB9CiAKLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQorZG91YmxlIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXI6OmNvbGxlY3RvclV0aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90
JiBzbmFwc2hvdCkKIHsKLSAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgcmV0dXJuIDEgLSBtdXRhdG9yVXRpbGl6YXRpb24oc25hcHNob3QpOwogfQogCi1TcGFj
ZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lz
aW9uKCkKK1NlY29uZHMgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZWxhcHNlZEluUGVyaW9k
KGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAgICBEZWNpc2lvbiByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKLSAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgIHJlc3VsdC5t
X25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIChzbmFwc2hvdC5ub3coKSAtIG1fc3RhcnRUaW1lKSAlIG1fcGVyaW9kOworfQorCitkb3Vi
bGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6cGhhc2UoY29uc3QgU25hcHNob3QmIHNuYXBz
aG90KQoreworICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2Qoc25hcHNob3QpIC8gbV9wZXJpb2Q7
Cit9CisKK2Jvb2wgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkQmVSZXN1bWVkKGNv
bnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICByZXR1cm4gcGhhc2Uoc25hcHNob3QpID4g
Y29sbGVjdG9yVXRpbGl6YXRpb24oc25hcHNob3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQzMykJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6MjEwNDMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFw
OworCitjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgeworcHVibGljOgorICAgIGNsYXNzIERlY2lz
aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgdGFy
Z2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB0YXJnZXRDb2xs
ZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlv
ZCgpIGNvbnN0OworICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKKyAgICAgICAgYm9vbCBz
aG91bGRCZVJlc3VtZWQoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1
bWUoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hl
ZHVsZXI7CisKKyAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxw
dHIgfTsKKyAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Cisg
ICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAgfTsKKyAgICAKKyAgICAvLyBDb25zdHJ1
Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KKyAgICBTcGFjZVRp
bWVTY2hlZHVsZXIoSGVhcCYpOworICAgIAorICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0
byBzdGFydCBub3cuCisgICAgdm9pZCBzbmFwUGhhc2UoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5z
IGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2ls
bCBiZSB2YWxpZCBzbyBsb25nIGFzCisgICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUg
YW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KKyAgICBEZWNpc2lvbiBjdXJyZW50
RGVjaXNpb24oKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERlY2lzaW9uOwor
CisgICAgSGVhcCYgbV9oZWFwOworICAgIFNlY29uZHMgbV9wZXJpb2Q7CisgICAgZG91YmxlIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICBkb3VibGUgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOworICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFs
VGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCShyZXZp
c2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDYxIEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlICJNdXRhdG9y
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CisvLyBUaGUgSlND
IGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRoZSB3b3JsZCBpbiBvcmRlciB0byBzdGF5
IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAorLy8gc3ludGhldGljIHBhdXNlcyBlbnN1
cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBvbmUgaHVnZSBwYXVzZSBpbiBvcmRlciB0
byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcgd2F2ZWZyb250LiBUaGUgc2NoZWR1bGVy
IGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBpdCBsaW5rcyB0aGUgYW1vdW50IG9mIHRp
bWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBmb3IgdG8gdGhlIGFtb3VudCBvZiBzcGFj
ZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2UgdGhlIEdDIGN5Y2xlCisvLyBiZWdhbi4K
KworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1
bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lvbiB7Ci0gICAgcHVibGljOgotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3NjaGVkdWxlcjsg
fQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNv
bnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdDsK
LSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoKSBjb25zdDsKLSAgICAgICAgZG91Ymxl
IHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hvdWxkQmVSZXN1bWVkKCkgY29uc3Q7Ci0g
ICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90
b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAg
ICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOwotCi0gICAgICAgIFNwYWNlVGlt
ZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRyIH07Ci0gICAgICAgIGRvdWJsZSBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAgICAgICBNb25vdG9uaWNUaW1lIG1fbm93
OwotICAgIH07Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0
YXJ0IG9mIGEgR0MgY3ljbGUuCi0gICAgU3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmKTsKLSAgICAK
LSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8gc3RhcnQgbm93LgotICAgIHZvaWQgc25h
cFBoYXNlKCk7Ci0gICAgCi0gICAgLy8gUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50
IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwgYmUgdmFsaWQgc28gbG9uZyBhcwotICAg
IC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFuZCB5b3UgaGF2ZW4ndCBjYWxsZWQgc25h
cFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERlY2lzaW9uKCk7CisgICAgU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcihIZWFwJik7CisgICAgflNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIo
KTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHZv
aWQgYmVnaW5Db2xsZWN0aW9uKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkaWRTdG9wKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRF
eGVjdXRlQ29uc3RyYWludHMoKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRp
bWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92
ZXJyaWRlOworICAgIAorICAgIHZvaWQgbG9nKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBl
bmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBEZWNpc2lvbjsKLQorICAgIGNsYXNzIFNuYXBzaG90OworICAgIGZyaWVuZCBjbGFzcyBTbmFw
c2hvdDsKKyAgICAKKyAgICBkb3VibGUgYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKCk7Cisg
ICAgCisgICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKGNvbnN0IFNuYXBzaG90
Jik7CisgICAgZG91YmxlIG1heEhlYWRyb29tKCk7CisgICAgZG91YmxlIGhlYWRyb29tRnVsbG5l
c3MoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uKGNvbnN0
IFNuYXBzaG90Jik7CisgICAgZG91YmxlIGNvbGxlY3RvclV0aWxpemF0aW9uKGNvbnN0IFNuYXBz
aG90Jik7CisgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2QoY29uc3QgU25hcHNob3QmKTsKKyAg
ICBkb3VibGUgcGhhc2UoY29uc3QgU25hcHNob3QmKTsKKyAgICBib29sIHNob3VsZEJlUmVzdW1l
ZChjb25zdCBTbmFwc2hvdCYpOworICAgIAogICAgIEhlYXAmIG1faGVhcDsKICAgICBTZWNvbmRz
IG1fcGVyaW9kOwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdp
bm5pbmc7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKLSAg
ICBNb25vdG9uaWNUaW1lIG1faW5pdGlhbFRpbWU7CisgICAgU3RhdGUgbV9zdGF0ZSB7IE5vcm1h
bCB9OworICAgIAorICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdp
bm5pbmcgeyAwIH07CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVu
ZCB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hl
ZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNl
VGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCi0KLSNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1kb3VibGUgU3BhY2VU
aW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QK
LXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQotICAgICAgICBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgbWF4SGVhZHJvb20gPQotICAg
ICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9z
Y2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAK
LSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0gICAgICAgIGJ5dGVzU2luY2VCZWdpbm5p
bmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0gICAgLy8gaGVhZHJvb21GdWxsbmVzcyBj
YW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKLSAgICAvLyBieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRl
YnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5n
IHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkK
LSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVz
cyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Ci0gICAgCi0gICAgZG91Ymxl
IG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOwotICAgIAotICAgIC8v
IFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cu
Ci0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0
b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAotICAgICAg
ICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KLSAgICAgICAgICAg
IE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJu
IG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotfQotCi1TZWNvbmRzIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3Bl
cmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9w
ZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVS
ZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1l
Rmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0
aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigp
OwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVU
b1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAg
aWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVy
biBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotICAg
IHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9k
ICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLX0KLQotTW9ub3RvbmljVGltZSBTcGFj
ZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRS
ZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSAr
IG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAg
IHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9k
OwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFw
KQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlz
ZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQotICAgICwgbV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKLSAgICAgICAg
T3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAgICAgIHN0ZDo6bWF4PGRv
dWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4
RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwotfQotCi12b2lkIFNwYWNlVGltZVNjaGVk
dWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1
bGVyOjpjdXJyZW50RGVjaXNpb24oKQotewotICAgIERlY2lzaW9uIHJlc3VsdDsKLSAgICByZXN1
bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nw
YWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0
Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBIZWFwOwotCi1jbGFzcyBT
cGFjZVRpbWVTY2hlZHVsZXIgewotcHVibGljOgotICAgIGNsYXNzIERlY2lzaW9uIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0
aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXph
dGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Owot
ICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9vbCBzaG91bGRCZVJlc3Vt
ZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsK
LSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Ci0gICAgICAgIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7Ci0KLSAg
ICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKLSAgICAg
ICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Ci0gICAgICAgIE1vbm90
b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVk
dWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIo
SGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cu
Ci0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qg
b2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBz
byBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZl
bid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsK
LSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERlY2lzaW9uOwotCi0gICAgSGVhcCYg
bV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1N5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCkK
K3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUgU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9
CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpiZWdpbkNv
bGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gTm9ybWFsKTsKKyAg
ICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHJldHVybiBtX3N0
YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkgOiBNb25vdG9uaWNUaW1l
Ojpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9y
bWFsID8gTW9ub3RvbmljVGltZTo6bm93KCkgOiBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpOwor
fQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29s
bGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAg
ICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hy
b25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
Ik11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBKU0MgY29u
Y3VycmVudCBHQyByZWxpZXMgb24gc3RvcHBpbmcgdGhlIHdvcmxkIHRvIHN0YXkgYWhlYWQgb2Yg
dGhlIHJldHJlYXRpbmcgd2F2ZWZyb250LgorLy8gSXQgc28gaGFwcGVucyB0aGF0IHRoZSBzYW1l
IEFQSSBjYW4gYmUgcmV1c2VkIHRvIGltcGxlbWVudCBhIG5vbi1jb25jdXJyZW50IEdDIG1vZGUs
IHdoaWNoIHdlCisvLyB1c2Ugb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgR0Mn
cyBhdG9taWNpdHkgcHJvdG9jb2xzLiBUaGF0IG1lYW5zIGFueXRoaW5nIG90aGVyCisvLyB0aGFu
IFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMgc2NoZWR1bGVyIGlzIGEgZHJvcC1pbiByZXBsYWNlbWVu
dCBmb3IgdGhlIGNvbmN1cnJlbnQgR0MncworLy8gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci4g
SXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3VtZSB0aGUgd29ybGQgb25jZSB0aGUgR0MgY3lj
bGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7CitwdWJsaWM6CisgICAgU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgflN5bmNocm9ub3VzU3RvcFRoZVdv
cmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAK
KyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9uaWNU
aW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlv
bigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRpbmdUaW1lb3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlz
aXRpbmdUaW1lb3V0IHsKK3B1YmxpYzoKKyAgICBWaXNpdGluZ1RpbWVvdXQoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29s
IGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAgICAgIDogbV9k
aWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKKyAgICAgICAgLCBtX3Zpc2l0Q291
bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCisgICAgICAgICwgbV90aW1lb3V0KHRpbWVv
dXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291
bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKKyAgICB9CisKKyAgICBib29sIGRpZFZpc2l0U29t
ZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBz
ZWQobV90aW1lb3V0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgbV9kaWRWaXNp
dFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAg
fTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw4ICsyMDIsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZzsKICAgICB2KGRvdWJsZSwgbWF4aW11bU11dGF0b3JVdGlsaXphdGlvbiwgMC43LCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDTWF4SGVhZHJvb20s
IDEuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbmN1cnJlbnRHQ1Blcmlv
ZE1TLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGNvbGxlY3RvclNob3VsZFJl
c3VtZUZpcnN0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihkb3VibGUsIGNvbGxl
Y3RvclBlcm1pdHRlZElkbGVSYXRpbywgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91
YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwgTm9ybWFsLCBudWxscHRy
KSBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>