<?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>79112</bug_id>
          
          <creation_ts>2012-02-21 08:23:48 -0800</creation_ts>
          <short_desc>Refactor code feature analysis in the parser</short_desc>
          <delta_ts>2015-11-30 07:01:39 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79776</dependson>
          <blocked>74509</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Wingo">wingo</reporter>
          <assigned_to name="Andy Wingo">wingo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emanuele.aina</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>560893</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-21 08:23:48 -0800</bug_when>
    <thetext>The patch to be attached has a changelog that says this:

This commit refactors the parser to more uniformly propagate flag
bits down and up the parse process, as the parser descends and
returns into nested blocks.  Some flags get passed town to
subscopes, some apply to specific scopes only, and some get
unioned up after parsing subscopes.

The goal is to eventually be very precise with scoping
information, once we have block scopes: one block scope might use
`eval&apos;, which would require the emission of a symbol table within
that block and containing blocks, whereas another block in the
same function might not, allowing us to not emit a symbol table.

***

I have to apologize for this being another one of those &quot;refactoring&quot; commits.  I&apos;m getting tired of them too :)  But, I do think this is a positive change to make that will make some of the block scoping stuff easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560898</commentid>
    <comment_count>1</comment_count>
      <attachid>127976</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-21 08:27:16 -0800</bug_when>
    <thetext>Created attachment 127976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561021</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-21 10:51:23 -0800</bug_when>
    <thetext>Oliver, what&apos;s the best way to performance test a patch like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561219</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-21 14:17:40 -0800</bug_when>
    <thetext>Sorry I didn&apos;t mention performance before.  I get the same results on sunspider and v8-v6 with this patch as before, within the millisecond.  The binary is some 10 kB smaller or so, with a -g -O2 build with gcc-4.6.  I can see if I can get bencher working tomorrow, if that would be useful.  (I had tried before, with no success.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561233</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-21 14:34:02 -0800</bug_when>
    <thetext>Do
run-sunspider --parse-only


And also in the past i&apos;ve thrown large amounts of JS into a single file and directly measured parse time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565541</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-27 03:13:14 -0800</bug_when>
    <thetext>It is really difficult to say anything with these results.  The error bars are too high.  I did apply something like bug 71801 to my sunspider before running the tests in order to get higher precision timers.

In any case, performance seems to be a wash.

TEST                           COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:                   ??                14.1ms +/- 8.9%   14.1ms +/- 7.3%     not conclusive: might be *1.003x as slow*

=============================================================================

  jquery:                      ??                 2.2ms +/- 14.1%    2.4ms +/- 23.5%     not conclusive: might be *1.055x as slow*
    1.3.2:                     ??                 2.2ms +/- 14.1%    2.4ms +/- 23.5%     not conclusive: might be *1.055x as slow*

  mootools:                    -                  2.5ms +/- 23.4%    2.5ms +/- 16.4% 
    1.2.2-core-nc:             -                  2.5ms +/- 23.4%    2.5ms +/- 16.4% 

  prototype:                   -                  2.7ms +/- 14.0%    2.6ms +/- 6.9% 
    1.6.0.3:                   -                  2.7ms +/- 14.0%    2.6ms +/- 6.9% 

  concat:                      ??                 6.6ms +/- 4.6%    6.7ms +/- 6.5%     not conclusive: might be *1.018x as slow*
    jquery-mootools-prototype: ??                 6.6ms +/- 4.6%    6.7ms +/- 6.5%     not conclusive: might be *1.018x as slow*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566712</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 08:33:36 -0800</bug_when>
    <thetext>Attaching a rebase on top of bug 79776.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566716</commentid>
    <comment_count>7</comment_count>
      <attachid>129261</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 08:36:47 -0800</bug_when>
    <thetext>Created attachment 129261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572986</commentid>
    <comment_count>8</comment_count>
      <attachid>129261</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-07 10:16:02 -0800</bug_when>
    <thetext>Comment on attachment 129261
Patch

Flipping r? again to run the queues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572991</commentid>
    <comment_count>9</comment_count>
      <attachid>129261</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-07 10:17:56 -0800</bug_when>
    <thetext>Comment on attachment 129261
Patch

I believe this patch still applies.

It is performance-neutral.  On my parse test, trunk&apos;s best time over 10 tries is 5.983s, and with this patch is 6.002s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572992</commentid>
    <comment_count>10</comment_count>
      <attachid>130642</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-07 10:20:17 -0800</bug_when>
    <thetext>Created attachment 130642
new patch to run the ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573043</commentid>
    <comment_count>11</comment_count>
      <attachid>130642</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 11:24:08 -0800</bug_when>
    <thetext>Comment on attachment 130642
new patch to run the ews

Attachment 130642 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11852187

New failing tests:
css3/filters/effect-contrast-hw.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573460</commentid>
    <comment_count>12</comment_count>
      <attachid>130642</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-07 18:29:11 -0800</bug_when>
    <thetext>Comment on attachment 130642
new patch to run the ews

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

r=me

&gt; Source/JavaScriptCore/parser/Nodes.h:1416
&gt; +        void setScopeFlags(ScopeFlags scopeFlags) { m_scopeFlags |= scopeFlags; }

A setter with this name would traditionally overwrite the pre-existing value. I&apos;d suggest &quot;addScopeFlags&quot; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574742</commentid>
    <comment_count>13</comment_count>
      <attachid>131015</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-09 02:04:07 -0800</bug_when>
    <thetext>Created attachment 131015
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574790</commentid>
    <comment_count>14</comment_count>
      <attachid>131015</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 03:32:35 -0800</bug_when>
    <thetext>Comment on attachment 131015
Patch for landing

Rejecting attachment 131015 from commit-queue.

New failing tests:
perf/object-keys.html
Full output: http://queues.webkit.org/results/11911506</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574801</commentid>
    <comment_count>15</comment_count>
      <attachid>131015</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-09 04:07:03 -0800</bug_when>
    <thetext>Comment on attachment 131015
Patch for landing

Clearing flags on attachment: 131015

Committed r110287: &lt;http://trac.webkit.org/changeset/110287&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574802</commentid>
    <comment_count>16</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-09 04:07:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574805</commentid>
    <comment_count>17</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-09 04:09:37 -0800</bug_when>
    <thetext>I landed this patch because I couldn&apos;t see what the chromium bot would have to say about JSC performance.  If I did so in error, please let me know.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618016</commentid>
    <comment_count>18</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-07 15:32:23 -0700</bug_when>
    <thetext>This patch broke templating on qq.com -- it would be really good if in future refactoring patches were the smallest they could be, and were landed one piece at a time.  Currently i&apos;m looking at a huge pile of code to determine where the functionality was changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618089</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-07 16:37:15 -0700</bug_when>
    <thetext>Rolled out in r116372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629059</commentid>
    <comment_count>20</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-05-21 07:01:30 -0700</bug_when>
    <thetext>Hi Oliver, I&apos;m sorry I didn&apos;t catch this when you were having problems.  Are you certain that this patch caused a problem?  Do you have any more details?  I can visit qq.com but I have no idea how to tell that it&apos;s correct or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144753</commentid>
    <comment_count>21</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-11-30 07:01:39 -0800</bug_when>
    <thetext>It&apos;s been quite a while. Can this bug be closed again?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127976</attachid>
            <date>2012-02-21 08:27:16 -0800</date>
            <delta_ts>2012-02-28 08:36:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79112-20120221172714.patch</filename>
            <type>text/plain</type>
            <size>56539</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YmQxOTEyZmMzZjFjZGY3OWIxNDAyMjUzNDFlZDE1NjU0MDY5NjcyLi40MTQxNzU5MDEwZDBmOWE0
ZDljMjc3YjI2N2FjODdhNzlkM2VjNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTYgQEAKKzIwMTItMDItMjEgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIGNvZGUgZmVhdHVyZSBhbmFseXNpcyBpbiB0aGUgcGFyc2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTExMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29tbWl0
IHJlZmFjdG9ycyB0aGUgcGFyc2VyIHRvIG1vcmUgdW5pZm9ybWx5IHByb3BhZ2F0ZSBmbGFnCisg
ICAgICAgIGJpdHMgZG93biBhbmQgdXAgdGhlIHBhcnNlIHByb2Nlc3MsIGFzIHRoZSBwYXJzZXIg
ZGVzY2VuZHMgYW5kCisgICAgICAgIHJldHVybnMgaW50byBuZXN0ZWQgYmxvY2tzLiAgU29tZSBm
bGFncyBnZXQgcGFzc2VkIHRvd24gdG8KKyAgICAgICAgc3Vic2NvcGVzLCBzb21lIGFwcGx5IHRv
IHNwZWNpZmljIHNjb3BlcyBvbmx5LCBhbmQgc29tZSBnZXQKKyAgICAgICAgdW5pb25lZCB1cCBh
ZnRlciBwYXJzaW5nIHN1YnNjb3Blcy4KKworICAgICAgICBUaGUgZ29hbCBpcyB0byBldmVudHVh
bGx5IGJlIHZlcnkgcHJlY2lzZSB3aXRoIHNjb3BpbmcKKyAgICAgICAgaW5mb3JtYXRpb24sIG9u
Y2Ugd2UgaGF2ZSBibG9jayBzY29wZXM6IG9uZSBibG9jayBzY29wZSBtaWdodCB1c2UKKyAgICAg
ICAgYGV2YWwnLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBlbWlzc2lvbiBvZiBhIHN5bWJvbCB0
YWJsZSB3aXRoaW4KKyAgICAgICAgdGhhdCBibG9jayBhbmQgY29udGFpbmluZyBibG9ja3MsIHdo
ZXJlYXMgYW5vdGhlciBibG9jayBpbiB0aGUKKyAgICAgICAgc2FtZSBmdW5jdGlvbiBtaWdodCBu
b3QsIGFsbG93aW5nIHVzIHRvIG5vdCBlbWl0IGEgc3ltYm9sIHRhYmxlLgorCisgICAgICAgICog
cGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlRmxhZ3MpOiBSZW5hbWUgZnJvbSBD
b2RlRmVhdHVyZXMuCisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2V0U2NvcGVGbGFncyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2NvcGVGbGFncyk6IE5ldyBhY2Nlc3NvcnMgZm9yIG1f
c2NvcGVGbGFncy4KKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjppc1N0cmljdE1vZGUpOgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnVzZXNFdmFsKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
Ojp1c2VzQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRVc2VzQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjp1c2VzVGhpcyk6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRzQWN0aXZhdGlvbik6IFJlZmFjdG9yIHRoZXNlIGFjY2Vz
c29ycyB0bworICAgICAgICBvcGVyYXRlIG9uIHRoZSBtX3Njb3BlRmxhZ3MgbWVtYmVyLgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnNvdXJjZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJRCk6IFNodWZmbGUg
dGhlc2UgZGVmaW5pdGlvbnMgYXJvdW5kOyBubworICAgICAgICBzZW1hbnRpYyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6U2NvcGVOb2RlKQorICAgICAgICAoSlNDOjpQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUpCisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpFdmFsTm9kZSkKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6IEhhdmUgdGhl
c2UgY29uc3RydWN0b3JzCisgICAgICAgIHRha2UgYSBTY29wZUZsYWdzIGFzIGFuIGFyZ3VtZW50
LCBpbnN0ZWFkIG9mIGEgYm9vbCBpblN0cmljdENvbnRleHQuCisKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9kZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1O
b2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZSk6IEFkYXB0IGNvbnN0cnVjdG9ycyB0byBjaGFuZ2UuCisKKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6U2Nv
cGU6OlNjb3BlKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKEFTVEJ1aWxkZXIpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZSk6IERvbid0IHRyYWNr
IHNjb3BlCisgICAgICAgIGZlYXR1cmVzIGhlcmUuICBJbnN0ZWFkIHJlbHkgb24gdGhlIGJhc2Ug
UGFyc2VyIG1lY2hhbmlzbSB0byB0cmFjaworICAgICAgICBmZWF0dXJlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2RlSW5mby5oIChOb2RlSW5mbywgTm9kZURlY2xhcmF0aW9uSW5mbyk6ICJTY29w
ZUZsYWdzIi4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OlNjb3BlKTogTWFuYWdlIHNjb3BlIHRocm91Z2ggZmxhZ3MsIG5vdAorICAgICAgICBiaXQt
Ym9vbGVhbnMuICBUaGlzIGxldHMgdXMgdW5pZm9ybWx5IHByb3BhZ2F0ZSB0aGVtIHVwIGFuZCBk
b3duLgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTY29wZTo6dXNlVmFyaWFi
bGUpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6Z2V0Q2FwdHVyZWRWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6c2F2ZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpyZXN0b3JlRnVuY3Rp
b25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOiBBZGFwdCB0byB1c2Ug
c2NvcGUgZmxhZ3MgYW5kIHRoZWlyCisgICAgICAgIGFjY2Vzc29ycyBpbnN0ZWFkIG9mIGJpdC1i
b29sZWFucy4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQ
YXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OmRp
ZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNlRWxlbWVudHMpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6IEhvaXN0IHNvbWUgb2YgdGhlIGZs
YWcgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIHRoZSAiY29udGV4dCIgKEFTVEJ1aWxkZXIgb3Ig
U3ludGF4Q2hlY2tlcikgYW5kIHRvIGhlcmUuCisgICAgICAgIERvZXMgbm90IHNlZW0gdG8gaGF2
ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIChTb3VyY2VQcm92aWRlckNhY2hlSXRlbSk6CisgICAgICAgIENhY2hlIHRo
ZSBzY29wZWZsYWdzLgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6IFJlbW92ZSBl
dmFsQ291bnQoKSBkZWNsLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6dXNlc0V2YWwpOgor
ICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp1c2VzQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6aXNTdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6IFNjb3Bl
RmxhZ3MsIG5vdCBmZWF0dXJlcy4KKwogMjAxMi0wMi0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBtYXNzaXZlIGNyYXNoZXMgaW4gYWxsIHRlc3RzIGlu
dHJvZHVjZWQgYnkgcHJldmlvdXMgYnVpbGQgZml4LCBhbmQgZml4IG5vbi1ERkcgYnVpbGQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IGI4NzE4NzA5YjBk
Mzc2YjI0MmFmNTM5ZjAyOTU0NmYwMTQzYzU1YjMuLjVjZTg5YjYyNDA0NDBmZWRhMTkxZmFmYTIz
MWIyNDBjMjZmODk1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCkBAIC03Nyw3ICs3Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKICAgICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZSkKICAgICAgICAgLCBt
X3Njb3BlKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9ldmFsQ291bnQoMCkKICAgICB7CiAgICAg
fQogICAgIApAQCAtMTE5LDcgKzExOCw2IEBAIHB1YmxpYzoKIAogICAgIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiB2YXJEZWNsYXJhdGlvbnMoKSB7IHJldHVy
biBtX3Njb3BlLm1fdmFyRGVjbGFyYXRpb25zOyB9CiAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY0RlY2xhcmF0aW9ucygpIHsgcmV0dXJu
IG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25zOyB9Ci0gICAgaW50IGZlYXR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zY29wZS5tX2ZlYXR1cmVzOyB9CiAgICAgaW50IG51bUNvbnN0YW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fc2NvcGUubV9udW1Db25zdGFudHM7IH0KIAogICAgIHZvaWQgYXBwZW5k
VG9Db21tYShDb21tYU5vZGUqIGNvbW1hTm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgY29t
bWFOb2RlLT5hcHBlbmQoZXhwcik7IH0KQEAgLTE1MiwxNyArMTUwLDggQEAgcHVibGljOgogICAg
ICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBW
b2lkTm9kZShsaW5lTnVtYmVyLCBleHByKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIHRo
aXNFeHByKGludCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdXNlc1RoaXMoKTsKLSAgICAg
ICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBUaGlzTm9kZShsaW5lTnVtYmVyKTsKLSAgICB9
Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoaW50IGxpbmVOdW1iZXIsIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBpbnQgc3RhcnQpCi0gICAgewotICAgICAgICBpZiAobV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQotICAgICAgICAgICAg
dXNlc0FyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJlc29s
dmVOb2RlKGxpbmVOdW1iZXIsICppZGVudCwgc3RhcnQpOwotICAgIH0KKyAgICBFeHByZXNzaW9u
Tm9kZSogdGhpc0V4cHIoaW50IGxpbmVOdW1iZXIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBUaGlzTm9kZShsaW5lTnVtYmVyKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNv
bHZlKGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUobGluZU51bWJlciwgKmlkZW50
LCBzdGFydCk7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChpbnQg
bGluZU51bWJlcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE9iamVjdExpdGVyYWxOb2Rl
KGxpbmVOdW1iZXIpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwo
aW50IGxpbmVOdW1iZXIsIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShsaW5lTnVtYmVyLCBwcm9wZXJ0aWVz
KTsgfQogCkBAIC0yNjMsOSArMjUyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShpbnQg
bGluZU51bWJlciwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSog
Y3JlYXRlRnVuY3Rpb25Cb2R5KGludCBsaW5lTnVtYmVyLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3Mp
CiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFs
RGF0YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uQm9keU5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNjb3BlRmxhZ3Mp
OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2RlKiBjcmVhdGVH
ZXR0ZXJPclNldHRlclByb3BlcnR5KGludCBsaW5lTnVtYmVyLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywg
aW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSkKQEAgLTMwNyw4ICsyOTYsNiBAQCBw
dWJsaWM6CiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQoaW50IGxp
bmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHks
IFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlcnMsIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJy
YWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQogICAgIHsKICAgICAg
ICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNEZWNsTm9kZShs
aW5lTnVtYmVyLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5C
cmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBhcmFtZXRlcnMpOwotICAg
ICAgICBpZiAoKm5hbWUgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMp
Ci0gICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV9mdW5jRGVj
bGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5KCkpOwogICAgICAgICBib2R5LT5zZXRM
b2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUpOwogICAgICAgICByZXR1cm4gZGVjbDsKQEAg
LTQyMSw4ICs0MDgsNiBAQCBwdWJsaWM6CiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVHJ5U3Rh
dGVtZW50KGludCBsaW5lTnVtYmVyLCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRl
bnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUq
IGZpbmFsbHlCbG9jaywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewogICAgICAg
ICBUcnlOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgVHJ5Tm9kZShsaW5lTnVtYmVy
LCB0cnlCbG9jaywgKmlkZW50LCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2spOwotICAgICAgICBp
ZiAoY2F0Y2hCbG9jaykKLSAgICAgICAgICAgIHVzZXNDYXRjaCgpOwogICAgICAgICByZXN1bHQt
PnNldExvYyhzdGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTQ1OCw3ICs0NDMsNiBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVXaXRoU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExpbmUs
IGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgdXNlc1dpdGgoKTsKICAgICAgICAgV2l0aE5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBXaXRoTm9kZShsaW5lTnVtYmVyLCBleHBy
LCBzdGF0ZW1lbnQsIGVuZCwgZW5kIC0gc3RhcnQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTAxLDggKzQ4
NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50
LCBpbnQgYXR0cnMpCiAgICAgewotICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQotICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwog
ICAgICAgICBtX3Njb3BlLm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihpZGVudCwgYXR0cnMpKTsKICAgICB9CiAKQEAgLTUxNyw4ICs0OTksNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29tbWFOb2RlKGxpbmVOdW1iZXIs
IGxpc3QsIGluaXQpOwogICAgIH0KIAotICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2V2YWxDb3VudDsgfQotCiAgICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhp
bnQmIG9wZXJhbmRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogY3VycmVudCwgaW50IGV4cHJT
dGFydCwgaW50IGxocywgaW50IHJocywgYm9vbCBoYXNBc3NpZ25tZW50cykKICAgICB7CiAgICAg
ICAgIG9wZXJhbmRTdGFja0RlcHRoKys7CkBAIC02MDUsMTMgKzU4NSwxMSBAQCBwcml2YXRlOgog
ICAgICAgICBTY29wZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgICAgICA6IG1f
dmFyRGVjbGFyYXRpb25zKG5ldyAoZ2xvYmFsRGF0YSkgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0
aW9uU3RhY2tzOjpWYXJTdGFjaz4pCiAgICAgICAgICAgICAsIG1fZnVuY0RlY2xhcmF0aW9ucyhu
ZXcgKGdsb2JhbERhdGEpIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjaz4pCi0gICAgICAgICAgICAsIG1fZmVhdHVyZXMoMCkKICAgICAgICAgICAgICwgbV9u
dW1Db25zdGFudHMoMCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIFBhcnNlckFyZW5h
RGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiBtX3ZhckRlY2xhcmF0aW9uczsKICAg
ICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiog
bV9mdW5jRGVjbGFyYXRpb25zOwotICAgICAgICBpbnQgbV9mZWF0dXJlczsKICAgICAgICAgaW50
IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKQEAgLTYyMSwxNSArNTk5LDYgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICB2b2lkIGluY0NvbnN0YW50cygpIHsgbV9zY29wZS5tX251bUNvbnN0YW50
cysrOyB9Ci0gICAgdm9pZCB1c2VzVGhpcygpIHsgbV9zY29wZS5tX2ZlYXR1cmVzIHw9IFRoaXNG
ZWF0dXJlOyB9Ci0gICAgdm9pZCB1c2VzQ2F0Y2goKSB7IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBD
YXRjaEZlYXR1cmU7IH0KLSAgICB2b2lkIHVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGUubV9mZWF0
dXJlcyB8PSBBcmd1bWVudHNGZWF0dXJlOyB9Ci0gICAgdm9pZCB1c2VzV2l0aCgpIHsgbV9zY29w
ZS5tX2ZlYXR1cmVzIHw9IFdpdGhGZWF0dXJlOyB9Ci0gICAgdm9pZCB1c2VzRXZhbCgpIAotICAg
IHsKLSAgICAgICAgbV9ldmFsQ291bnQrKzsKLSAgICAgICAgbV9zY29wZS5tX2ZlYXR1cmVzIHw9
IEV2YWxGZWF0dXJlOwotICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyKGlu
dCBsaW5lTnVtYmVyLCBkb3VibGUgZCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgTnVtYmVyTm9kZShsaW5lTnVtYmVyLCBkKTsKQEAgLTY0Miw3ICs2MTEsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxBc3NpZ25tZW50SW5mbywgMTA+IG1fYXNzaWdubWVudEluZm9T
dGFjazsKICAgICBWZWN0b3I8cGFpcjxpbnQsIGludD4sIDEwPiBtX2JpbmFyeU9wZXJhdG9yU3Rh
Y2s7CiAgICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+LCAxMD4gbV91bmFyeVRva2VuU3RhY2s7Ci0g
ICAgaW50IG1fZXZhbENvdW50OwogfTsKIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VUeXBlT2ZOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSogZXhwcikKQEAgLTc5
MiwxMCArNzYwLDggQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNh
bGxOb2RlKGludCBsaW5lTnVtYmVyLCBFeHByZXNzaW9uTm9kZSoKICAgICBpZiAoZnVuYy0+aXNS
ZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nh
c3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0g
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7Ci0gICAgICAgICAgICB1c2VzRXZh
bCgpOworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPmV2YWwpCiAgICAgICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEV2YWxGdW5j
dGlvbkNhbGxOb2RlKGxpbmVOdW1iZXIsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBG
dW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0KICAgICBpZiAoZnVuYy0+aXNC
cmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZUluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUlu
Zm8uaAppbmRleCA0ODUzYWVjNDI4OTVhNDEzNWY2NWY0ZmRmMDQzOWE3MDkwNmU4ZDA0Li5lMGQ0
ZmZlYzRmNjEwY2I1Yjk0YjJlNjkwN2M2ZTM1MjE1NjE1NTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlSW5mby5oCkBAIC0yNiw3ICsyNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBOb2RlSW5mbyB7CiAgICAgICAgIFQg
bV9ub2RlOwotICAgICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICAgICAgU2NvcGVG
bGFncyBtX3Njb3BlRmxhZ3M7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9Owog
CkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUIG1fbm9kZTsKICAg
ICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIG1fdmFy
RGVjbGFyYXRpb25zOwogICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6
OkZ1bmN0aW9uU3RhY2s+KiBtX2Z1bmNEZWNsYXJhdGlvbnM7Ci0gICAgICAgIENvZGVGZWF0dXJl
cyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1fc2NvcGVGbGFnczsKICAgICAgICAg
aW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuY3BwCmluZGV4IDhhZDQ3NGU1NDE1Mzg5ZTdlMDU4MTFlZWRhZmYwN2M2ODY1OTg3
MTAuLmZhZDVmNjJkNTJkZmM2YWNhMGNjNWNkN2ExOWI2ODk1NmYyYzczYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCkBAIC04OSwxOCArODksMTkgQEAgU2NvcGVOb2Rl
RGF0YTo6U2NvcGVOb2RlRGF0YShQYXJzZXJBcmVuYSYgYXJlbmEsIFNvdXJjZUVsZW1lbnRzKiBz
dGF0ZW1lbnRzLCBWYXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNjb3Bl
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TY29wZU5vZGU6OlNjb3BlTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBib29sIGluU3RyaWN0
Q29udGV4dCkKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
aW50IGxpbmVOdW1iZXIsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICA6IFN0YXRlbWVudE5v
ZGUobGluZU51bWJlcikKICAgICAsIFBhcnNlckFyZW5hUmVmQ291bnRlZChnbG9iYWxEYXRhKQot
ICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IE5v
RmVhdHVyZXMpCisgICAgLCBtX3Njb3BlRmxhZ3Moc2NvcGVGbGFncykKKyAgICAsIG1fbnVtQ29u
c3RhbnRzKDApCiB7CiB9CiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9u
U3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIFNjb3Bl
RmxhZ3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKICAgICA6IFN0YXRlbWVudE5vZGUo
bGluZU51bWJlcikKICAgICAsIFBhcnNlckFyZW5hUmVmQ291bnRlZChnbG9iYWxEYXRhKQogICAg
ICwgbV9kYXRhKGFkb3B0UHRyKG5ldyBTY29wZU5vZGVEYXRhKCpnbG9iYWxEYXRhLT5wYXJzZXJB
cmVuYSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBu
dW1Db25zdGFudHMpKSkKLSAgICAsIG1fZmVhdHVyZXMoZmVhdHVyZXMpCisgICAgLCBtX3Njb3Bl
RmxhZ3Moc2NvcGVGbGFncykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKIHsKIH0KQEAgLTExMiwx
NCArMTEzLDE0IEBAIFN0YXRlbWVudE5vZGUqIFNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW50KCkg
Y29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3Jh
bU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDog
U2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0
YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRz
KQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxh
Z3MsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51
bWJlciwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGlu
dCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBS
ZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgbGlu
ZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxl
cywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5v
ZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hpbGRy
ZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBzY29w
ZUZsYWdzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVu
YS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3Qo
KTsKQEAgLTEzMCwxNCArMTMxLDE0IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1O
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1pbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3Rh
Y2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNh
cHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBs
aW5lTnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBFdmFsTm9kZTo6RXZh
bE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgU2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDog
U2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0
YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZsYWdzLCBudW1Db25zdGFu
dHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxk
cmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRp
ZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxFdmFsTm9k
ZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVt
YmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3MsIGludCBudW1Db25z
dGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKGdsb2Jh
bERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8
RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIHNj
b3BlRmxhZ3MsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2Fy
ZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5kYXRhKCktPm1fYXJlbmEucmVtb3ZlTGFz
dCgpOwpAQCAtMTU0LDEzICsxNTUsMTMgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjpGdW5jdGlvblBh
cmFtZXRlcnMoUGFyYW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIpCiAgICAgICAgIGFwcGVuZChw
YXJhbWV0ZXItPmlkZW50KCkpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rp
b25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBib29s
IGluU3RyaWN0Q29udGV4dCkKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVy
LCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTY29wZUZsYWdz
IHNjb3BlRmxhZ3MpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc2Nv
cGVGbGFncykKIHsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6
IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwg
dmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25z
dGFudHMpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlm
aWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
U2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2Rl
KGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywg
ZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc2NvcGVGbGFncywgbnVtQ29uc3RhbnRzKQog
ewogfQogCkBAIC0xNzcsMTQgKzE3OCwxNCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlz
aFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IHBhcmFtZXRlcnMsCiAgICAg
bV9pZGVudCA9IGlkZW50OwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2Rl
OjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgYm9vbCBp
blN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVh
dGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU2NvcGVGbGFncyBz
Y29wZUZsYWdzKQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRh
LCBsaW5lTnVtYmVyLCBpblN0cmljdENvbnRleHQpOworICAgIHJldHVybiBuZXcgRnVuY3Rpb25C
b2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzY29wZUZsYWdzKTsKIH0KIAotUGFzc1Jl
ZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmll
clNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sq
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTY29wZUZsYWdzIHNj
b3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBj
aGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNv
ZGUsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBub2RlID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2VDb2Rl
LCBzY29wZUZsYWdzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+
bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92
ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCAwMzczNzY2YjVk
OGVkOTM5OGRiZmNkZDIzY2UxMDBiNTA5ZjBlZTgwLi43YTM2ODYzMmQ0NWMwMjhmZTZmNTc5ZDky
YTA1OTgwZWZhZjYxOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC00
NywxOSArNDcsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7
CiAgICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBDb2RlRmVhdHVy
ZXM7Ci0KLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgTm9GZWF0dXJlcyA9IDA7Ci0gICAgY29uc3Qg
Q29kZUZlYXR1cmVzIEV2YWxGZWF0dXJlID0gMSA8PCAwOwotICAgIGNvbnN0IENvZGVGZWF0dXJl
cyBBcmd1bWVudHNGZWF0dXJlID0gMSA8PCAxOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBXaXRo
RmVhdHVyZSA9IDEgPDwgMjsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQ2F0Y2hGZWF0dXJlID0g
MSA8PCAzOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBUaGlzRmVhdHVyZSA9IDEgPDwgNDsKLSAg
ICBjb25zdCBDb2RlRmVhdHVyZXMgU3RyaWN0TW9kZUZlYXR1cmUgPSAxIDw8IDU7Ci0gICAgY29u
c3QgQ29kZUZlYXR1cmVzIFNoYWRvd3NBcmd1bWVudHNGZWF0dXJlID0gMSA8PCA2OworICAgIHR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgU2NvcGVGbGFnczsKKworICAgIGNvbnN0IFNjb3BlRmxhZ3Mg
Tm9TY29wZUZsYWdzID0gMDsKKworICAgIC8vIFNvbWUgc2NvcGUgZmxhZ3MgcHJvcGFnYXRlIGRv
d24gdGhlIHBhcnNlIHRyZWUgZnJvbSBwYXJlbnQgc2NvcGVzLCBsaWtlCisgICAgLy8gc3RyaWN0
IG1vZGUuIFRoZXkgYXJlIG1vZGFsIHRvIGFuIGVudGlyZSBzZXQgb2YgbmVzdGVkIHNjb3Blcy4K
KyAgICBjb25zdCBTY29wZUZsYWdzIFN0cmljdE1vZGVGbGFnID0gMSA8PCAwOworICAgIGNvbnN0
IFNjb3BlRmxhZ3MgRnVuY3Rpb25Nb2RlRmxhZyA9IDEgPDwgMTsKKyAgICBjb25zdCBTY29wZUZs
YWdzIEFsbFNjb3BlTW9kZUZsYWdzID0gU3RyaWN0TW9kZUZsYWcgfCBGdW5jdGlvbk1vZGVGbGFn
OworCisgICAgLy8gU29tZSBzY29wZSBmbGFncyByZWZlciBvbmx5IHRvIGEgc3BlY2lmaWMgc2Nv
cGUsIGFuZCBkb24ndCBwcm9wYWdhdGUgZG93bgorICAgIC8vIG9yIHVwLgorICAgIGNvbnN0IFNj
b3BlRmxhZ3MgQmxvY2tTY29wZUZsYWcgPSAxIDw8IDQ7CisgICAgY29uc3QgU2NvcGVGbGFncyBB
bGxTY29wZUtpbmRGbGFncyA9IEJsb2NrU2NvcGVGbGFnOworCisgICAgLy8gT3RoZXIgZmxhZ3Mg
cmVmbGVjdCB1c2VzIHdpdGhpbiBuZXN0ZWQgc2NvcGVzLCBhbmQgc28gcHJvcGFnYXRlIHVwCisg
ICAgLy8gZnJvbSB0aGUgbGVhdmVzLgorICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc0V2YWxGbGFn
ID0gMSA8PCA4OworICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc0FyZ3VtZW50c0ZsYWcgPSAxIDw8
IDk7CisgICAgY29uc3QgU2NvcGVGbGFncyBVc2VzV2l0aEZsYWcgPSAxIDw8IDEwOworICAgIGNv
bnN0IFNjb3BlRmxhZ3MgVXNlc0NhdGNoRmxhZyA9IDEgPDwgMTE7CisgICAgY29uc3QgU2NvcGVG
bGFncyBVc2VzVGhpc0ZsYWcgPSAxIDw8IDEyOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgU2hhZG93
c0FyZ3VtZW50c0ZsYWcgPSAxIDw8IDEzOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgQWxsU2NvcGVV
c2VzRmxhZ3MgPSBVc2VzRXZhbEZsYWcgfCBVc2VzQXJndW1lbnRzRmxhZyB8IFVzZXNXaXRoRmxh
ZyB8IFVzZXNDYXRjaEZsYWcgfCBVc2VzVGhpc0ZsYWcgfCBTaGFkb3dzQXJndW1lbnRzRmxhZzsK
ICAgICAKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQWxsRmVhdHVyZXMgPSBFdmFsRmVhdHVyZSB8
IEFyZ3VtZW50c0ZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSB8IFRoaXNGZWF0
dXJlIHwgU3RyaWN0TW9kZUZlYXR1cmUgfCBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKLQogICAg
IGVudW0gT3BlcmF0b3IgewogICAgICAgICBPcEVxdWFsLAogICAgICAgICBPcFBsdXNFcSwKQEAg
LTEzOTAsMzUgKzE0MDIsMzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRGVj
bGFyYXRpb25TdGFja3M6OlZhclN0YWNrIFZhclN0YWNrOwogICAgICAgICB0eXBlZGVmIERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIEZ1bmN0aW9uU3RhY2s7CiAKLSAgICAgICAgU2Nv
cGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAg
ICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFs
RGF0YSosIGludCwgU2NvcGVGbGFncyk7CisgICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEq
LCBpbnQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKIAogICAgICAgICB1c2luZyBQYXJzZXJBcmVuYVJlZkNvdW50ZWQ6Om9wZXJhdG9yIG5ldzsK
IAogICAgICAgICBTY29wZU5vZGVEYXRhKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdl
dCgpOyB9CiAgICAgICAgIHZvaWQgZGVzdHJveURhdGEoKSB7IG1fZGF0YS5jbGVhcigpOyB9CiAK
LSAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2U7IH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7IH0KLSAgICAgICAgaW50cHRyX3Qgc291cmNlSUQo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT5hc0lEKCk7IH0KLQotICAgICAg
ICB2b2lkIHNldEZlYXR1cmVzKENvZGVGZWF0dXJlcyBmZWF0dXJlcykgeyBtX2ZlYXR1cmVzID0g
ZmVhdHVyZXM7IH0KLSAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgeyByZXR1cm4gbV9m
ZWF0dXJlczsgfQotCi0gICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gKG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlKSAmJiAhKG1fZmVhdHVy
ZXMgJiBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZSk7IH0KLSAgICAgICAgYm9vbCBpc1N0cmljdE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgU3RyaWN0TW9kZUZlYXR1cmU7IH0KLSAg
ICAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKCkgeyBtX2ZlYXR1cmVzIHw9IEFyZ3VtZW50c0Zl
YXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXMgJiBUaGlzRmVhdHVyZTsgfQotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkZvck1vcmVU
aGFuVmFyaWFibGVzKCkgY29uc3QgeyBBU1NFUlQobV9kYXRhKTsgcmV0dXJuIG1fZmVhdHVyZXMg
JiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSk7IH0KLSAgICAgICAg
Ym9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IEFTU0VSVChtX2RhdGEpOyByZXR1cm4gKGhh
c0NhcHR1cmVkVmFyaWFibGVzKCkpIHx8IChtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwgV2l0
aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUpKTsgfQogICAgICAgICBib29sIGhhc0NhcHR1cmVkVmFy
aWFibGVzKCkgY29uc3QgeyByZXR1cm4gISFtX2RhdGEtPm1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6
ZSgpOyB9CiAgICAgICAgIHNpemVfdCBjYXB0dXJlZFZhcmlhYmxlQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEtPm1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIGJvb2wg
Y2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIG1fZGF0YS0+bV9jYXB0
dXJlZFZhcmlhYmxlcy5jb250YWlucyhpZGVudC5pbXBsKCkpOyB9CiAKKyAgICAgICAgdm9pZCBz
ZXRTY29wZUZsYWdzKFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykgeyBtX3Njb3BlRmxhZ3MgfD0gc2Nv
cGVGbGFnczsgfQorICAgICAgICBTY29wZUZsYWdzIHNjb3BlRmxhZ3MoKSBjb25zdCB7IHJldHVy
biBtX3Njb3BlRmxhZ3M7IH0KKworICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9CisgICAgICAgIGJvb2wgdXNl
c0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzRXZhbEZsYWc7IH0KKyAg
ICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gKG1fc2NvcGVGbGFncyAm
IFVzZXNBcmd1bWVudHNGbGFnKSAmJiAhKG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVudHNG
bGFnKTsgfQorICAgICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGVGbGFncyB8
PSBVc2VzQXJndW1lbnRzRmxhZzsgfQorICAgICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc1RoaXNGbGFnOyB9CisKKyAgICAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpIGNvbnN0IHsgQVNTRVJUKGRhdGEoKSk7
IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNl
c0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IEFT
U0VSVChkYXRhKCkpOyByZXR1cm4gaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSB8fCBuZWVkc0FjdGl2
YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpOyB9CisKICAgICAgICAgVmFyU3RhY2smIHZhclN0
YWNrKCkgeyBBU1NFUlQobV9kYXRhKTsgcmV0dXJuIG1fZGF0YS0+bV92YXJTdGFjazsgfQogICAg
ICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyBBU1NFUlQobV9kYXRhKTsgcmV0
dXJuIG1fZGF0YS0+bV9mdW5jdGlvblN0YWNrOyB9CiAKKyAgICAgICAgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICAgICAgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCk7IH0KKyAgICAgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS5wcm92aWRlcigpLT5hc0lEKCk7IH0KKwogICAgICAgICBpbnQgbmVlZGVkQ29uc3RhbnRzKCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fZGF0YSk7CkBAIC0xNDM2LDE5ICsxNDUw
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgT3duUHRyPFNj
b3BlTm9kZURhdGE+IG1fZGF0YTsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7Cisg
ICAgICAgIFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOworICAgICAgICB1bnNpZ25lZCBtX251bUNv
bnN0YW50czsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICB9OwogCiAgICAgY2xh
c3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBj
b25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBp
bnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmll
clNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsK
IAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291
cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0Jiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAg
ICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
ICAgICB9OwpAQCAtMTQ1NiwxMiArMTQ3MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBFdmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29u
c3QgU291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgRXZhbE5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyos
IFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VD
b2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRXZhbE5vZGUo
SlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywgaW50
IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDc4
LDggKzE0OTMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2Rl
IDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlO
b2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBib29sIGlzU3RyaWN0TW9kZSk7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERh
dGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOworICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlKEpTR2xvYmFs
RGF0YSosIGludCwgU2NvcGVGbGFncyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwg
VmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBh
cmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7
IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE0OTYsOCArMTUxMSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIGJv
b2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERh
dGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU2Nv
cGVGbGFncyk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cyk7CiAKICAg
ICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWRO
YW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDkzOWQyNjk2
YzQ4YTBlMDE2MTJhOGZiZTAzNmE4MTY0NDJjZWE1ZjkuLmVlYzQzODc3OTY0ZTE0ZjU1ODhmMTE3
ZjIxMzc3ZjZlYjI4YzJiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKQEAgLTYyLDExICs2MiwxMiBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdQogICAgIG1fbGV4
ZXItPnNldENvZGUoc291cmNlLCBtX2FyZW5hKTsKIAogICAgIG1fZnVuY3Rpb25DYWNoZSA9IHNv
dXJjZS5wcm92aWRlcigpLT5jYWNoZSgpOwotICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3Bl
KCk7Ci0gICAgaWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKLSAgICAgICAg
c2NvcGUtPnNldElzRnVuY3Rpb24oKTsKKyAgICBTY29wZUZsYWdzIHNjb3BlRmxhZ3MgPSBOb1Nj
b3BlRmxhZ3M7CiAgICAgaWYgKHN0cmljdG5lc3MgPT0gSlNQYXJzZVN0cmljdCkKLSAgICAgICAg
c2NvcGUtPnNldFN0cmljdE1vZGUoKTsKKyAgICAgICAgc2NvcGVGbGFncyB8PSBTdHJpY3RNb2Rl
RmxhZzsKKyAgICBpZiAocGFyc2VyTW9kZSA9PSBKU1BhcnNlRnVuY3Rpb25Db2RlKQorICAgICAg
ICBzY29wZUZsYWdzIHw9IEZ1bmN0aW9uTW9kZUZsYWc7CisgICAgU2NvcGVSZWYgc2NvcGUgPSBw
dXNoU2NvcGUoc2NvcGVGbGFncyk7CiAgICAgaWYgKHBhcmFtZXRlcnMpIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMtPnNpemUoKTsgaSsrKQogICAgICAgICAg
ICAgc2NvcGUtPmRlY2xhcmVQYXJhbWV0ZXIoJnBhcmFtZXRlcnMtPmF0KGkpKTsKQEAgLTk2LDE2
ICs5NywxMiBAQCBVU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKCkKIAogICAg
IElkZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgc2NvcGUtPmdldENhcHR1cmVk
VmFyaWFibGVzKGNhcHR1cmVkVmFyaWFibGVzKTsKLSAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMg
PSBjb250ZXh0LmZlYXR1cmVzKCk7Ci0gICAgaWYgKHNjb3BlLT5zdHJpY3RNb2RlKCkpCi0gICAg
ICAgIGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0dXJlOwotICAgIGlmIChzY29wZS0+c2hhZG93
c0FyZ3VtZW50cygpKQotICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVy
ZTsKKyAgICBTY29wZUZsYWdzIHNjb3BlRmxhZ3MgPSBzY29wZS0+bW9kZUZsYWdzKCkgfCBzY29w
ZS0+dXNlc0ZsYWdzKCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25DYWNoZVNpemUgPSBtX2Z1bmN0
aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVTaXplKCkgOiAwOwogICAgIGlmIChmdW5j
dGlvbkNhY2hlU2l6ZSAhPSBvbGRGdW5jdGlvbkNhY2hlU2l6ZSkKICAgICAgICAgbV9sZXhlci0+
c291cmNlUHJvdmlkZXIoKS0+bm90aWZ5Q2FjaGVTaXplQ2hhbmdlZChmdW5jdGlvbkNhY2hlU2l6
ZSAtIG9sZEZ1bmN0aW9uQ2FjaGVTaXplKTsKIAotICAgIGRpZEZpbmlzaFBhcnNpbmcoc291cmNl
RWxlbWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0
aW9ucygpLCBmZWF0dXJlcywKKyAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBj
b250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgc2Nv
cGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgIG1fbGFzdExpbmUsIGNvbnRleHQubnVtQ29u
c3RhbnRzKCksIGNhcHR1cmVkVmFyaWFibGVzKTsKIAogICAgIHJldHVybiBwYXJzZUVycm9yOwpA
QCAtMTEzLDEzICsxMTAsMTMgQEAgVVN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5l
cigpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5
cGU+OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFy
c2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgU2NvcGVGbGFncyBzY29wZUZs
YWdzLCBpbnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFycykKIHsKICAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHM7CiAgICAg
bV92YXJEZWNsYXJhdGlvbnMgPSB2YXJTdGFjazsKICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSBm
dW5jU3RhY2s7CiAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcy5zd2FwKGNhcHR1cmVkVmFycyk7Ci0g
ICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOworICAgIG1fc2NvcGVGbGFncyA9IHNjb3BlRmxhZ3M7
CiAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29u
c3RhbnRzOwogfQpAQCAtMTQ3LDcgKzE0NCw3IEBAIHRlbXBsYXRlIDxTb3VyY2VFbGVtZW50c01v
ZGUgbW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8CiAg
ICAgICAgICAgICBpZiAoZGlyZWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgLy8gInVzZSBzdHJp
Y3QiIG11c3QgYmUgdGhlIGV4YWN0IGxpdGVyYWwgd2l0aG91dCBlc2NhcGUgc2VxdWVuY2VzIG9y
IGxpbmUgY29udGludWF0aW9uLgogICAgICAgICAgICAgICAgIGlmICghaGFzU2V0U3RyaWN0ICYm
IGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGggPT0gbGVuZ3RoT2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dXNlU3RyaWN0SWRlbnRpZmllciA9PSAqZGlyZWN0
aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFN0cmljdE1vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFN0cmljdE1vZGVGbGFnKTsKICAgICAg
ICAgICAgICAgICAgICAgaGFzU2V0U3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ZmFpbElmRmFsc2UoaXNWYWxpZFN0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
bGV4ZXItPnNldE9mZnNldChzdGFydE9mZnNldCk7CkBAIC0yNTUsNiArMjUyLDggQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VWYXJEZWNsYXJhdGkKICAgICAgICAgbmV4dCgpOwogICAgICAgICBib29sIGhhc0luaXRp
YWxpemVyID0gbWF0Y2goRVFVQUwpOwogICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5h
bWVBbmRNZXNzYWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFy
aWFibGUgbmFtZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZS4iKTsKKyAgICAgICAg
aWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lKQorICAg
ICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsKICAg
ICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgKGhhc0luaXRpYWxpemVyIHx8ICghbV9hbGxvd3NJ
biAmJiBtYXRjaChJTlRPS0VOKSkpID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVy
IDogMCk7CiAgICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgewogICAgICAgICAgICAgaW50IHZh
ckRpdm90ID0gdG9rZW5TdGFydCgpICsgMTsKQEAgLTI4OSw2ICsyODgsOCBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUNvbnN0RGVjbAogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6
ZXIgPSBtYXRjaChFUVVBTCk7CiAgICAgICAgIGRlY2xhcmVWYXJpYWJsZShuYW1lKTsKKyAgICAg
ICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lKQor
ICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsK
ICAgICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3Rh
bnQgfCAoaGFzSW5pdGlhbGl6ZXIgPyBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIg
OiAwKSk7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsKICAgICAgICAg
aWYgKGhhc0luaXRpYWxpemVyKSB7CkBAIC01MTEsNyArNTEyLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVdpdGhT
dGF0ZW1lbnQKIHsKICAgICBBU1NFUlQobWF0Y2goV0lUSCkpOwogICAgIGZhaWxJZlRydWVXaXRo
TWVzc2FnZShzdHJpY3RNb2RlKCksICInd2l0aCcgc3RhdGVtZW50cyBhcmUgbm90IHZhbGlkIGlu
IHN0cmljdCBtb2RlIik7Ci0gICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFjdGl2YXRp
b24oKTsKKyAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc1dpdGhGbGFnKTsKICAgICBp
bnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgbmV4dCgpOwogICAgIGNvbnN1bWVPckZh
aWwoT1BFTlBBUkVOKTsKQEAgLTUyNiw2ICs1MjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlV2l0aFN0YXRlbWVu
dAogICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwg
dW51c2VkKTsKICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgIAorICAgIGN1cnJlbnRT
Y29wZSgpLT5zZXRGbGFncyhVc2VzV2l0aEZsYWcpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVdpdGhTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgc3RhdGVtZW50
LCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCkBAIC02MTQsMTUgKzYxNiwx
NSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlVHJ5U3RhdGVtZW50KAogICAgIGludCBsYXN0TGluZSA9IG1fbGFzdExp
bmU7CiAgICAgCiAgICAgaWYgKG1hdGNoKENBVENIKSkgewotICAgICAgICBjdXJyZW50U2NvcGUo
KS0+c2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0
RmxhZ3MoVXNlc0NhdGNoRmxhZyk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgY29uc3VtZU9y
RmFpbChPUEVOUEFSRU4pOwogICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgIGlk
ZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgQXV0
b1BvcFNjb3BlUmVmIGNhdGNoU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOworICAgICAgICBBdXRv
UG9wU2NvcGVSZWYgY2F0Y2hTY29wZSh0aGlzLCBwdXNoU2NvcGUoY3VycmVudFNjb3BlKCktPm1v
ZGVGbGFncygpKSk7CiAgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3Nh
Z2UoZGVjbGFyZVZhcmlhYmxlKGlkZW50KSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFt
ZWQiLCBpZGVudC0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgY2F0Y2hTY29w
ZS0+cHJldmVudE5ld0RlY2xzKCk7CisgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhC
bG9ja1Njb3BlRmxhZyB8IFVzZXNDYXRjaEZsYWcpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENM
T1NFUEFSRU4pOwogICAgICAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UpOwogICAgICAgICBjYXRj
aEJsb2NrID0gcGFyc2VCbG9ja1N0YXRlbWVudChjb250ZXh0KTsKQEAgLTc1OSw3ICs3NjEsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9k
eShUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpCi0g
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBzdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVG
dW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY3VycmVudFNjb3BlKCktPm1v
ZGVGbGFncygpKTsKICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50
RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRyZWVCdWls
ZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8SlNHbG9iYWxE
YXRhKj4obV9nbG9iYWxEYXRhKSwgbV9sZXhlci5nZXQoKSk7CkBAIC03NzAsOCArNzcyLDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUZ1bmN0aW9uQm8KIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0
ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0lu
Q29udGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZp
ZXIqJiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywgVHJlZUZ1bmN0
aW9uQm9keSYgYm9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGludCYgY2xvc2VCcmFjZVBvcywgaW50
JiBib2R5U3RhcnRMaW5lKQogewotICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRo
aXMsIHB1c2hTY29wZSgpKTsKLSAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7Cisg
ICAgQXV0b1BvcFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUodGhpcywgcHVzaFNjb3BlKGN1cnJlbnRT
Y29wZSgpLT5tb2RlRmxhZ3MoKSB8IEZ1bmN0aW9uTW9kZUZsYWcpKTsKICAgICBpZiAobWF0Y2go
SURFTlQpKSB7CiAgICAgICAgIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAg
bmV4dCgpOwpAQCAtNzkzLDggKzc5NCw4IEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50
cyByZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzCiAgICAg
Ly8gSWYgd2Uga25vdyBhYm91dCB0aGlzIGZ1bmN0aW9uIGFscmVhZHksIHdlIGNhbiB1c2UgdGhl
IGNhY2hlZCBpbmZvIGFuZCBza2lwIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rp
b24uCiAgICAgaWYgKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBjYWNoZWRJbmZvID0g
VHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgPyBmaW5kQ2FjaGVkRnVuY3Rpb25JbmZv
KG9wZW5CcmFjZVBvcykgOiAwKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNv
bnRleHQsIHRoZSBjYWNoZWQgZnVuY3Rpb24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRv
by4KLSAgICAgICAgQVNTRVJUKCFzdHJpY3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9k
ZSk7Ci0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgQVNTRVJU
KCFzdHJpY3RNb2RlKCkgfHwgKGNhY2hlZEluZm8tPnNjb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxh
ZykpOworICAgICAgICBib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+
bGFzdExpbmVOdW1iZXIoKSwgY2FjaGVkSW5mby0+c2NvcGVGbGFncyk7CiAgICAgICAgIAogICAg
ICAgICBmdW5jdGlvblNjb3BlLT5yZXN0b3JlRnVuY3Rpb25JbmZvKGNhY2hlZEluZm8pOwogICAg
ICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVl
ZHNGcmVlVmFyaWFibGVJbmZvKSk7CkBAIC04NTQsNiArODU1LDggQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uRGVjbGEKICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25OZWVk
c05hbWUsIHRydWU+KGNvbnRleHQsIG5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZVBv
cywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSkpKTsKICAgICBmYWlsSWZGYWxzZShuYW1l
KTsKICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZShuYW1lKSk7CisgICAg
aWYgKCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQorICAg
ICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc0FyZ3VtZW50c0ZsYWcpOwogICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBv
cywgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSk7CiB9CiAKQEAgLTEzOTEsMTMgKzEzOTQsMTgg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUKICAgICB9CiAgICAgY2FzZSBUSElTVE9LRU46IHsK
ICAgICAgICAgbmV4dCgpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc1Ro
aXNGbGFnKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQudGhpc0V4cHIobV9sZXhlci0+bGFzdExp
bmVOdW1iZXIoKSk7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6IHsKICAgICAgICAgaW50IHN0YXJ0
ID0gdG9rZW5TdGFydCgpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9r
ZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgp
LT51c2VWYXJpYWJsZShpZGVudCwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09
ICppZGVudCk7CisgICAgICAgIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwg
PT0gKmlkZW50KQorICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNFdmFs
RmxhZyk7CisgICAgICAgIGVsc2UgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzID09ICppZGVudCkKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhV
c2VzQXJndW1lbnRzRmxhZyk7CisgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShp
ZGVudCk7CiAgICAgICAgIG1fbGFzdElkZW50aWZpZXIgPSBpZGVudDsKICAgICAgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlUmVzb2x2ZShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBpZGVudCwg
c3RhcnQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDli
NzYyNDJkNGQ5MzJjYWRhYmZmYzIxMTNkNGI5OGVkMzY5MWY3YTkuLjc1MTNkMWYxMWZkNDg5NTgy
OGFmOGNhZWJlODBhZGExNWI1ZjU3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaApAQCAtMTMwLDMwICsxMzAsMTkgQEAgc3RydWN0IFNjb3BlTGFiZWxJbmZvIHsKIH07CiAK
IHN0cnVjdCBTY29wZSB7Ci0gICAgU2NvcGUoY29uc3QgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIGlzRnVuY3Rpb24sIGJvb2wgc3RyaWN0TW9kZSkKKyAgICBTY29wZShjb25zdCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICAgICAgOiBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFs
c2UpCi0gICAgICAgICwgbV91c2VzRXZhbChmYWxzZSkKLSAgICAgICAgLCBtX25lZWRzRnVsbEFj
dGl2YXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyh0cnVlKQotICAgICAg
ICAsIG1fc3RyaWN0TW9kZShzdHJpY3RNb2RlKQotICAgICAgICAsIG1faXNGdW5jdGlvbihpc0Z1
bmN0aW9uKQotICAgICAgICAsIG1faXNGdW5jdGlvbkJvdW5kYXJ5KGZhbHNlKQorICAgICAgICAs
IG1fc2NvcGVGbGFncyhzY29wZUZsYWdzKQogICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUo
dHJ1ZSkKICAgICAgICAgLCBtX2xvb3BEZXB0aCgwKQogICAgICAgICAsIG1fc3dpdGNoRGVwdGgo
MCkKICAgICB7CisgICAgICAgIEFTU0VSVCghKHNjb3BlRmxhZ3MgJiB+QWxsU2NvcGVNb2RlRmxh
Z3MpKTsKICAgICB9CiAKICAgICBTY29wZShjb25zdCBTY29wZSYgcmhzKQogICAgICAgICA6IG1f
Z2xvYmFsRGF0YShyaHMubV9nbG9iYWxEYXRhKQotICAgICAgICAsIG1fc2hhZG93c0FyZ3VtZW50
cyhyaHMubV9zaGFkb3dzQXJndW1lbnRzKQotICAgICAgICAsIG1fdXNlc0V2YWwocmhzLm1fdXNl
c0V2YWwpCi0gICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKHJocy5tX25lZWRzRnVsbEFj
dGl2YXRpb24pCi0gICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyhyaHMubV9hbGxvd3NOZXdEZWNs
cykKLSAgICAgICAgLCBtX3N0cmljdE1vZGUocmhzLm1fc3RyaWN0TW9kZSkKLSAgICAgICAgLCBt
X2lzRnVuY3Rpb24ocmhzLm1faXNGdW5jdGlvbikKLSAgICAgICAgLCBtX2lzRnVuY3Rpb25Cb3Vu
ZGFyeShyaHMubV9pc0Z1bmN0aW9uQm91bmRhcnkpCisgICAgICAgICwgbV9zY29wZUZsYWdzKHJo
cy5tX3Njb3BlRmxhZ3MpCiAgICAgICAgICwgbV9pc1ZhbGlkU3RyaWN0TW9kZShyaHMubV9pc1Zh
bGlkU3RyaWN0TW9kZSkKICAgICAgICAgLCBtX2xvb3BEZXB0aChyaHMubV9sb29wRGVwdGgpCiAg
ICAgICAgICwgbV9zd2l0Y2hEZXB0aChyaHMubV9zd2l0Y2hEZXB0aCkKQEAgLTE2OCw2ICsxNTcs
MjIgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIEFMV0FZU19JTkxJ
TkUgU2NvcGVGbGFncyBzY29wZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzOyB9
CisgICAgQUxXQVlTX0lOTElORSBTY29wZUZsYWdzIG1vZGVGbGFncygpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVGbGFncyAmIEFsbFNjb3BlTW9kZUZsYWdzOyB9CisgICAgQUxXQVlTX0lOTElORSBT
Y29wZUZsYWdzIHVzZXNGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIEFsbFNj
b3BlVXNlc0ZsYWdzOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZsYWdzKFNjb3BlRmxh
Z3Mgc2NvcGVGbGFncykgeyBtX3Njb3BlRmxhZ3MgfD0gc2NvcGVGbGFnczsgfQorCisgICAgQUxX
QVlTX0lOTElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nj
b3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NvcGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNo
YWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTaGFkb3dzQXJn
dW1lbnRzRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zY29wZUZsYWdzICYgRnVuY3Rpb25Nb2RlRmxhZzsgfQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0Jsb2NrU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBC
bG9ja1Njb3BlRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uQm91bmRh
cnkoKSBjb25zdCB7IHJldHVybiBpc0Z1bmN0aW9uKCkgJiYgIWlzQmxvY2tTY29wZSgpOyB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgYWxsb3dzTmV3RGVjbHMoKSBjb25zdCB7IHJldHVybiAh
aXNCbG9ja1Njb3BlKCk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkU3RyaWN0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KKwogICAgIHZvaWQg
c3RhcnRTd2l0Y2goKSB7IG1fc3dpdGNoRGVwdGgrKzsgfQogICAgIHZvaWQgZW5kU3dpdGNoKCkg
eyBtX3N3aXRjaERlcHRoLS07IH0KICAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgbV9sb29wRGVwdGgr
KzsgfQpAQCAtMjAxLDE0ICsyMDYsNiBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICB2b2lkIHNldElzRnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgbV9p
c0Z1bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9pc0Z1bmN0aW9uQm91bmRhcnkgPSB0cnVlOwot
ICAgIH0KLSAgICBib29sIGlzRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzRnVuY3Rpb247IH0KLSAg
ICBib29sIGlzRnVuY3Rpb25Cb3VuZGFyeSgpIHsgcmV0dXJuIG1faXNGdW5jdGlvbkJvdW5kYXJ5
OyB9Ci0KICAgICBib29sIGRlY2xhcmVWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkK
ICAgICB7CiAgICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzICE9ICppZGVudDsKQEAgLTIxOSwzNSArMjE2LDI4IEBAIHN0cnVjdCBTY29w
ZSB7CiAKICAgICB2b2lkIGRlY2xhcmVXcml0ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3N0cmljdE1vZGUpOworICAgICAgICBBU1NFUlQoc3RyaWN0
TW9kZSgpKTsKICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZChpZGVudC0+aW1wbCgpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHByZXZlbnROZXdEZWNscygpIHsgbV9hbGxvd3NOZXdEZWNscyA9
IGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NOZXdEZWNscygpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dzTmV3RGVjbHM7IH0KLQogICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihjb25zdCBJZGVudGlm
aWVyKiBpZGVudCkKICAgICB7CiAgICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQ7CiAgICAgICAgIGJvb2wgaXNW
YWxpZFN0cmljdE1vZGUgPSBtX2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmluZygp
LmltcGwoKSkuc2Vjb25kICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAq
aWRlbnQgJiYgIWlzQXJndW1lbnRzOwogICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9p
c1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3RyaWN0TW9kZTsKICAgICAgICAgaWYgKGlzQXJn
dW1lbnRzKQotICAgICAgICAgICAgbV9zaGFkb3dzQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHNldEZsYWdzKFNoYWRvd3NBcmd1bWVudHNGbGFnKTsKICAgICAgICAgcmV0dXJuIGlzVmFs
aWRTdHJpY3RNb2RlOwogICAgIH0KIAotICAgIHZvaWQgdXNlVmFyaWFibGUoY29uc3QgSWRlbnRp
ZmllciogaWRlbnQsIGJvb2wgaXNFdmFsKQorICAgIHZvaWQgdXNlVmFyaWFibGUoY29uc3QgSWRl
bnRpZmllciogaWRlbnQpCiAgICAgewotICAgICAgICBtX3VzZXNFdmFsIHw9IGlzRXZhbDsKICAg
ICAgICAgbV91c2VkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7CiAgICAg
fQogCi0gICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2
YXRpb24gPSB0cnVlOyB9Ci0KICAgICBib29sIGNvbGxlY3RGcmVlVmFyaWFibGVzKFNjb3BlKiBu
ZXN0ZWRTY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKICAgICB7Ci0gICAg
ICAgIGlmIChuZXN0ZWRTY29wZS0+bV91c2VzRXZhbCkKLSAgICAgICAgICAgIG1fdXNlc0V2YWwg
PSB0cnVlOworICAgICAgICBzZXRGbGFncyhuZXN0ZWRTY29wZS0+dXNlc0ZsYWdzKCkpOwogICAg
ICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBuZXN0ZWRTY29wZS0+bV91c2VkVmFy
aWFibGVzLmVuZCgpOwogICAgICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9
IG5lc3RlZFNjb3BlLT5tX3VzZWRWYXJpYWJsZXMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIp
IHsKICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV9kZWNsYXJlZFZhcmlhYmxlcy5jb250
YWlucygqcHRyKSkKQEAgLTI3OSw3ICsyNjksNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgdm9p
ZCBnZXRDYXB0dXJlZFZhcmlhYmxlcyhJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcykK
ICAgICB7Ci0gICAgICAgIGlmIChtX25lZWRzRnVsbEFjdGl2YXRpb24gfHwgbV91c2VzRXZhbCkg
eworICAgICAgICBpZiAobmVlZHNGdWxsQWN0aXZhdGlvbigpKSB7CiAgICAgICAgICAgICBjYXB0
dXJlZFZhcmlhYmxlcy5zd2FwKG1fZGVjbGFyZWRWYXJpYWJsZXMpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yODksMTEgKzI3OSw2IEBAIHN0cnVjdCBTY29wZSB7CiAgICAg
ICAgICAgICBjYXB0dXJlZFZhcmlhYmxlcy5hZGQoKnB0cik7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgdm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBtX3N0cmljdE1vZGUgPSB0cnVlOyB9Ci0gICAgYm9v
bCBzdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCBp
c1ZhbGlkU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0K
LSAgICBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NBcmd1
bWVudHM7IH0KLQogICAgIHZvaWQgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IoY29uc3Qg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1w
bD4gPiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgSWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5k
ID0gY2FwdHVyZWRWYXJpYWJsZXMuZW5kKCk7CkBAIC0zMDcsMjAgKzI5MiwxNiBAQCBzdHJ1Y3Qg
U2NvcGUgewogCiAgICAgdm9pZCBzYXZlRnVuY3Rpb25JbmZvKFNvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtKiBpbmZvKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXNGdW5jdGlvbik7Ci0gICAgICAg
IGluZm8tPnVzZXNFdmFsID0gbV91c2VzRXZhbDsKLSAgICAgICAgaW5mby0+c3RyaWN0TW9kZSA9
IG1fc3RyaWN0TW9kZTsKLSAgICAgICAgaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbiA9IG1fbmVl
ZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAgICAgQVNTRVJUKGlzRnVuY3Rpb24oKSk7CisgICAgICAg
IGluZm8tPnNjb3BlRmxhZ3MgPSBtX3Njb3BlRmxhZ3M7CiAgICAgICAgIGNvcHlDYXB0dXJlZFZh
cmlhYmxlc1RvVmVjdG9yKG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxl
cyk7CiAgICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1fdXNlZFZhcmlhYmxl
cywgaW5mby0+dXNlZFZhcmlhYmxlcyk7CiAgICAgfQogCiAgICAgdm9pZCByZXN0b3JlRnVuY3Rp
b25JbmZvKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBpbmZvKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1faXNGdW5jdGlvbik7Ci0gICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2Vz
RXZhbDsKLSAgICAgICAgbV9zdHJpY3RNb2RlID0gaW5mby0+c3RyaWN0TW9kZTsKLSAgICAgICAg
bV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAg
ICAgQVNTRVJUKGlzRnVuY3Rpb24oKSk7CisgICAgICAgIG1fc2NvcGVGbGFncyB8PSBpbmZvLT5z
Y29wZUZsYWdzOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxlcy5z
aXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAg
ICAgICAgICBtX3VzZWRWYXJpYWJsZXMuYWRkKGluZm8tPnVzZWRWYXJpYWJsZXNbaV0pOwpAQCAt
MzMxLDEzICszMTIsNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiBwcml2YXRlOgogICAgIGNvbnN0IEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDog
MTsKLSAgICBib29sIG1fdXNlc0V2YWwgOiAxOwotICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0
aW9uIDogMTsKLSAgICBib29sIG1fYWxsb3dzTmV3RGVjbHMgOiAxOwotICAgIGJvb2wgbV9zdHJp
Y3RNb2RlIDogMTsKLSAgICBib29sIG1faXNGdW5jdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2lzRnVu
Y3Rpb25Cb3VuZGFyeSA6IDE7CisgICAgU2NvcGVGbGFncyBtX3Njb3BlRmxhZ3M7CiAgICAgYm9v
bCBtX2lzVmFsaWRTdHJpY3RNb2RlIDogMTsKICAgICBpbnQgbV9sb29wRGVwdGg7CiAgICAgaW50
IG1fc3dpdGNoRGVwdGg7CkBAIC00MjcsMjAgKzQwMiwxNCBAQCBwcml2YXRlOgogICAgICAgICBQ
YXJzZXIqIG1fcGFyc2VyOwogICAgIH07CiAKLSAgICBTY29wZVJlZiBjdXJyZW50U2NvcGUoKQor
ICAgIEFMV0FZU19JTkxJTkUgU2NvcGVSZWYgY3VycmVudFNjb3BlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBTY29wZVJlZigmbV9zY29wZVN0YWNrLCBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7
CiAgICAgfQogICAgIAotICAgIFNjb3BlUmVmIHB1c2hTY29wZSgpCisgICAgU2NvcGVSZWYgcHVz
aFNjb3BlKFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICB7Ci0gICAgICAgIGJvb2wgaXNGdW5j
dGlvbiA9IGZhbHNlOwotICAgICAgICBib29sIGlzU3RyaWN0ID0gZmFsc2U7Ci0gICAgICAgIGlm
ICghbV9zY29wZVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaXNTdHJpY3QgPSBtX3Nj
b3BlU3RhY2subGFzdCgpLnN0cmljdE1vZGUoKTsKLSAgICAgICAgICAgIGlzRnVuY3Rpb24gPSBt
X3Njb3BlU3RhY2subGFzdCgpLmlzRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICBtX3Nj
b3BlU3RhY2suYXBwZW5kKFNjb3BlKG1fZ2xvYmFsRGF0YSwgaXNGdW5jdGlvbiwgaXNTdHJpY3Qp
KTsKKyAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZShtX2dsb2JhbERhdGEsIHNjb3Bl
RmxhZ3MpKTsKICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY29wZSgpOwogICAgIH0KICAgICAKQEAg
LTQ5Miw3ICs0NjEsNyBAQCBwcml2YXRlOgogICAgIFVTdHJpbmcgcGFyc2VJbm5lcigpOwogCiAg
ICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgUGFyc2VyQXJlbmFEYXRh
PERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIENv
ZGVGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIFNjb3BlRmxhZ3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCwgaW50LCBJZGVudGlmaWVyU2V0Jik7CiAKICAgICAvLyBVc2Vk
IHRvIGRldGVybWluZSB0eXBlIG9mIGVycm9yIHRvIHJlcG9ydC4KQEAgLTgyMywxNCArNzkyLDEz
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gVVN0cmluZyhtc2cpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9v
cCgpOyB9Ci0gICAgdm9pZCBlbmRMb29wKCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9
Ci0gICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0U3dpdGNoKCk7
IH0KLSAgICB2b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPmVuZFN3aXRjaCgpOyB9
Ci0gICAgdm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBjdXJyZW50U2NvcGUoKS0+c2V0U3RyaWN0TW9k
ZSgpOyB9Ci0gICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPnN0
cmljdE1vZGUoKTsgfQotICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJy
ZW50U2NvcGUoKS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQotICAgIGJvb2wgZGVjbGFyZVBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRl
Y2xhcmVQYXJhbWV0ZXIoaWRlbnQpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHN0YXJ0TG9v
cCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9vcCgpOyB9CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGVuZExvb3AoKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRMb29wKCk7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc3RhcnRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydFN3aXRjaCgp
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCkt
PmVuZFN3aXRjaCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHN0cmljdE1vZGUoKSB7IHJl
dHVybiBjdXJyZW50U2NvcGUoKS0+c3RyaWN0TW9kZSgpOyB9CisgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzVmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmlzVmFsaWRT
dHJpY3RNb2RlKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihj
b25zdCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xhcmVQ
YXJhbWV0ZXIoaWRlbnQpOyB9CiAgICAgYm9vbCBicmVha0lzVmFsaWQoKQogICAgIHsKICAgICAg
ICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29wZSgpOwpAQCAtOTQ5LDcgKzkxNyw3IEBA
IHByaXZhdGU6CiAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
az4qIG1fdmFyRGVjbGFyYXRpb25zOwogICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKICAgICBJZGVudGlmaWVy
U2V0IG1fY2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7Cisg
ICAgU2NvcGVGbGFncyBtX3Njb3BlRmxhZ3M7CiAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAg
IAogICAgIHN0cnVjdCBEZXB0aE1hbmFnZXIgewpAQCAtMTAxMCw3ICs5NzgsNyBAQCBQYXNzUmVm
UHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iagogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9m
dW5jRGVjbGFyYXRpb25zID8gJm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcHR1cmVkVmFyaWFibGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc2NvcGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2Ut
PmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lKTsKICAgICB9IGVsc2UgaWYgKGxleGljYWxHbG9iYWxP
YmplY3QpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaAppbmRleCAzNjYyMzY3YTAxYjcwOWQ5Y2Q0ZWMzZDQ3ZDJmM2Ri
OTNlNWUyNGE3Li5hZDdhNzU5Y2VmZDYyZjJjMjhjYjdlYjI5OThiYjhkODY2NzE2Zjc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oCkBAIC02MSw5ICs2MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBpbnQgY2xvc2VC
cmFjZUxpbmU7CiAgICAgaW50IGNsb3NlQnJhY2VQb3M7Ci0gICAgYm9vbCB1c2VzRXZhbDsKLSAg
ICBib29sIHN0cmljdE1vZGU7Ci0gICAgYm9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uOworICAgIHVu
c2lnbmVkIHNob3J0IHNjb3BlRmxhZ3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+
IHVzZWRWYXJpYWJsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHdyaXR0ZW5W
YXJpYWJsZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
eW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNr
ZXIuaAppbmRleCAzMmNiZjdkNmNjNmQ1MmI4Y2E4YWJjMzM0ODMxNTYyOGIzZjAzZmI4Li41OWVh
ZDZjYzRmMjNjOGJkOTExZjI4ZDMyOGZkNjU2YTk0ZDA2OGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtMjE0LDcgKzIxNCw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFwcGVuZFN0YXRlbWVudChpbnQsIGludCkgeyB9CiAgICAgdm9pZCBhZGRW
YXIoY29uc3QgSWRlbnRpZmllciosIGJvb2wpIHsgfQogICAgIGludCBjb21iaW5lQ29tbWFOb2Rl
cyhpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGV2YWxDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYg
b3BlcmFuZFN0YWNrRGVwdGgsIGludCBleHByLCBpbnQsIGludCwgaW50LCBib29sKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX3RvcEJpbmFyeUV4cHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDI1ZGRmNzY0YTk2MjQ1ZGU2OTc4ZmViZTFmZjRk
NmEzMjIwODBkMjUuLmM4NDgyN2JjODliN2I3YTg0Mjg0NDJlODYxNzgwZDc4NThmZjVhZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0yMjMs
NyArMjIzLDcgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGUKICAgICAgICAgICAgIEFTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICAgICAgfQotICAg
ICAgICByZWNvcmRQYXJzZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1
cmVkVmFyaWFibGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkp
OworICAgICAgICByZWNvcmRQYXJzZShldmFsTm9kZS0+c2NvcGVGbGFncygpLCBldmFsTm9kZS0+
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgZXZhbE5vZGUtPmxpbmVObygpLCBldmFsTm9kZS0+bGFz
dExpbmUoKSk7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgCkBAIC0zNTcs
NyArMzU3LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2MKICAgICAgICAgICAgIEFTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICAgICAgfQotICAg
ICAgICByZWNvcmRQYXJzZShwcm9ncmFtTm9kZS0+ZmVhdHVyZXMoKSwgcHJvZ3JhbU5vZGUtPmhh
c0NhcHR1cmVkVmFyaWFibGVzKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSwgcHJvZ3JhbU5vZGUt
Pmxhc3RMaW5lKCkpOworICAgICAgICByZWNvcmRQYXJzZShwcm9ncmFtTm9kZS0+c2NvcGVGbGFn
cygpLCBwcm9ncmFtTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxp
bmVObygpLCBwcm9ncmFtTm9kZS0+bGFzdExpbmUoKSk7CiAKICAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAg
ICAgCkBAIC01MTksNyArNTE5LDcgQEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVu
Y3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW4KICAgICBpZiAo
bV9mb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsK
ICAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKLSAgICByZWNv
cmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBi
b2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CisgICAgcmVjb3JkUGFyc2UoYm9keS0+
c2NvcGVGbGFncygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5LT5saW5lTm8o
KSwgYm9keS0+bGFzdExpbmUoKSk7CiAKICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJl
c3VsdDsKICAgICBBU1NFUlQoKGNvbXBpbGF0aW9uS2luZCA9PSBGaXJzdENvbXBpbGF0aW9uKSA9
PSAhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDY5ZTgwYjI4ZWZmMzdjNmVkNzBhODU1ZWMz
ZDU5NDg3OTQ2NDhkMjUuLjk3NjI2NzllM2NlMmI2NTY3NTU2NTE0NTQ0OTBiZGViZDUzMTMwODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTI3MCwx
NCArMjcwLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKICAgICAgICAgICAgIDogRXhl
Y3V0YWJsZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09N
UElMRUQpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAgICAgICAgICwgbV9m
ZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKKyAgICAg
ICAgICAgICwgbV9zY29wZUZsYWdzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZsYWcg
OiBOb1Njb3BlRmxhZ3MpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFNjcmlwdEV4
ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQogICAgICAgICAgICAgOiBF
eGVjdXRhYmxlQmFzZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRF
UlNfTk9UX0NPTVBJTEVEKQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAg
ICAgICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6
IDApCisgICAgICAgICAgICAsIG1fc2NvcGVGbGFncyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmlj
dE1vZGVGbGFnIDogTm9TY29wZUZsYWdzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjkx
LDEwICsyOTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBsaW5lTm8oKSBjb25z
dCB7IHJldHVybiBtX2ZpcnN0TGluZTsgfQogICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RMaW5lOyB9CiAKLSAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQotICAgICAgICBib29sIHVzZXNBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQot
ICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgfHwgbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwg
Q2F0Y2hGZWF0dXJlKTsgfQotICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsgfQorICAgICAgICBib29sIHVzZXNF
dmFsKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CisgICAg
ICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVz
ZXNBcmd1bWVudHNGbGFnOyB9CisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2
YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxh
ZzsgfQogCiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCkBAIC0zMTAsMTYg
KzMxMCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRW
YXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICAgICAgdm9pZCByZWNv
cmRQYXJzZShTY29wZUZsYWdzIHNjb3BlRmxhZ3MsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAgICAgICAgbV9m
ZWF0dXJlcyA9IGZlYXR1cmVzOworICAgICAgICAgICAgbV9zY29wZUZsYWdzID0gc2NvcGVGbGFn
czsKICAgICAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlh
YmxlczsKICAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICAgICAg
bV9sYXN0TGluZSA9IGxhc3RMaW5lOwogICAgICAgICB9CiAKICAgICAgICAgU291cmNlQ29kZSBt
X3NvdXJjZTsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAgIFNjb3Bl
RmxhZ3MgbV9zY29wZUZsYWdzOwogICAgICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7
CiAgICAgICAgIGludCBtX2ZpcnN0TGluZTsKICAgICAgICAgaW50IG1fbGFzdExpbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129261</attachid>
            <date>2012-02-28 08:36:47 -0800</date>
            <delta_ts>2012-03-07 10:20:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79112-20120228173644.patch</filename>
            <type>text/plain</type>
            <size>56186</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
YTRiZTM2Y2FjMDhlOGM2MTViOGNmZmQ1M2U4YTE1ZDAwMmIxZjU3Li5jMDY2ZjljZjE3NDcxMmQ5
MDEwMzA1MjMzYmE2Yzg2MDI4YjBmNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTYgQEAKKzIwMTItMDItMjEgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIGNvZGUgZmVhdHVyZSBhbmFseXNpcyBpbiB0aGUgcGFyc2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTExMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29tbWl0
IHJlZmFjdG9ycyB0aGUgcGFyc2VyIHRvIG1vcmUgdW5pZm9ybWx5IHByb3BhZ2F0ZSBmbGFnCisg
ICAgICAgIGJpdHMgZG93biBhbmQgdXAgdGhlIHBhcnNlIHByb2Nlc3MsIGFzIHRoZSBwYXJzZXIg
ZGVzY2VuZHMgYW5kCisgICAgICAgIHJldHVybnMgaW50byBuZXN0ZWQgYmxvY2tzLiAgU29tZSBm
bGFncyBnZXQgcGFzc2VkIHRvd24gdG8KKyAgICAgICAgc3Vic2NvcGVzLCBzb21lIGFwcGx5IHRv
IHNwZWNpZmljIHNjb3BlcyBvbmx5LCBhbmQgc29tZSBnZXQKKyAgICAgICAgdW5pb25lZCB1cCBh
ZnRlciBwYXJzaW5nIHN1YnNjb3Blcy4KKworICAgICAgICBUaGUgZ29hbCBpcyB0byBldmVudHVh
bGx5IGJlIHZlcnkgcHJlY2lzZSB3aXRoIHNjb3BpbmcKKyAgICAgICAgaW5mb3JtYXRpb24sIG9u
Y2Ugd2UgaGF2ZSBibG9jayBzY29wZXM6IG9uZSBibG9jayBzY29wZSBtaWdodCB1c2UKKyAgICAg
ICAgYGV2YWwnLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBlbWlzc2lvbiBvZiBhIHN5bWJvbCB0
YWJsZSB3aXRoaW4KKyAgICAgICAgdGhhdCBibG9jayBhbmQgY29udGFpbmluZyBibG9ja3MsIHdo
ZXJlYXMgYW5vdGhlciBibG9jayBpbiB0aGUKKyAgICAgICAgc2FtZSBmdW5jdGlvbiBtaWdodCBu
b3QsIGFsbG93aW5nIHVzIHRvIG5vdCBlbWl0IGEgc3ltYm9sIHRhYmxlLgorCisgICAgICAgICog
cGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlRmxhZ3MpOiBSZW5hbWUgZnJvbSBD
b2RlRmVhdHVyZXMuCisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2V0U2NvcGVGbGFncyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2NvcGVGbGFncyk6IE5ldyBhY2Nlc3NvcnMgZm9yIG1f
c2NvcGVGbGFncy4KKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjppc1N0cmljdE1vZGUpOgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnVzZXNFdmFsKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
Ojp1c2VzQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRVc2VzQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjp1c2VzVGhpcyk6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRzQWN0aXZhdGlvbik6IFJlZmFjdG9yIHRoZXNlIGFjY2Vz
c29ycyB0bworICAgICAgICBvcGVyYXRlIG9uIHRoZSBtX3Njb3BlRmxhZ3MgbWVtYmVyLgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnNvdXJjZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJRCk6IFNodWZmbGUg
dGhlc2UgZGVmaW5pdGlvbnMgYXJvdW5kOyBubworICAgICAgICBzZW1hbnRpYyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6U2NvcGVOb2RlKQorICAgICAgICAoSlNDOjpQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUpCisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpFdmFsTm9kZSkKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6IEhhdmUgdGhl
c2UgY29uc3RydWN0b3JzCisgICAgICAgIHRha2UgYSBTY29wZUZsYWdzIGFzIGFuIGFyZ3VtZW50
LCBpbnN0ZWFkIG9mIGEgYm9vbCBpblN0cmljdENvbnRleHQuCisKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9kZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1O
b2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZSk6IEFkYXB0IGNvbnN0cnVjdG9ycyB0byBjaGFuZ2UuCisKKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6U2Nv
cGU6OlNjb3BlKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKEFTVEJ1aWxkZXIpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZSk6IERvbid0IHRyYWNr
IHNjb3BlCisgICAgICAgIGZlYXR1cmVzIGhlcmUuICBJbnN0ZWFkIHJlbHkgb24gdGhlIGJhc2Ug
UGFyc2VyIG1lY2hhbmlzbSB0byB0cmFjaworICAgICAgICBmZWF0dXJlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2RlSW5mby5oIChOb2RlSW5mbywgTm9kZURlY2xhcmF0aW9uSW5mbyk6ICJTY29w
ZUZsYWdzIi4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OlNjb3BlKTogTWFuYWdlIHNjb3BlIHRocm91Z2ggZmxhZ3MsIG5vdAorICAgICAgICBiaXQt
Ym9vbGVhbnMuICBUaGlzIGxldHMgdXMgdW5pZm9ybWx5IHByb3BhZ2F0ZSB0aGVtIHVwIGFuZCBk
b3duLgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTY29wZTo6dXNlVmFyaWFi
bGUpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6Z2V0Q2FwdHVyZWRWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6c2F2ZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpyZXN0b3JlRnVuY3Rp
b25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOiBBZGFwdCB0byB1c2Ug
c2NvcGUgZmxhZ3MgYW5kIHRoZWlyCisgICAgICAgIGFjY2Vzc29ycyBpbnN0ZWFkIG9mIGJpdC1i
b29sZWFucy4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQ
YXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OmRp
ZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNlRWxlbWVudHMpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6IEhvaXN0IHNvbWUgb2YgdGhlIGZs
YWcgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIHRoZSAiY29udGV4dCIgKEFTVEJ1aWxkZXIgb3Ig
U3ludGF4Q2hlY2tlcikgYW5kIHRvIGhlcmUuCisgICAgICAgIERvZXMgbm90IHNlZW0gdG8gaGF2
ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIChTb3VyY2VQcm92aWRlckNhY2hlSXRlbSk6CisgICAgICAgIENhY2hlIHRo
ZSBzY29wZWZsYWdzLgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6IFJlbW92ZSBl
dmFsQ291bnQoKSBkZWNsLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6dXNlc0V2YWwpOgor
ICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp1c2VzQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6aXNTdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6IFNjb3Bl
RmxhZ3MsIG5vdCBmZWF0dXJlcy4KKwogMjAxMi0wMi0yNyAgQW5keSBXaW5nbyAgPHdpbmdvQGln
YWxpYS5jb20+CiAKICAgICAgICAgTGV4ZXI6IFNwZWNpYWxpemUgY2hhcmFjdGVyIHByZWRpY2F0
ZXMgZm9yIExDaGFyLCBVQ2hhcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAppbmRleCAwZWI2MGNmODk5MmZmMDkyNDk5MTM0NDMyOGJmOTMxYTFiZjczNmU3Li5hMTcz
Y2MxMGZjYzc2ZTA3ZjBmYTk4NjZjNDNiNGI2MzVjMDdkM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtNzcsNyArNzcsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwgbV9zb3VyY2VDb2RlKHNv
dXJjZUNvZGUpCiAgICAgICAgICwgbV9zY29wZShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fZXZh
bENvdW50KDApCiAgICAgewogICAgIH0KICAgICAKQEAgLTExOSw3ICsxMTgsNiBAQCBwdWJsaWM6
CiAKICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFy
RGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9uczsgfQogICAg
IFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNE
ZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9uczsgfQotICAg
IGludCBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9mZWF0dXJlczsgfQogICAg
IGludCBudW1Db25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fbnVtQ29uc3RhbnRz
OyB9CiAKICAgICB2b2lkIGFwcGVuZFRvQ29tbWEoQ29tbWFOb2RlKiBjb21tYU5vZGUsIEV4cHJl
c3Npb25Ob2RlKiBleHByKSB7IGNvbW1hTm9kZS0+YXBwZW5kKGV4cHIpOyB9CkBAIC0xNTIsMTcg
KzE1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgVm9pZE5vZGUobGluZU51bWJlciwgZXhwcik7CiAgICAgfQot
ICAgIEV4cHJlc3Npb25Ob2RlKiB0aGlzRXhwcihpbnQgbGluZU51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHVzZXNUaGlzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05v
ZGUobGluZU51bWJlcik7Ci0gICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZl
KGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KQotICAg
IHsKLSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09
ICppZGVudCkKLSAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCAqaWRlbnQsIHN0YXJ0KTsK
LSAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIHRoaXNFeHByKGludCBsaW5lTnVtYmVyKSB7IHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05vZGUobGluZU51bWJlcik7IH0KKyAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIGludCBzdGFydCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJlc29sdmVO
b2RlKGxpbmVOdW1iZXIsICppZGVudCwgc3RhcnQpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZU9iamVjdExpdGVyYWwoaW50IGxpbmVOdW1iZXIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBPYmplY3RMaXRlcmFsTm9kZShsaW5lTnVtYmVyKTsgfQogICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVPYmplY3RMaXRlcmFsKGludCBsaW5lTnVtYmVyLCBQcm9wZXJ0eUxpc3ROb2RlKiBw
cm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgT2JqZWN0TGl0ZXJhbE5vZGUo
bGluZU51bWJlciwgcHJvcGVydGllcyk7IH0KIApAQCAtMjYzLDkgKzI1Miw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBj
cmVhdGVGdW5jdGlvbkJvZHkoaW50IGxpbmVOdW1iZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQor
ICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShpbnQgbGluZU51bWJlciwg
U2NvcGVGbGFncyBzY29wZUZsYWdzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQm9k
eU5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGluU3RyaWN0Q29udGV4dCk7
CisgICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBs
aW5lTnVtYmVyLCBzY29wZUZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGUgPGJvb2w+
IFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShpbnQgbGluZU51bWJl
ciwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIFBhcmFt
ZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5CcmFjZVBv
cywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUp
CkBAIC0zMTIsOCArMzAxLDYgQEAgcHVibGljOgogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZ1
bmNEZWNsU3RhdGVtZW50KGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBG
dW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3Bl
bkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5
RW5kTGluZSkKICAgICB7CiAgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBGdW5jRGVjbE5vZGUobGluZU51bWJlciwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29k
ZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExp
bmUpLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAgaWYgKCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzKQotICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAg
ICAgICBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoZGVjbC0+Ym9keSgp
KTsKICAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lKTsKICAg
ICAgICAgcmV0dXJuIGRlY2w7CkBAIC00MjYsOCArNDEzLDYgQEAgcHVibGljOgogICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZVRyeVN0YXRlbWVudChpbnQgbGluZU51bWJlciwgU3RhdGVtZW50Tm9k
ZSogdHJ5QmxvY2ssIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRj
aEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2ssIGludCBzdGFydExpbmUsIGludCBl
bmRMaW5lKQogICAgIHsKICAgICAgICAgVHJ5Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERh
dGEpIFRyeU5vZGUobGluZU51bWJlciwgdHJ5QmxvY2ssICppZGVudCwgY2F0Y2hCbG9jaywgZmlu
YWxseUJsb2NrKTsKLSAgICAgICAgaWYgKGNhdGNoQmxvY2spCi0gICAgICAgICAgICB1c2VzQ2F0
Y2goKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00NjMsNyArNDQ4LDYgQEAgcHVibGljOgogCiAg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlV2l0aFN0YXRlbWVudChpbnQgbGluZU51bWJlciwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0LCBp
bnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIHVzZXNX
aXRoKCk7CiAgICAgICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgV2l0
aE5vZGUobGluZU51bWJlciwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTUwNiw4ICs0OTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFZhcihj
b25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGF0dHJzKQogICAgIHsKLSAgICAgICAgaWYgKG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKLSAgICAgICAg
ICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9ucy0+
ZGF0YS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWRlbnQsIGF0dHJzKSk7CiAgICAgfQogCkBAIC01
MjIsOCArNTA0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IENvbW1hTm9kZShsaW5lTnVtYmVyLCBsaXN0LCBpbml0KTsKICAgICB9CiAKLSAgICBpbnQgZXZh
bENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ291bnQ7IH0KLQogICAgIHZvaWQgYXBwZW5k
QmluYXJ5RXhwcmVzc2lvbkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5v
ZGUqIGN1cnJlbnQsIGludCBleHByU3RhcnQsIGludCBsaHMsIGludCByaHMsIGJvb2wgaGFzQXNz
aWdubWVudHMpCiAgICAgewogICAgICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwpAQCAtNjEwLDEz
ICs1OTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgU2NvcGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogICAgICAgICAgICAgOiBtX3ZhckRlY2xhcmF0aW9ucyhuZXcgKGdsb2JhbERhdGEpIFBh
cnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KQogICAgICAgICAgICAg
LCBtX2Z1bmNEZWNsYXJhdGlvbnMobmV3IChnbG9iYWxEYXRhKSBQYXJzZXJBcmVuYURhdGE8RGVj
bGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KQotICAgICAgICAgICAgLCBtX2ZlYXR1cmVz
KDApCiAgICAgICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiog
bV92YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKLSAgICAgICAgaW50IG1f
ZmVhdHVyZXM7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogCkBAIC02MjYs
MTUgKzYwNCw2IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7
IG1fc2NvcGUubV9udW1Db25zdGFudHMrKzsgfQotICAgIHZvaWQgdXNlc1RoaXMoKSB7IG1fc2Nv
cGUubV9mZWF0dXJlcyB8PSBUaGlzRmVhdHVyZTsgfQotICAgIHZvaWQgdXNlc0NhdGNoKCkgeyBt
X3Njb3BlLm1fZmVhdHVyZXMgfD0gQ2F0Y2hGZWF0dXJlOyB9Ci0gICAgdm9pZCB1c2VzQXJndW1l
bnRzKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQotICAgIHZv
aWQgdXNlc1dpdGgoKSB7IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBXaXRoRmVhdHVyZTsgfQotICAg
IHZvaWQgdXNlc0V2YWwoKSAKLSAgICB7Ci0gICAgICAgIG1fZXZhbENvdW50Kys7Ci0gICAgICAg
IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBFdmFsRmVhdHVyZTsKLSAgICB9CiAgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU51bWJlcihpbnQgbGluZU51bWJlciwgZG91YmxlIGQpCiAgICAgewogICAg
ICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUobGluZU51bWJlciwgZCk7
CkBAIC02NDcsNyArNjE2LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QXNzaWdubWVudEluZm8s
IDEwPiBtX2Fzc2lnbm1lbnRJbmZvU3RhY2s7CiAgICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+LCAx
MD4gbV9iaW5hcnlPcGVyYXRvclN0YWNrOwogICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiwgMTA+
IG1fdW5hcnlUb2tlblN0YWNrOwotICAgIGludCBtX2V2YWxDb3VudDsKIH07CiAKIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVHlwZU9mTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIpCkBAIC03OTcsMTAgKzc2NSw4IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5v
ZGUqCiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9k
ZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7Ci0gICAg
ICAgIGlmIChpZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCkg
ewotICAgICAgICAgICAgdXNlc0V2YWwoKTsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKQogICAgICAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsaW5lTnVtYmVyLCBhcmdzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwotICAgICAgICB9CiAgICAgICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobGluZU51bWJlciwg
aWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAg
ICB9CiAgICAgaWYgKGZ1bmMtPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVJbmZvLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVJbmZvLmgKaW5kZXggNDg1M2FlYzQyODk1YTQxMzVmNjVmNGZk
ZjA0MzlhNzA5MDZlOGQwNC4uZTBkNGZmZWM0ZjYxMGNiNWI5NGIyZTY5MDdjNmUzNTIxNTYxNTUz
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUluZm8uaApAQCAtMjYsNyArMjYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Tm9kZUluZm8gewogICAgICAgICBUIG1fbm9kZTsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVh
dHVyZXM7CisgICAgICAgIFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOwogICAgICAgICBpbnQgbV9u
dW1Db25zdGFudHM7CiAgICAgfTsKIApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVCBtX25vZGU7CiAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6VmFyU3RhY2s+KiBtX3ZhckRlY2xhcmF0aW9uczsKICAgICAgICAgUGFyc2VyQXJlbmFE
YXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogbV9mdW5jRGVjbGFyYXRpb25z
OwotICAgICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICAgICAgU2NvcGVGbGFncyBt
X3Njb3BlRmxhZ3M7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAppbmRleCA4MWQxZjUyNDk3ZmNlMzUx
YjkxY2EyYmZjZDJjMWMwZTNiNzBhODI1Li45ZmQ3Yjg0MmFkZDVhMDU1ZWUzMTY4YmJhYzdhM2Mz
NmUxODdjODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtNzUs
MTcgKzc1LDE4IEBAIFN0YXRlbWVudE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGF0ZW1l
bnQoKSBjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NvcGVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaW5TdHJpY3RDb250
ZXh0KQorU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQg
bGluZU51bWJlciwgU2NvcGVGbGFncyBzY29wZUZsYWdzKQogICAgIDogU3RhdGVtZW50Tm9kZShs
aW5lTnVtYmVyKQogICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCi0gICAg
LCBtX2ZlYXR1cmVzKGluU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogTm9GZWF0
dXJlcykKKyAgICAsIG1fc2NvcGVGbGFncyhzY29wZUZsYWdzKQorICAgICwgbV9udW1Db25zdGFu
dHMoMCkKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBpbnQgbGluZU51bWJlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgU2NvcGVGbGFn
cyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDogU3RhdGVtZW50Tm9kZShsaW5l
TnVtYmVyKQogICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCi0gICAgLCBt
X2ZlYXR1cmVzKGZlYXR1cmVzKQorICAgICwgbV9zY29wZUZsYWdzKHNjb3BlRmxhZ3MpCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAg
ICAgLCBtX3N0YXRlbWVudHMoY2hpbGRyZW4pCkBAIC0xMDUsMTQgKzEwNiwxNCBAQCBTdGF0ZW1l
bnROb2RlKiBTY29wZU5vZGU6OnNpbmdsZVN0YXRlbWVudCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1pbmxpbmUgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
U3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQm
IGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJl
cyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRh
LCBsaW5lTnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0
dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBQcm9ncmFtTm9k
ZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgU2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRz
KQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRy
ZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZsYWdzLCBu
dW1Db25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2Rl
OjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFz
c1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0
YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBj
YXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNj
b3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBu
b2RlID0gbmV3IFByb2dyYW1Ob2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2
YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dy
YW1Ob2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgc2NvcGVGbGFncywgbnVtQ29uc3RhbnRz
KTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2Rl
LT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTEyMywxNCArMTI0LDE0IEBAIFBhc3NSZWZQdHI8
UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBpbnQgbGluZU51CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgRXZhbE5vZGU6OkV2YWxO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNj
b3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFj
aywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykK
K2lubGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQg
bGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ss
IEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJs
ZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNv
dXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBz
Y29wZUZsYWdzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2
YWxOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQorUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0
YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBj
YXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNj
b3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2Rl
ID0gbmV3IEV2YWxOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFj
aywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFs
RGF0YSwgbGluZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVk
VmFyaWFibGVzLCBzb3VyY2UsIHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NF
UlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1v
dmVMYXN0KCk7CkBAIC0xNDcsMTMgKzE0OCwxMyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6OkZ1bmN0
aW9uUGFyYW1ldGVycyhQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlcikKICAgICAgICAgYXBw
ZW5kKHBhcmFtZXRlci0+aWRlbnQoKSk7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpG
dW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIs
IGJvb2wgaW5TdHJpY3RDb250ZXh0KQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVO
dW1iZXIsIGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlv
bkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNjb3Bl
RmxhZ3Mgc2NvcGVGbGFncykKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVy
LCBzY29wZUZsYWdzKQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25C
b2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQot
ICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZUNvZGUsIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51
bUNvbnN0YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElk
ZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29w
ZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0
YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZsYWdzLCBudW1Db25zdGFu
dHMpCiB7CiB9CiAKQEAgLTE3MCwxNCArMTcxLDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gcGFyYW1ldGVycywK
ICAgICBtX2lkZW50ID0gaWRlbnQ7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9k
eU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBi
b29sIGluU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6
OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTY29wZUZs
YWdzIHNjb3BlRmxhZ3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2Jh
bERhdGEsIGxpbmVOdW1iZXIsIGluU3RyaWN0Q29udGV4dCk7CisgICAgcmV0dXJuIG5ldyBGdW5j
dGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNjb3BlRmxhZ3MpOwogfQogCi1Q
YXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29k
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxG
dW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJT
dGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYg
Y2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFNjb3BlRmxh
Z3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1i
ZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9k
eU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVy
LCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJj
ZUNvZGUsIHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9h
cmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggYzA4MzViMWJmZjBiMmU5YTlhNDY3
MDMyZTVjZWRmNzM0MDBiZjQxZS4uZTFjYmQyNTZkODQyODVmYTczNTM2Y2Q1ZWU4Yzg2YmM3OWQy
NDRiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNDcsMTkgKzQ3LDMx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNz
IFNjb3BlTm9kZTsKIAotICAgIHR5cGVkZWYgdW5zaWduZWQgQ29kZUZlYXR1cmVzOwotCi0gICAg
Y29uc3QgQ29kZUZlYXR1cmVzIE5vRmVhdHVyZXMgPSAwOwotICAgIGNvbnN0IENvZGVGZWF0dXJl
cyBFdmFsRmVhdHVyZSA9IDEgPDwgMDsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQXJndW1lbnRz
RmVhdHVyZSA9IDEgPDwgMTsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgV2l0aEZlYXR1cmUgPSAx
IDw8IDI7Ci0gICAgY29uc3QgQ29kZUZlYXR1cmVzIENhdGNoRmVhdHVyZSA9IDEgPDwgMzsKLSAg
ICBjb25zdCBDb2RlRmVhdHVyZXMgVGhpc0ZlYXR1cmUgPSAxIDw8IDQ7Ci0gICAgY29uc3QgQ29k
ZUZlYXR1cmVzIFN0cmljdE1vZGVGZWF0dXJlID0gMSA8PCA1OwotICAgIGNvbnN0IENvZGVGZWF0
dXJlcyBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZSA9IDEgPDwgNjsKKyAgICB0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IFNjb3BlRmxhZ3M7CisKKyAgICBjb25zdCBTY29wZUZsYWdzIE5vU2NvcGVGbGFn
cyA9IDA7CisKKyAgICAvLyBTb21lIHNjb3BlIGZsYWdzIHByb3BhZ2F0ZSBkb3duIHRoZSBwYXJz
ZSB0cmVlIGZyb20gcGFyZW50IHNjb3BlcywgbGlrZQorICAgIC8vIHN0cmljdCBtb2RlLiBUaGV5
IGFyZSBtb2RhbCB0byBhbiBlbnRpcmUgc2V0IG9mIG5lc3RlZCBzY29wZXMuCisgICAgY29uc3Qg
U2NvcGVGbGFncyBTdHJpY3RNb2RlRmxhZyA9IDEgPDwgMDsKKyAgICBjb25zdCBTY29wZUZsYWdz
IEZ1bmN0aW9uTW9kZUZsYWcgPSAxIDw8IDE7CisgICAgY29uc3QgU2NvcGVGbGFncyBBbGxTY29w
ZU1vZGVGbGFncyA9IFN0cmljdE1vZGVGbGFnIHwgRnVuY3Rpb25Nb2RlRmxhZzsKKworICAgIC8v
IFNvbWUgc2NvcGUgZmxhZ3MgcmVmZXIgb25seSB0byBhIHNwZWNpZmljIHNjb3BlLCBhbmQgZG9u
J3QgcHJvcGFnYXRlIGRvd24KKyAgICAvLyBvciB1cC4KKyAgICBjb25zdCBTY29wZUZsYWdzIEJs
b2NrU2NvcGVGbGFnID0gMSA8PCA0OworICAgIGNvbnN0IFNjb3BlRmxhZ3MgQWxsU2NvcGVLaW5k
RmxhZ3MgPSBCbG9ja1Njb3BlRmxhZzsKKworICAgIC8vIE90aGVyIGZsYWdzIHJlZmxlY3QgdXNl
cyB3aXRoaW4gbmVzdGVkIHNjb3BlcywgYW5kIHNvIHByb3BhZ2F0ZSB1cAorICAgIC8vIGZyb20g
dGhlIGxlYXZlcy4KKyAgICBjb25zdCBTY29wZUZsYWdzIFVzZXNFdmFsRmxhZyA9IDEgPDwgODsK
KyAgICBjb25zdCBTY29wZUZsYWdzIFVzZXNBcmd1bWVudHNGbGFnID0gMSA8PCA5OworICAgIGNv
bnN0IFNjb3BlRmxhZ3MgVXNlc1dpdGhGbGFnID0gMSA8PCAxMDsKKyAgICBjb25zdCBTY29wZUZs
YWdzIFVzZXNDYXRjaEZsYWcgPSAxIDw8IDExOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc1Ro
aXNGbGFnID0gMSA8PCAxMjsKKyAgICBjb25zdCBTY29wZUZsYWdzIFNoYWRvd3NBcmd1bWVudHNG
bGFnID0gMSA8PCAxMzsKKyAgICBjb25zdCBTY29wZUZsYWdzIEFsbFNjb3BlVXNlc0ZsYWdzID0g
VXNlc0V2YWxGbGFnIHwgVXNlc0FyZ3VtZW50c0ZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0
Y2hGbGFnIHwgVXNlc1RoaXNGbGFnIHwgU2hhZG93c0FyZ3VtZW50c0ZsYWc7CiAgICAgCi0gICAg
Y29uc3QgQ29kZUZlYXR1cmVzIEFsbEZlYXR1cmVzID0gRXZhbEZlYXR1cmUgfCBBcmd1bWVudHNG
ZWF0dXJlIHwgV2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUgfCBUaGlzRmVhdHVyZSB8IFN0cmlj
dE1vZGVGZWF0dXJlIHwgU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7Ci0KICAgICBlbnVtIE9wZXJh
dG9yIHsKICAgICAgICAgT3BFcXVhbCwKICAgICAgICAgT3BQbHVzRXEsCkBAIC0xMzc0LDggKzEz
ODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNr
czo6VmFyU3RhY2sgVmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6
OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAotICAgICAgICBTY29wZU5vZGUoSlNHbG9i
YWxEYXRhKiwgaW50LCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShK
U0dsb2JhbERhdGEqLCBpbnQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBDb2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOworICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBT
Y29wZUZsYWdzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgY29uc3Qg
U291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAg
IHVzaW5nIFBhcnNlckFyZW5hUmVmQ291bnRlZDo6b3BlcmF0b3IgbmV3OwogCkBAIC0xMzg4LDI0
ICsxNDAwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlh
Ymxlcy5jbGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYg
c291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7IH0K
LSAgICAgICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92
aWRlcigpLT5hc0lEKCk7IH0KLQotICAgICAgICB2b2lkIHNldEZlYXR1cmVzKENvZGVGZWF0dXJl
cyBmZWF0dXJlcykgeyBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7IH0KLSAgICAgICAgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzKCkgeyByZXR1cm4gbV9mZWF0dXJlczsgfQotCi0gICAgICAgIGJvb2wgdXNl
c0V2YWwoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KLSAgICAg
ICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gKG1fZmVhdHVyZXMgJiBBcmd1
bWVudHNGZWF0dXJlKSAmJiAhKG1fZmVhdHVyZXMgJiBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZSk7
IH0KLSAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
ICYgU3RyaWN0TW9kZUZlYXR1cmU7IH0KLSAgICAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKCkg
eyBtX2ZlYXR1cmVzIHw9IEFyZ3VtZW50c0ZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzVGhp
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBUaGlzRmVhdHVyZTsgfQotICAgICAgICBi
b29sIG5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsg
fQotICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChoYXNDYXB0
dXJlZFZhcmlhYmxlcygpKSB8fCAobV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0
dXJlIHwgQ2F0Y2hGZWF0dXJlKSk7IH0KICAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxl
cygpIGNvbnN0IHsgcmV0dXJuICEhbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAg
ICAgc2l6ZV90IGNhcHR1cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVy
ZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQu
aW1wbCgpKTsgfQogCisgICAgICAgIHZvaWQgc2V0U2NvcGVGbGFncyhTY29wZUZsYWdzIHNjb3Bl
RmxhZ3MpIHsgbV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KKyAgICAgICAgU2NvcGVGbGFn
cyBzY29wZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzOyB9CisKKyAgICAgICAg
Ym9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RN
b2RlRmxhZzsgfQorICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9zY29w
ZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CisgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIChtX3Njb3BlRmxhZ3MgJiBVc2VzQXJndW1lbnRzRmxhZykgJiYgIShtX3Nj
b3BlRmxhZ3MgJiBTaGFkb3dzQXJndW1lbnRzRmxhZyk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2Vz
QXJndW1lbnRzKCkgeyBtX3Njb3BlRmxhZ3MgfD0gVXNlc0FyZ3VtZW50c0ZsYWc7IH0KKyAgICAg
ICAgYm9vbCB1c2VzVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNUaGlz
RmxhZzsgfQorCisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dp
dGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24o
KSBjb25zdCB7IHJldHVybiBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IG5lZWRzQWN0aXZhdGlv
bkZvck1vcmVUaGFuVmFyaWFibGVzKCk7IH0KKworICAgICAgICBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgICAgICBjb25zdCBVU3RyaW5n
JiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT51cmwoKTsg
fQorICAgICAgICBpbnRwdHJfdCBzb3VyY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnBy
b3ZpZGVyKCktPmFzSUQoKTsgfQorCiAgICAgICAgIFZhclN0YWNrJiB2YXJTdGFjaygpIHsgcmV0
dXJuIG1fdmFyU3RhY2s7IH0KICAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25TdGFjazsgfQogCkBAIC0xNDI1LDcgKzE0MzksNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1f
c2NvcGVGbGFnczsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgVmFyU3Rh
Y2sgbV92YXJTdGFjazsKICAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uU3RhY2s7CkBA
IC0xNDM3LDEyICsxNDUxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1O
b2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQcm9ncmFtTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMq
LCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNl
Q29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRl
OgotICAgICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRz
KiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBQcm9ncmFt
Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5j
dGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBTY29wZUZsYWdz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAgICAgfTsKQEAg
LTE0NTAsMTIgKzE0NjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbE5vZGUg
OiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2
YWxOb2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0
YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwg
Q29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwg
VmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEV2YWxOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEV2YWxOb2RlKEpTR2xvYmFsRGF0
YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFu
dHMpOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAtMTQ3Miw4ICsxNDg2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSA6IHB1YmxpYyBT
Y29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5j
dGlvbk5vZGUgPSB0cnVlOwotICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRl
KEpTR2xvYmFsRGF0YSosIGludCwgYm9vbCBpc1N0cmljdE1vZGUpOwotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQs
IFNjb3BlRmxhZ3MpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgU2NvcGVG
bGFncywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAgICAgICAg
IHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6
ZSgpOyB9CkBAIC0xNDkwLDggKzE1MDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gdHJ1ZTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBib29sIGluU3RyaWN0
Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAg
ICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNjb3BlRmxhZ3MpOwor
ICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVu
dHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291
cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIElkZW50
aWZpZXIgbV9pZGVudDsKICAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA0ODU2YTAwYTc0YWNkZTZhMjE2
OWUyZmRlNWQ4ZmNhNTZmZTRlNjZjLi5mNTg4NDdmZDI0Njc4ZjJmMjUyYzM1MWI1ZDhkM2JlOWU1
MzVhYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC02Miwx
MSArNjIsMTIgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnUKICAgICBtX2xleGVyLT5zZXRDb2Rl
KHNvdXJjZSwgbV9hcmVuYSk7CiAKICAgICBtX2Z1bmN0aW9uQ2FjaGUgPSBzb3VyY2UucHJvdmlk
ZXIoKS0+Y2FjaGUoKTsKLSAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwotICAgIGlm
IChwYXJzZXJNb2RlID09IEpTUGFyc2VGdW5jdGlvbkNvZGUpCi0gICAgICAgIHNjb3BlLT5zZXRJ
c0Z1bmN0aW9uKCk7CisgICAgU2NvcGVGbGFncyBzY29wZUZsYWdzID0gTm9TY29wZUZsYWdzOwog
ICAgIGlmIChzdHJpY3RuZXNzID09IEpTUGFyc2VTdHJpY3QpCi0gICAgICAgIHNjb3BlLT5zZXRT
dHJpY3RNb2RlKCk7CisgICAgICAgIHNjb3BlRmxhZ3MgfD0gU3RyaWN0TW9kZUZsYWc7CisgICAg
aWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKKyAgICAgICAgc2NvcGVGbGFn
cyB8PSBGdW5jdGlvbk1vZGVGbGFnOworICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKHNj
b3BlRmxhZ3MpOwogICAgIGlmIChwYXJhbWV0ZXJzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNjb3BlLT5k
ZWNsYXJlUGFyYW1ldGVyKCZwYXJhbWV0ZXJzLT5hdChpKSk7CkBAIC05NiwxNiArOTcsMTIgQEAg
VVN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcigpCiAKICAgICBJZGVudGlmaWVy
U2V0IGNhcHR1cmVkVmFyaWFibGVzOwogICAgIHNjb3BlLT5nZXRDYXB0dXJlZFZhcmlhYmxlcyhj
YXB0dXJlZFZhcmlhYmxlcyk7Ci0gICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzID0gY29udGV4dC5m
ZWF0dXJlcygpOwotICAgIGlmIChzY29wZS0+c3RyaWN0TW9kZSgpKQotICAgICAgICBmZWF0dXJl
cyB8PSBTdHJpY3RNb2RlRmVhdHVyZTsKLSAgICBpZiAoc2NvcGUtPnNoYWRvd3NBcmd1bWVudHMo
KSkKLSAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7CisgICAgU2Nv
cGVGbGFncyBzY29wZUZsYWdzID0gc2NvcGUtPm1vZGVGbGFncygpIHwgc2NvcGUtPnVzZXNGbGFn
cygpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uQ2FjaGVTaXplID0gbV9mdW5jdGlvbkNhY2hlID8g
bV9mdW5jdGlvbkNhY2hlLT5ieXRlU2l6ZSgpIDogMDsKICAgICBpZiAoZnVuY3Rpb25DYWNoZVNp
emUgIT0gb2xkRnVuY3Rpb25DYWNoZVNpemUpCiAgICAgICAgIG1fbGV4ZXItPnNvdXJjZVByb3Zp
ZGVyKCktPm5vdGlmeUNhY2hlU2l6ZUNoYW5nZWQoZnVuY3Rpb25DYWNoZVNpemUgLSBvbGRGdW5j
dGlvbkNhY2hlU2l6ZSk7CiAKLSAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBj
b250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVh
dHVyZXMsCisgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJE
ZWNsYXJhdGlvbnMoKSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIHNjb3BlRmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBj
YXB0dXJlZFZhcmlhYmxlcyk7CiAKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKQEAgLTExMywxMyAr
MTEwLDEzIEBAIFVTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmlu
aXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMsIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiB2YXJTdGFjaywgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2s+KiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5l
LCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6
OkZ1bmN0aW9uU3RhY2s+KiBmdW5jU3RhY2ssIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncywgaW50IGxh
c3RMaW5lLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCiB7
CiAgICAgbV9zb3VyY2VFbGVtZW50cyA9IHNvdXJjZUVsZW1lbnRzOwogICAgIG1fdmFyRGVjbGFy
YXRpb25zID0gdmFyU3RhY2s7CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gZnVuY1N0YWNrOwog
ICAgIG1fY2FwdHVyZWRWYXJpYWJsZXMuc3dhcChjYXB0dXJlZFZhcnMpOwotICAgIG1fZmVhdHVy
ZXMgPSBmZWF0dXJlczsKKyAgICBtX3Njb3BlRmxhZ3MgPSBzY29wZUZsYWdzOwogICAgIG1fbGFz
dExpbmUgPSBsYXN0TGluZTsKICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0K
QEAgLTE0Nyw3ICsxNDQsNyBAQCB0ZW1wbGF0ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPAogICAgICAgICAgICAg
aWYgKGRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0IiBtdXN0IGJl
IHRoZSBleGFjdCBsaXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNlcXVlbmNlcyBvciBsaW5lIGNvbnRp
bnVhdGlvbi4KICAgICAgICAgICAgICAgICBpZiAoIWhhc1NldFN0cmljdCAmJiBkaXJlY3RpdmVM
aXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgewotICAg
ICAgICAgICAgICAgICAgICBzZXRTdHJpY3RNb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZSgpLT5zZXRGbGFncyhTdHJpY3RNb2RlRmxhZyk7CiAgICAgICAgICAgICAgICAg
ICAgIGhhc1NldFN0cmljdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGlzVmFsaWRTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2xleGVyLT5zZXRP
ZmZzZXQoc3RhcnRPZmZzZXQpOwpAQCAtMjU1LDYgKzI1Miw4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVj
bGFyYXRpCiAgICAgICAgIG5leHQoKTsKICAgICAgICAgYm9vbCBoYXNJbml0aWFsaXplciA9IG1h
dGNoKEVRVUFMKTsKICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2Fn
ZShkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVk
IiwgbmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7CisgICAgICAgIGlmIChtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSkKKyAgICAgICAgICAgIGN1
cnJlbnRTY29wZSgpLT5zZXRGbGFncyhVc2VzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIGNvbnRl
eHQuYWRkVmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0Y2go
SU5UT0tFTikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwogICAg
ICAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgIGludCB2YXJEaXZvdCA9IHRv
a2VuU3RhcnQoKSArIDE7CkBAIC0yODksNiArMjg4LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlQ29uc3REZWNsTGlzdCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDb25zdERl
Y2wKICAgICAgICAgbmV4dCgpOwogICAgICAgICBib29sIGhhc0luaXRpYWxpemVyID0gbWF0Y2go
RVFVQUwpOwogICAgICAgICBkZWNsYXJlVmFyaWFibGUobmFtZSk7CisgICAgICAgIGlmIChtX2ds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSkKKyAgICAgICAgICAg
IGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhVc2VzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIGNv
bnRleHQuYWRkVmFyKG5hbWUsIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50IHwgKGhhc0lu
aXRpYWxpemVyID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyIDogMCkpOwogICAg
ICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IDA7CiAgICAgICAgIGlmIChoYXNJbml0
aWFsaXplcikgewpAQCAtNTExLDcgKzUxMiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VXaXRoU3RhdGVtZW50CiB7
CiAgICAgQVNTRVJUKG1hdGNoKFdJVEgpKTsKICAgICBmYWlsSWZUcnVlV2l0aE1lc3NhZ2Uoc3Ry
aWN0TW9kZSgpLCAiJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9k
ZSIpOwotICAgIGN1cnJlbnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7CisgICAg
Y3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNXaXRoRmxhZyk7CiAgICAgaW50IHN0YXJ0TGlu
ZSA9IHRva2VuTGluZSgpOwogICAgIG5leHQoKTsKICAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJF
Tik7CkBAIC01MjYsNiArNTI3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVdpdGhTdGF0ZW1lbnQKICAgICBUcmVl
U3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CiAg
ICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAKKyAgICBjdXJyZW50U2NvcGUoKS0+c2V0
RmxhZ3MoVXNlc1dpdGhGbGFnKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVt
ZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXRlbWVudCwgc3RhcnQsIGVu
ZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIApAQCAtNjE0LDE1ICs2MTYsMTUgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVRyeVN0YXRlbWVudCgKICAgICBpbnQgbGFzdExpbmUgPSBtX2xhc3RMaW5lOwogICAgIAog
ICAgIGlmIChtYXRjaChDQVRDSCkpIHsKLSAgICAgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRz
RnVsbEFjdGl2YXRpb24oKTsKKyAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXND
YXRjaEZsYWcpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoT1BFTlBB
UkVOKTsKICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAgICAgICBpZGVudCA9IG1fdG9r
ZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIEF1dG9Qb3BTY29wZVJl
ZiBjYXRjaFNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKKyAgICAgICAgQXV0b1BvcFNjb3BlUmVm
IGNhdGNoU2NvcGUodGhpcywgcHVzaFNjb3BlKGN1cnJlbnRTY29wZSgpLT5tb2RlRmxhZ3MoKSkp
OwogICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVW
YXJpYWJsZShpZGVudCksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgaWRlbnQt
PmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIGNhdGNoU2NvcGUtPnByZXZlbnRO
ZXdEZWNscygpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoQmxvY2tTY29wZUZs
YWcgfCBVc2VzQ2F0Y2hGbGFnKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsK
ICAgICAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFKTsKICAgICAgICAgY2F0Y2hCbG9jayA9IHBh
cnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7CkBAIC03NTksNyArNzYxLDcgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1
bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCiB7CiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQotICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwg
c3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5
KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGN1cnJlbnRTY29wZSgpLT5tb2RlRmxhZ3MoKSk7
CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKICAg
ICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rp
b25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xv
YmFsRGF0YSksIG1fbGV4ZXIuZ2V0KCkpOwpAQCAtNzcwLDggKzc3Miw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkJvCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPEZ1
bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdT
Y29wZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVu
Y3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgbmFtZSwg
VHJlZUZvcm1hbFBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsIFRyZWVGdW5jdGlvbkJvZHkmIGJv
ZHksIGludCYgb3BlbkJyYWNlUG9zLCBpbnQmIGNsb3NlQnJhY2VQb3MsIGludCYgYm9keVN0YXJ0
TGluZSkKIHsKLSAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBwdXNoU2Nv
cGUoKSk7Ci0gICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigpOworICAgIEF1dG9Qb3BT
Y29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZShjdXJyZW50U2NvcGUoKS0+bW9k
ZUZsYWdzKCkgfCBGdW5jdGlvbk1vZGVGbGFnKSk7CiAgICAgaWYgKG1hdGNoKElERU5UKSkgewog
ICAgICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIG5leHQoKTsKQEAg
LTc5Myw4ICs3OTQsOCBAQCB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1l
bnRzLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBjbGFzcwogICAgIC8vIElmIHdlIGtu
b3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5LCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgaW5m
byBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgogICAgIGlm
IChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVy
OjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VQ
b3MpIDogMCkgewogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBhIHN0cmljdCBjb250ZXh0LCB0aGUg
Y2FjaGVkIGZ1bmN0aW9uIGluZm8gbXVzdCBzYXkgaXQgd2FzIHN0cmljdCB0b28uCi0gICAgICAg
IEFTU0VSVCghc3RyaWN0TW9kZSgpIHx8IGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOwotICAgICAg
ICBib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1i
ZXIoKSwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CisgICAgICAgIEFTU0VSVCghc3RyaWN0TW9k
ZSgpIHx8IChjYWNoZWRJbmZvLT5zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWcpKTsKKyAgICAg
ICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIGNhY2hlZEluZm8tPnNjb3BlRmxhZ3MpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rp
b25TY29wZS0+cmVzdG9yZUZ1bmN0aW9uSW5mbyhjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElm
RmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlh
YmxlSW5mbykpOwpAQCAtODU0LDYgKzg1NSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRlY2xhCiAg
ICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTmVlZHNOYW1lLCB0cnVl
Pihjb250ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJh
Y2VQb3MsIGJvZHlTdGFydExpbmUpKSk7CiAgICAgZmFpbElmRmFsc2UobmFtZSk7CiAgICAgZmFp
bElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSkpOworICAgIGlmICgqbmFtZSA9
PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKKyAgICAgICAgY3VycmVu
dFNjb3BlKCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsKICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBuYW1l
LCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFy
dExpbmUsIG1fbGFzdExpbmUpOwogfQogCkBAIC0xNDAxLDEzICsxNDA0LDE4IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlUHJpbWFyeUV4cHJlCiAgICAgfQogICAgIGNhc2UgVEhJU1RPS0VOOiB7CiAgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNUaGlzRmxhZyk7CiAg
ICAgICAgIHJldHVybiBjb250ZXh0LnRoaXNFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCkp
OwogICAgIH0KICAgICBjYXNlIElERU5UOiB7CiAgICAgICAgIGludCBzdGFydCA9IHRva2VuU3Rh
cnQoKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5p
ZGVudDsKICAgICAgICAgbmV4dCgpOwotICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFi
bGUoaWRlbnQsIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwor
ICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCkK
KyAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhVc2VzRXZhbEZsYWcpOworICAg
ICAgICBlbHNlIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
aWRlbnQpCisgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc0FyZ3VtZW50
c0ZsYWcpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQpOwogICAg
ICAgICBtX2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZVJlc29sdmUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA5Yjc2MjQyZDRkOTMy
Y2FkYWJmZmMyMTEzZDRiOThlZDM2OTFmN2E5Li43NTEzZDFmMTFmZDQ4OTU4MjhhZjhjYWViZTgw
YWRhMTViNWY1N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEz
MCwzMCArMTMwLDE5IEBAIHN0cnVjdCBTY29wZUxhYmVsSW5mbyB7CiB9OwogCiBzdHJ1Y3QgU2Nv
cGUgewotICAgIFNjb3BlKGNvbnN0IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0Z1
bmN0aW9uLCBib29sIHN0cmljdE1vZGUpCisgICAgU2NvcGUoY29uc3QgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3MpCiAgICAgICAgIDogbV9nbG9iYWxEYXRh
KGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQotICAgICAg
ICAsIG1fdXNlc0V2YWwoZmFsc2UpCi0gICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZh
bHNlKQotICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHModHJ1ZSkKLSAgICAgICAgLCBtX3N0cmlj
dE1vZGUoc3RyaWN0TW9kZSkKLSAgICAgICAgLCBtX2lzRnVuY3Rpb24oaXNGdW5jdGlvbikKLSAg
ICAgICAgLCBtX2lzRnVuY3Rpb25Cb3VuZGFyeShmYWxzZSkKKyAgICAgICAgLCBtX3Njb3BlRmxh
Z3Moc2NvcGVGbGFncykKICAgICAgICAgLCBtX2lzVmFsaWRTdHJpY3RNb2RlKHRydWUpCiAgICAg
ICAgICwgbV9sb29wRGVwdGgoMCkKICAgICAgICAgLCBtX3N3aXRjaERlcHRoKDApCiAgICAgewor
ICAgICAgICBBU1NFUlQoIShzY29wZUZsYWdzICYgfkFsbFNjb3BlTW9kZUZsYWdzKSk7CiAgICAg
fQogCiAgICAgU2NvcGUoY29uc3QgU2NvcGUmIHJocykKICAgICAgICAgOiBtX2dsb2JhbERhdGEo
cmhzLm1fZ2xvYmFsRGF0YSkKLSAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hh
ZG93c0FyZ3VtZW50cykKLSAgICAgICAgLCBtX3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQotICAg
ICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQot
ICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHMocmhzLm1fYWxsb3dzTmV3RGVjbHMpCi0gICAgICAg
ICwgbV9zdHJpY3RNb2RlKHJocy5tX3N0cmljdE1vZGUpCi0gICAgICAgICwgbV9pc0Z1bmN0aW9u
KHJocy5tX2lzRnVuY3Rpb24pCi0gICAgICAgICwgbV9pc0Z1bmN0aW9uQm91bmRhcnkocmhzLm1f
aXNGdW5jdGlvbkJvdW5kYXJ5KQorICAgICAgICAsIG1fc2NvcGVGbGFncyhyaHMubV9zY29wZUZs
YWdzKQogICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUocmhzLm1faXNWYWxpZFN0cmljdE1v
ZGUpCiAgICAgICAgICwgbV9sb29wRGVwdGgocmhzLm1fbG9vcERlcHRoKQogICAgICAgICAsIG1f
c3dpdGNoRGVwdGgocmhzLm1fc3dpdGNoRGVwdGgpCkBAIC0xNjgsNiArMTU3LDIyIEBAIHN0cnVj
dCBTY29wZSB7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIFNjb3BlRmxh
Z3Mgc2NvcGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFnczsgfQorICAgIEFMV0FZ
U19JTkxJTkUgU2NvcGVGbGFncyBtb2RlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxh
Z3MgJiBBbGxTY29wZU1vZGVGbGFnczsgfQorICAgIEFMV0FZU19JTkxJTkUgU2NvcGVGbGFncyB1
c2VzRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxTY29wZVVzZXNGbGFn
czsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxh
Z3MpIHsgbV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KKworICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYg
KFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgQUxX
QVlTX0lOTElORSBib29sIHN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3Mg
JiBTdHJpY3RNb2RlRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaGFkb3dzQXJndW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU2hhZG93c0FyZ3VtZW50c0ZsYWc7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2NvcGVGbGFncyAmIEZ1bmN0aW9uTW9kZUZsYWc7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNCbG9ja1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgQmxvY2tTY29wZUZs
YWc7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvbkJvdW5kYXJ5KCkgY29uc3Qg
eyByZXR1cm4gaXNGdW5jdGlvbigpICYmICFpc0Jsb2NrU2NvcGUoKTsgfQorCisgICAgQUxXQVlT
X0lOTElORSBib29sIGFsbG93c05ld0RlY2xzKCkgY29uc3QgeyByZXR1cm4gIWlzQmxvY2tTY29w
ZSgpOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2lzVmFsaWRTdHJpY3RNb2RlOyB9CisKICAgICB2b2lkIHN0YXJ0U3dpdGNo
KCkgeyBtX3N3aXRjaERlcHRoKys7IH0KICAgICB2b2lkIGVuZFN3aXRjaCgpIHsgbV9zd2l0Y2hE
ZXB0aC0tOyB9CiAgICAgdm9pZCBzdGFydExvb3AoKSB7IG1fbG9vcERlcHRoKys7IH0KQEAgLTIw
MSwxNCArMjA2LDYgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRJc0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1faXNGdW5jdGlvbiA9
IHRydWU7Ci0gICAgICAgIG1faXNGdW5jdGlvbkJvdW5kYXJ5ID0gdHJ1ZTsKLSAgICB9Ci0gICAg
Ym9vbCBpc0Z1bmN0aW9uKCkgeyByZXR1cm4gbV9pc0Z1bmN0aW9uOyB9Ci0gICAgYm9vbCBpc0Z1
bmN0aW9uQm91bmRhcnkoKSB7IHJldHVybiBtX2lzRnVuY3Rpb25Cb3VuZGFyeTsgfQotCiAgICAg
Ym9vbCBkZWNsYXJlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewogICAg
ICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5ldmFsICE9ICppZGVudCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50
cyAhPSAqaWRlbnQ7CkBAIC0yMTksMzUgKzIxNiwyOCBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAg
dm9pZCBkZWNsYXJlV3JpdGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9zdHJpY3RNb2RlKTsKKyAgICAgICAgQVNTRVJUKHN0cmljdE1vZGUoKSk7CiAg
ICAgICAgIG1fd3JpdHRlblZhcmlhYmxlcy5hZGQoaWRlbnQtPmltcGwoKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBwcmV2ZW50TmV3RGVjbHMoKSB7IG1fYWxsb3dzTmV3RGVjbHMgPSBmYWxzZTsgfQot
ICAgIGJvb2wgYWxsb3dzTmV3RGVjbHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c05ld0RlY2xz
OyB9Ci0KICAgICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQp
CiAgICAgewogICAgICAgICBib29sIGlzQXJndW1lbnRzID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0
eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50OwogICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RN
b2RlID0gbV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnVzdHJpbmcoKS5pbXBsKCkpLnNl
Y29uZCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmICFp
c0FyZ3VtZW50czsKICAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmlj
dE1vZGUgJiYgaXNWYWxpZFN0cmljdE1vZGU7CiAgICAgICAgIGlmIChpc0FyZ3VtZW50cykKLSAg
ICAgICAgICAgIG1fc2hhZG93c0FyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBzZXRGbGFn
cyhTaGFkb3dzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0TW9k
ZTsKICAgICB9CiAKLSAgICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50
LCBib29sIGlzRXZhbCkKKyAgICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50KQogICAgIHsKLSAgICAgICAgbV91c2VzRXZhbCB8PSBpc0V2YWw7CiAgICAgICAgIG1fdXNl
ZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnVzdHJpbmcoKS5pbXBsKCkpOwogICAgIH0KIAotICAgIHZv
aWQgc2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpIHsgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gdHJ1
ZTsgfQotCiAgICAgYm9vbCBjb2xsZWN0RnJlZVZhcmlhYmxlcyhTY29wZSogbmVzdGVkU2NvcGUs
IGJvb2wgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpCiAgICAgewotICAgICAgICBpZiAobmVz
dGVkU2NvcGUtPm1fdXNlc0V2YWwpCi0gICAgICAgICAgICBtX3VzZXNFdmFsID0gdHJ1ZTsKKyAg
ICAgICAgc2V0RmxhZ3MobmVzdGVkU2NvcGUtPnVzZXNGbGFncygpKTsKICAgICAgICAgSWRlbnRp
ZmllclNldDo6aXRlcmF0b3IgZW5kID0gbmVzdGVkU2NvcGUtPm1fdXNlZFZhcmlhYmxlcy5lbmQo
KTsKICAgICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBwdHIgPSBuZXN0ZWRTY29w
ZS0+bV91c2VkVmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CiAgICAgICAg
ICAgICBpZiAobmVzdGVkU2NvcGUtPm1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKnB0cikp
CkBAIC0yNzksNyArMjY5LDcgQEAgc3RydWN0IFNjb3BlIHsKIAogICAgIHZvaWQgZ2V0Q2FwdHVy
ZWRWYXJpYWJsZXMoSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMpCiAgICAgewotICAg
ICAgICBpZiAobV9uZWVkc0Z1bGxBY3RpdmF0aW9uIHx8IG1fdXNlc0V2YWwpIHsKKyAgICAgICAg
aWYgKG5lZWRzRnVsbEFjdGl2YXRpb24oKSkgewogICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJs
ZXMuc3dhcChtX2RlY2xhcmVkVmFyaWFibGVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjg5LDExICsyNzksNiBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICAgICAgY2Fw
dHVyZWRWYXJpYWJsZXMuYWRkKCpwdHIpOwogICAgICAgICB9CiAgICAgfQotICAgIHZvaWQgc2V0
U3RyaWN0TW9kZSgpIHsgbV9zdHJpY3RNb2RlID0gdHJ1ZTsgfQotICAgIGJvb2wgc3RyaWN0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0TW9kZTsgfQotICAgIGJvb2wgaXNWYWxpZFN0cmlj
dE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWRTdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCBz
aGFkb3dzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzQXJndW1lbnRzOyB9Ci0K
ICAgICB2b2lkIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKGNvbnN0IElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4mIHZlY3Rv
cikKICAgICB7CiAgICAgICAgIElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IGNhcHR1cmVk
VmFyaWFibGVzLmVuZCgpOwpAQCAtMzA3LDIwICsyOTIsMTYgQEAgc3RydWN0IFNjb3BlIHsKIAog
ICAgIHZvaWQgc2F2ZUZ1bmN0aW9uSW5mbyhTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogaW5mbykK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOwotICAgICAgICBpbmZvLT51c2Vz
RXZhbCA9IG1fdXNlc0V2YWw7Ci0gICAgICAgIGluZm8tPnN0cmljdE1vZGUgPSBtX3N0cmljdE1v
ZGU7Ci0gICAgICAgIGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb24gPSBtX25lZWRzRnVsbEFjdGl2
YXRpb247CisgICAgICAgIEFTU0VSVChpc0Z1bmN0aW9uKCkpOworICAgICAgICBpbmZvLT5zY29w
ZUZsYWdzID0gbV9zY29wZUZsYWdzOwogICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1Zl
Y3RvcihtX3dyaXR0ZW5WYXJpYWJsZXMsIGluZm8tPndyaXR0ZW5WYXJpYWJsZXMpOwogICAgICAg
ICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVz
ZWRWYXJpYWJsZXMpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZUZ1bmN0aW9uSW5mbyhjb25z
dCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogaW5mbykKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2lzRnVuY3Rpb24pOwotICAgICAgICBtX3VzZXNFdmFsID0gaW5mby0+dXNlc0V2YWw7Ci0gICAg
ICAgIG1fc3RyaWN0TW9kZSA9IGluZm8tPnN0cmljdE1vZGU7Ci0gICAgICAgIG1fbmVlZHNGdWxs
QWN0aXZhdGlvbiA9IGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb247CisgICAgICAgIEFTU0VSVChp
c0Z1bmN0aW9uKCkpOworICAgICAgICBtX3Njb3BlRmxhZ3MgfD0gaW5mby0+c2NvcGVGbGFnczsK
ICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGluZm8tPnVzZWRWYXJpYWJsZXMuc2l6ZSgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAgbV91
c2VkVmFyaWFibGVzLmFkZChpbmZvLT51c2VkVmFyaWFibGVzW2ldKTsKQEAgLTMzMSwxMyArMzEy
LDcgQEAgc3RydWN0IFNjb3BlIHsKIAogcHJpdmF0ZToKICAgICBjb25zdCBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKLSAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7Ci0gICAgYm9v
bCBtX3VzZXNFdmFsIDogMTsKLSAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbiA6IDE7Ci0g
ICAgYm9vbCBtX2FsbG93c05ld0RlY2xzIDogMTsKLSAgICBib29sIG1fc3RyaWN0TW9kZSA6IDE7
Ci0gICAgYm9vbCBtX2lzRnVuY3Rpb24gOiAxOwotICAgIGJvb2wgbV9pc0Z1bmN0aW9uQm91bmRh
cnkgOiAxOworICAgIFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOwogICAgIGJvb2wgbV9pc1ZhbGlk
U3RyaWN0TW9kZSA6IDE7CiAgICAgaW50IG1fbG9vcERlcHRoOwogICAgIGludCBtX3N3aXRjaERl
cHRoOwpAQCAtNDI3LDIwICs0MDIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgUGFyc2VyKiBtX3Bh
cnNlcjsKICAgICB9OwogCi0gICAgU2NvcGVSZWYgY3VycmVudFNjb3BlKCkKKyAgICBBTFdBWVNf
SU5MSU5FIFNjb3BlUmVmIGN1cnJlbnRTY29wZSgpCiAgICAgewogICAgICAgICByZXR1cm4gU2Nv
cGVSZWYoJm1fc2NvcGVTdGFjaywgbV9zY29wZVN0YWNrLnNpemUoKSAtIDEpOwogICAgIH0KICAg
ICAKLSAgICBTY29wZVJlZiBwdXNoU2NvcGUoKQorICAgIFNjb3BlUmVmIHB1c2hTY29wZShTY29w
ZUZsYWdzIHNjb3BlRmxhZ3MpCiAgICAgewotICAgICAgICBib29sIGlzRnVuY3Rpb24gPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBpc1N0cmljdCA9IGZhbHNlOwotICAgICAgICBpZiAoIW1fc2NvcGVT
dGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlzU3RyaWN0ID0gbV9zY29wZVN0YWNrLmxh
c3QoKS5zdHJpY3RNb2RlKCk7Ci0gICAgICAgICAgICBpc0Z1bmN0aW9uID0gbV9zY29wZVN0YWNr
Lmxhc3QoKS5pc0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zY29wZVN0YWNrLmFw
cGVuZChTY29wZShtX2dsb2JhbERhdGEsIGlzRnVuY3Rpb24sIGlzU3RyaWN0KSk7CisgICAgICAg
IG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGUobV9nbG9iYWxEYXRhLCBzY29wZUZsYWdzKSk7CiAg
ICAgICAgIHJldHVybiBjdXJyZW50U2NvcGUoKTsKICAgICB9CiAgICAgCkBAIC00OTIsNyArNDYx
LDcgQEAgcHJpdmF0ZToKICAgICBVU3RyaW5nIHBhcnNlSW5uZXIoKTsKIAogICAgIHZvaWQgZGlk
RmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2s+KiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFy
ZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBTY29wZUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQsIGludCwgSWRlbnRpZmllclNldCYpOwogCiAgICAgLy8gVXNlZCB0byBkZXRlcm1p
bmUgdHlwZSBvZiBlcnJvciB0byByZXBvcnQuCkBAIC04MjMsMTQgKzc5MiwxMyBAQCBwcml2YXRl
OgogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IFVTdHJpbmcobXNnKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBzdGFydExvb3AoKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydExvb3AoKTsgfQotICAg
IHZvaWQgZW5kTG9vcCgpIHsgY3VycmVudFNjb3BlKCktPmVuZExvb3AoKTsgfQotICAgIHZvaWQg
c3RhcnRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydFN3aXRjaCgpOyB9Ci0gICAgdm9p
ZCBlbmRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRTd2l0Y2goKTsgfQotICAgIHZvaWQg
c2V0U3RyaWN0TW9kZSgpIHsgY3VycmVudFNjb3BlKCktPnNldFN0cmljdE1vZGUoKTsgfQotICAg
IGJvb2wgc3RyaWN0TW9kZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5zdHJpY3RNb2RlKCk7
IH0KLSAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCkt
PmlzVmFsaWRTdHJpY3RNb2RlKCk7IH0KLSAgICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3Qg
SWRlbnRpZmllciogaWRlbnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlUGFyYW1l
dGVyKGlkZW50KTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzdGFydExvb3AoKSB7IGN1cnJl
bnRTY29wZSgpLT5zdGFydExvb3AoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBlbmRMb29w
KCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHN0YXJ0U3dpdGNoKCkgeyBjdXJyZW50U2NvcGUoKS0+c3RhcnRTd2l0Y2goKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBlbmRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRTd2l0Y2go
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVu
dFNjb3BlKCktPnN0cmljdE1vZGUoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlk
U3RyaWN0TW9kZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5pc1ZhbGlkU3RyaWN0TW9kZSgp
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRp
ZmllciogaWRlbnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlUGFyYW1ldGVyKGlk
ZW50KTsgfQogICAgIGJvb2wgYnJlYWtJc1ZhbGlkKCkKICAgICB7CiAgICAgICAgIFNjb3BlUmVm
IGN1cnJlbnQgPSBjdXJyZW50U2NvcGUoKTsKQEAgLTk0OSw3ICs5MTcsNyBAQCBwcml2YXRlOgog
ICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiBtX3ZhckRl
Y2xhcmF0aW9uczsKICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2s+KiBtX2Z1bmNEZWNsYXJhdGlvbnM7CiAgICAgSWRlbnRpZmllclNldCBtX2NhcHR1
cmVkVmFyaWFibGVzOwotICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIFNjb3BlRmxh
Z3MgbV9zY29wZUZsYWdzOwogICAgIGludCBtX251bUNvbnN0YW50czsKICAgICAKICAgICBzdHJ1
Y3QgRGVwdGhNYW5hZ2VyIHsKQEAgLTEwMTAsNyArOTc4LDcgQEAgUGFzc1JlZlB0cjxQYXJzZWRO
b2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0
aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3Njb3BlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251
bUNvbnN0YW50cyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUo
KSwgbV9sYXN0TGluZSk7CiAgICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmgKaW5kZXggMzY2MjM2N2EwMWI3MDlkOWNkNGVjM2Q0N2QyZjNkYjkzZTVlMjRhNy4u
YWQ3YTc1OWNlZmQ2MmYyYzI4Y2I3ZWIyOTk4YmI4ZDg2NjcxNmY3NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaApA
QCAtNjEsOSArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgaW50IGNsb3NlQnJhY2VMaW5lOwog
ICAgIGludCBjbG9zZUJyYWNlUG9zOwotICAgIGJvb2wgdXNlc0V2YWw7Ci0gICAgYm9vbCBzdHJp
Y3RNb2RlOwotICAgIGJvb2wgbmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9y
dCBzY29wZUZsYWdzOwogICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiB1c2VkVmFyaWFi
bGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiB3cml0dGVuVmFyaWFibGVzOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXgg
YzJjOTM3NTZkZTAzYWJjYTI5NWRlMTNhYzhlZTEzODFjN2Q0MGM0OC4uMmFjYjUwOTdkOGJkMDRm
NGQ0OWNmOWM2ZWFmMDZlNzc4MzgwZDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgKQEAgLTIyMCw3ICsyMjAsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcHBlbmRTdGF0ZW1lbnQoaW50LCBpbnQpIHsgfQogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXIqLCBib29sKSB7IH0KICAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFj
a0RlcHRoLCBpbnQgZXhwciwgaW50LCBpbnQsIGludCwgYm9vbCkKICAgICB7CiAgICAgICAgIGlm
ICghbV90b3BCaW5hcnlFeHByKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAppbmRleCBhODUwODlhYzk4YjMzZWEzNmU0NThhNWExNWM0NTNlMTAwYjI4ZmRk
Li40NTViNDUyMDQ3OTBjYzExMzBjYTc5Y2VmZjY2NzkwM2U1MmE0YTJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMjIyLDcgKzIyMiw3IEBA
IEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlCiAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsK
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgICAgIH0KLSAgICAgICAgcmVjb3Jk
UGFyc2UoZXZhbE5vZGUtPmZlYXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCBldmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsKKyAgICAgICAg
cmVjb3JkUGFyc2UoZXZhbE5vZGUtPnNjb3BlRmxhZ3MoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwog
ICAgICAgICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hh
aW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgICAgIApAQCAtMzU1LDcgKzM1NSw3IEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjCiAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsK
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgICAgIH0KLSAgICAgICAgcmVjb3Jk
UGFyc2UocHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgp
KTsKKyAgICAgICAgcmVjb3JkUGFyc2UocHJvZ3JhbU5vZGUtPnNjb3BlRmxhZ3MoKSwgcHJvZ3Jh
bU5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSwgcHJv
Z3JhbU5vZGUtPmxhc3RMaW5lKCkpOwogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogICAgIApAQCAtNTEy
LDcgKzUxMiw3IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihTY29wZUNoYWluCiAgICAgaWYgKG1fZm9yY2VVc2Vz
QXJndW1lbnRzKQogICAgICAgICBib2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7CiAgICAgYm9keS0+
ZmluaXNoUGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9k
eS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5v
KCksIGJvZHktPmxhc3RMaW5lKCkpOworICAgIHJlY29yZFBhcnNlKGJvZHktPnNjb3BlRmxhZ3Mo
KSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxh
c3RMaW5lKCkpOwogCiAgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7CiAgICAg
QVNTRVJUKChjb21waWxhdGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9j
a0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAppbmRleCA2OWU4MGIyOGVmZjM3YzZlZDcwYTg1NWVjM2Q1OTQ4Nzk0NjQ4
ZDI1Li45NzYyNjc5ZTNjZTJiNjU2NzU1NjUxNDU0NDkwYmRlYmQ1MzEzMDg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0yNzAsMTQgKzI3MCwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpCiAgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQogICAg
ICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAgICAgICAsIG1fZmVhdHVyZXMoaXNJ
blN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCisgICAgICAgICAgICAsIG1f
c2NvcGVGbGFncyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGbGFnIDogTm9TY29wZUZs
YWdzKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJh
c2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIE5VTV9QQVJBTUVURVJTX05PVF9DT01Q
SUxFRCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICAgICAgICAgLCBtX2Zl
YXR1cmVzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiAwKQorICAgICAg
ICAgICAgLCBtX3Njb3BlRmxhZ3MoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmxhZyA6
IE5vU2NvcGVGbGFncykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTI5MSwxMCArMjkxLDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdExpbmU7IH0KICAgICAgICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0TGluZTsgfQogCi0gICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIEFyZ3VtZW50c0ZlYXR1cmU7IH0KLSAgICAgICAgYm9v
bCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVz
IHx8IG1fZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVy
ZSk7IH0KLSAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1
cmVzICYgU3RyaWN0TW9kZUZlYXR1cmU7IH0KKyAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNFdmFsRmxhZzsgfQorICAgICAgICBib29sIHVz
ZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzQXJndW1lbnRz
RmxhZzsgfQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXMgfHwgbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVz
ZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJvb2wgaXNTdHJpY3RNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAg
ICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAgICAgICAgIApAQCAtMzEwLDE2ICszMTAsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcmVjb3Jk
UGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBp
bnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIHZvaWQgcmVjb3JkUGFyc2UoU2Nv
cGVGbGFncyBzY29wZUZsYWdzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RM
aW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZmVhdHVyZXMgPSBm
ZWF0dXJlczsKKyAgICAgICAgICAgIG1fc2NvcGVGbGFncyA9IHNjb3BlRmxhZ3M7CiAgICAgICAg
ICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKICAgICAgICAgICAgIG1fbGFzdExpbmUg
PSBsYXN0TGluZTsKICAgICAgICAgfQogCiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7Ci0g
ICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1fc2Nv
cGVGbGFnczsKICAgICAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBp
bnQgbV9maXJzdExpbmU7CiAgICAgICAgIGludCBtX2xhc3RMaW5lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130642</attachid>
            <date>2012-03-07 10:20:17 -0800</date>
            <delta_ts>2012-03-09 02:03:59 -0800</delta_ts>
            <desc>new patch to run the ews</desc>
            <filename>bug-79112-20120307192015.patch</filename>
            <type>text/plain</type>
            <size>56180</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzE0ZTIzNWU4YjA3NWRkZDA5MDA4OWIyM2M4ZGQ1N2ViZDNmY2NjLi5hZjRmYmQyYjZmODU3OTVm
NzVkYzhkNWM5MTBiMzg2N2Q2ZDE0OGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTYgQEAKKzIwMTItMDMtMDcgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIGNvZGUgZmVhdHVyZSBhbmFseXNpcyBpbiB0aGUgcGFyc2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTExMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29tbWl0
IHJlZmFjdG9ycyB0aGUgcGFyc2VyIHRvIG1vcmUgdW5pZm9ybWx5IHByb3BhZ2F0ZSBmbGFnCisg
ICAgICAgIGJpdHMgZG93biBhbmQgdXAgdGhlIHBhcnNlIHByb2Nlc3MsIGFzIHRoZSBwYXJzZXIg
ZGVzY2VuZHMgYW5kCisgICAgICAgIHJldHVybnMgaW50byBuZXN0ZWQgYmxvY2tzLiAgU29tZSBm
bGFncyBnZXQgcGFzc2VkIHRvd24gdG8KKyAgICAgICAgc3Vic2NvcGVzLCBzb21lIGFwcGx5IHRv
IHNwZWNpZmljIHNjb3BlcyBvbmx5LCBhbmQgc29tZSBnZXQKKyAgICAgICAgdW5pb25lZCB1cCBh
ZnRlciBwYXJzaW5nIHN1YnNjb3Blcy4KKworICAgICAgICBUaGUgZ29hbCBpcyB0byBldmVudHVh
bGx5IGJlIHZlcnkgcHJlY2lzZSB3aXRoIHNjb3BpbmcKKyAgICAgICAgaW5mb3JtYXRpb24sIG9u
Y2Ugd2UgaGF2ZSBibG9jayBzY29wZXM6IG9uZSBibG9jayBzY29wZSBtaWdodCB1c2UKKyAgICAg
ICAgYGV2YWwnLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBlbWlzc2lvbiBvZiBhIHN5bWJvbCB0
YWJsZSB3aXRoaW4KKyAgICAgICAgdGhhdCBibG9jayBhbmQgY29udGFpbmluZyBibG9ja3MsIHdo
ZXJlYXMgYW5vdGhlciBibG9jayBpbiB0aGUKKyAgICAgICAgc2FtZSBmdW5jdGlvbiBtaWdodCBu
b3QsIGFsbG93aW5nIHVzIHRvIG5vdCBlbWl0IGEgc3ltYm9sIHRhYmxlLgorCisgICAgICAgICog
cGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlRmxhZ3MpOiBSZW5hbWUgZnJvbSBD
b2RlRmVhdHVyZXMuCisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2V0U2NvcGVGbGFncyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2NvcGVGbGFncyk6IE5ldyBhY2Nlc3NvcnMgZm9yIG1f
c2NvcGVGbGFncy4KKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjppc1N0cmljdE1vZGUpOgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnVzZXNFdmFsKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
Ojp1c2VzQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRVc2VzQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjp1c2VzVGhpcyk6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRzQWN0aXZhdGlvbik6IFJlZmFjdG9yIHRoZXNlIGFjY2Vz
c29ycyB0bworICAgICAgICBvcGVyYXRlIG9uIHRoZSBtX3Njb3BlRmxhZ3MgbWVtYmVyLgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnNvdXJjZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJRCk6IFNodWZmbGUg
dGhlc2UgZGVmaW5pdGlvbnMgYXJvdW5kOyBubworICAgICAgICBzZW1hbnRpYyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6U2NvcGVOb2RlKQorICAgICAgICAoSlNDOjpQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUpCisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpFdmFsTm9kZSkKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6IEhhdmUgdGhl
c2UgY29uc3RydWN0b3JzCisgICAgICAgIHRha2UgYSBTY29wZUZsYWdzIGFzIGFuIGFyZ3VtZW50
LCBpbnN0ZWFkIG9mIGEgYm9vbCBpblN0cmljdENvbnRleHQuCisKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9kZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1O
b2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZSk6IEFkYXB0IGNvbnN0cnVjdG9ycyB0byBjaGFuZ2UuCisKKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6U2Nv
cGU6OlNjb3BlKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKEFTVEJ1aWxkZXIpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZSk6IERvbid0IHRyYWNr
IHNjb3BlCisgICAgICAgIGZlYXR1cmVzIGhlcmUuICBJbnN0ZWFkIHJlbHkgb24gdGhlIGJhc2Ug
UGFyc2VyIG1lY2hhbmlzbSB0byB0cmFjaworICAgICAgICBmZWF0dXJlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2RlSW5mby5oIChOb2RlSW5mbywgTm9kZURlY2xhcmF0aW9uSW5mbyk6ICJTY29w
ZUZsYWdzIi4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OlNjb3BlKTogTWFuYWdlIHNjb3BlIHRocm91Z2ggZmxhZ3MsIG5vdAorICAgICAgICBiaXQt
Ym9vbGVhbnMuICBUaGlzIGxldHMgdXMgdW5pZm9ybWx5IHByb3BhZ2F0ZSB0aGVtIHVwIGFuZCBk
b3duLgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTY29wZTo6dXNlVmFyaWFi
bGUpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6Z2V0Q2FwdHVyZWRWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6c2F2ZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpyZXN0b3JlRnVuY3Rp
b25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOiBBZGFwdCB0byB1c2Ug
c2NvcGUgZmxhZ3MgYW5kIHRoZWlyCisgICAgICAgIGFjY2Vzc29ycyBpbnN0ZWFkIG9mIGJpdC1i
b29sZWFucy4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQ
YXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OmRp
ZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNlRWxlbWVudHMpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6IEhvaXN0IHNvbWUgb2YgdGhlIGZs
YWcgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIHRoZSAiY29udGV4dCIgKEFTVEJ1aWxkZXIgb3Ig
U3ludGF4Q2hlY2tlcikgYW5kIHRvIGhlcmUuCisgICAgICAgIERvZXMgbm90IHNlZW0gdG8gaGF2
ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIChTb3VyY2VQcm92aWRlckNhY2hlSXRlbSk6CisgICAgICAgIENhY2hlIHRo
ZSBzY29wZWZsYWdzLgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6IFJlbW92ZSBl
dmFsQ291bnQoKSBkZWNsLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6dXNlc0V2YWwpOgor
ICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp1c2VzQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6aXNTdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6IFNjb3Bl
RmxhZ3MsIG5vdCBmZWF0dXJlcy4KKwogMjAxMi0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxzaW1v
bi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgQVJNIGJ1aWxkIGZpeC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggMGViNjBjZjg5OTJmZjA5MjQ5
OTEzNDQzMjhiZjkzMWExYmY3MzZlNy4uYTE3M2NjMTBmY2M3NmUwN2YwZmE5ODY2YzQzYjRiNjM1
YzA3ZDNiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWls
ZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAg
LTc3LDcgKzc3LDYgQEAgcHVibGljOgogICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQogICAgICAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlKQogICAgICAgICAsIG1fc2NvcGUo
Z2xvYmFsRGF0YSkKLSAgICAgICAgLCBtX2V2YWxDb3VudCgwKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC0xMTksNyArMTE4LDYgQEAgcHVibGljOgogCiAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhckRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fc2Nv
cGUubV92YXJEZWNsYXJhdGlvbnM7IH0KICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25T
dGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBmdW5jRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29w
ZS5tX2Z1bmNEZWNsYXJhdGlvbnM7IH0KLSAgICBpbnQgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVy
biBtX3Njb3BlLm1fZmVhdHVyZXM7IH0KICAgICBpbnQgbnVtQ29uc3RhbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY29wZS5tX251bUNvbnN0YW50czsgfQogCiAgICAgdm9pZCBhcHBlbmRUb0NvbW1h
KENvbW1hTm9kZSogY29tbWFOb2RlLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyBjb21tYU5vZGUt
PmFwcGVuZChleHByKTsgfQpAQCAtMTUyLDE3ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlu
Y0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFZvaWROb2Rl
KGxpbmVOdW1iZXIsIGV4cHIpOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogdGhpc0V4cHIo
aW50IGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB1c2VzVGhpcygpOwotICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIFRoaXNOb2RlKGxpbmVOdW1iZXIpOwotICAgIH0KLSAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQsIGludCBzdGFydCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCi0gICAgICAgICAgICB1c2VzQXJn
dW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUo
bGluZU51bWJlciwgKmlkZW50LCBzdGFydCk7Ci0gICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiB0
aGlzRXhwcihpbnQgbGluZU51bWJlcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFRoaXNO
b2RlKGxpbmVOdW1iZXIpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoaW50
IGxpbmVOdW1iZXIsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgc3RhcnQpIHsgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCAqaWRlbnQsIHN0YXJ0
KTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGludCBsaW5lTnVt
YmVyKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgT2JqZWN0TGl0ZXJhbE5vZGUobGluZU51
bWJlcik7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChpbnQgbGlu
ZU51bWJlciwgUHJvcGVydHlMaXN0Tm9kZSogcHJvcGVydGllcykgeyByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIE9iamVjdExpdGVyYWxOb2RlKGxpbmVOdW1iZXIsIHByb3BlcnRpZXMpOyB9CiAK
QEAgLTI2Myw5ICsyNTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGludCBsaW5lTnVt
YmVyLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVG
dW5jdGlvbkJvZHkoaW50IGxpbmVOdW1iZXIsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBs
aW5lTnVtYmVyLCBpblN0cmljdENvbnRleHQpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5
Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc2NvcGVGbGFncyk7CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkoaW50IGxpbmVOdW1iZXIsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBj
b25zdCBJZGVudGlmaWVyKiBuYW1lLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9k
eU5vZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9k
eVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQpAQCAtMzEyLDggKzMwMSw2IEBAIHB1YmxpYzoK
ICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChpbnQgbGluZU51bWJl
ciwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgUGFyYW1l
dGVyTm9kZSogcGFyYW1ldGVycywgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3Ms
IGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewogICAgICAgICBGdW5j
RGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0RlY2xOb2RlKGxpbmVOdW1i
ZXIsICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9z
LCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7Ci0gICAgICAgIGlm
ICgqbmFtZSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKLSAgICAg
ICAgICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlv
bnMtPmRhdGEuYXBwZW5kKGRlY2wtPmJvZHkoKSk7CiAgICAgICAgIGJvZHktPnNldExvYyhib2R5
U3RhcnRMaW5lLCBib2R5RW5kTGluZSk7CiAgICAgICAgIHJldHVybiBkZWNsOwpAQCAtNDI2LDgg
KzQxMyw2IEBAIHB1YmxpYzoKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVUcnlTdGF0ZW1lbnQo
aW50IGxpbmVOdW1iZXIsIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxs
eUJsb2NrLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIFRyeU5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBUcnlOb2RlKGxpbmVOdW1iZXIsIHRyeUJs
b2NrLCAqaWRlbnQsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7Ci0gICAgICAgIGlmIChjYXRj
aEJsb2NrKQotICAgICAgICAgICAgdXNlc0NhdGNoKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
NDYzLDcgKzQ0OCw2IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhT
dGF0ZW1lbnQoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVu
ZExpbmUpCiAgICAgewotICAgICAgICB1c2VzV2l0aCgpOwogICAgICAgICBXaXRoTm9kZSogcmVz
dWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdpdGhOb2RlKGxpbmVOdW1iZXIsIGV4cHIsIHN0YXRl
bWVudCwgZW5kLCBlbmQgLSBzdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGlu
ZSwgZW5kTGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC01MDYsOCArNDkwLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBh
dHRycykKICAgICB7Ci0gICAgICAgIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cyA9PSAqaWRlbnQpCi0gICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAg
IG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlk
ZW50LCBhdHRycykpOwogICAgIH0KIApAQCAtNTIyLDggKzUwNCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobGluZU51bWJlciwgbGlzdCwg
aW5pdCk7CiAgICAgfQogCi0gICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZh
bENvdW50OyB9Ci0KICAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3Bl
cmFuZFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhwclN0YXJ0LCBp
bnQgbGhzLCBpbnQgcmhzLCBib29sIGhhc0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICAgICAgb3Bl
cmFuZFN0YWNrRGVwdGgrKzsKQEAgLTYxMCwxMyArNTkwLDExIEBAIHByaXZhdGU6CiAgICAgICAg
IFNjb3BlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAgICAgIDogbV92YXJEZWNs
YXJhdGlvbnMobmV3IChnbG9iYWxEYXRhKSBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFj
a3M6OlZhclN0YWNrPikKICAgICAgICAgICAgICwgbV9mdW5jRGVjbGFyYXRpb25zKG5ldyAoZ2xv
YmFsRGF0YSkgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
PikKLSAgICAgICAgICAgICwgbV9mZWF0dXJlcygwKQogICAgICAgICAgICAgLCBtX251bUNvbnN0
YW50cygwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIG1fdmFyRGVjbGFyYXRpb25zOwogICAgICAgICBQ
YXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBtX2Z1bmNE
ZWNsYXJhdGlvbnM7Ci0gICAgICAgIGludCBtX2ZlYXR1cmVzOwogICAgICAgICBpbnQgbV9udW1D
b25zdGFudHM7CiAgICAgfTsKIApAQCAtNjI2LDE1ICs2MDQsNiBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIHZvaWQgaW5jQ29uc3RhbnRzKCkgeyBtX3Njb3BlLm1fbnVtQ29uc3RhbnRzKys7IH0K
LSAgICB2b2lkIHVzZXNUaGlzKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gVGhpc0ZlYXR1cmU7
IH0KLSAgICB2b2lkIHVzZXNDYXRjaCgpIHsgbV9zY29wZS5tX2ZlYXR1cmVzIHw9IENhdGNoRmVh
dHVyZTsgfQotICAgIHZvaWQgdXNlc0FyZ3VtZW50cygpIHsgbV9zY29wZS5tX2ZlYXR1cmVzIHw9
IEFyZ3VtZW50c0ZlYXR1cmU7IH0KLSAgICB2b2lkIHVzZXNXaXRoKCkgeyBtX3Njb3BlLm1fZmVh
dHVyZXMgfD0gV2l0aEZlYXR1cmU7IH0KLSAgICB2b2lkIHVzZXNFdmFsKCkgCi0gICAgewotICAg
ICAgICBtX2V2YWxDb3VudCsrOwotICAgICAgICBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gRXZhbEZl
YXR1cmU7Ci0gICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXIoaW50IGxpbmVO
dW1iZXIsIGRvdWJsZSBkKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBOdW1iZXJOb2RlKGxpbmVOdW1iZXIsIGQpOwpAQCAtNjQ3LDcgKzYxNiw2IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPEFzc2lnbm1lbnRJbmZvLCAxMD4gbV9hc3NpZ25tZW50SW5mb1N0YWNrOwog
ICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiwgMTA+IG1fYmluYXJ5T3BlcmF0b3JTdGFjazsKICAg
ICBWZWN0b3I8cGFpcjxpbnQsIGludD4sIDEwPiBtX3VuYXJ5VG9rZW5TdGFjazsKLSAgICBpbnQg
bV9ldmFsQ291bnQ7CiB9OwogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVP
Zk5vZGUoaW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKiBleHByKQpAQCAtNzk3LDEwICs3
NjUsOCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUo
aW50IGxpbmVOdW1iZXIsIEV4cHJlc3Npb25Ob2RlKgogICAgIGlmIChmdW5jLT5pc1Jlc29sdmVO
b2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KGZ1bmMpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0g
cmVzb2x2ZS0+aWRlbnRpZmllcigpOwotICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKLSAgICAgICAgICAgIHVzZXNFdmFsKCk7Cisg
ICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZh
bCkKICAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRXZhbEZ1bmN0aW9uQ2Fs
bE5vZGUobGluZU51bWJlciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
KTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlKGxpbmVOdW1iZXIsIGlkZW50aWZpZXIsIGFyZ3MsIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChmdW5jLT5pc0JyYWNrZXRB
Y2Nlc3Nvck5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlSW5mby5oCmlu
ZGV4IDQ4NTNhZWM0Mjg5NWE0MTM1ZjY1ZjRmZGYwNDM5YTcwOTA2ZThkMDQuLmUwZDRmZmVjNGY2
MTBjYjViOTRiMmU2OTA3YzZlMzUyMTU2MTU1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVJbmZvLmgKQEAgLTI2LDcgKzI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IE5vZGVJbmZvIHsKICAgICAgICAgVCBtX25vZGU7
Ci0gICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1f
c2NvcGVGbGFnczsKICAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKQEAgLTQ0
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFQgbV9ub2RlOwogICAgICAgICBQ
YXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogbV92YXJEZWNsYXJh
dGlvbnM7CiAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVh
dHVyZXM7CisgICAgICAgIFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOwogICAgICAgICBpbnQgbV9u
dW1Db25zdGFudHM7CiAgICAgfTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAKaW5kZXggYzMyZTRjNzNhMjRlYmViMjMzY2Q1ZTAxZmZmZDYzYTQ4Njg1Yzg4Ni4uNzVj
ODQ4YmNlN2E2Y2FjZTUwZWEzZTZmYWQ3ZDAxMDNlNmY4NjQyMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5jcHAKQEAgLTc1LDE5ICs3NSwxOSBAQCBTdGF0ZW1lbnROb2RlKiBT
b3VyY2VFbGVtZW50czo6c2luZ2xlU3RhdGVtZW50KCkgY29uc3QKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFNjb3BlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBs
aW5lTnVtYmVyLCBib29sIGluU3RyaWN0Q29udGV4dCkKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNjb3BlRmxhZ3Mgc2NvcGVG
bGFncykKICAgICA6IFN0YXRlbWVudE5vZGUobGluZU51bWJlcikKICAgICAsIFBhcnNlckFyZW5h
UmVmQ291bnRlZChnbG9iYWxEYXRhKQotICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQg
PyBTdHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCisgICAgLCBtX3Njb3BlRmxhZ3Moc2Nv
cGVGbGFncykKICAgICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgLCBtX3N0YXRlbWVudHMoMCkK
IHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJ
ZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBpbnQgbGluZU51bWJlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgU2NvcGVGbGFncyBzY29w
ZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVy
KQogICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCi0gICAgLCBtX2ZlYXR1
cmVzKGZlYXR1cmVzKQorICAgICwgbV9zY29wZUZsYWdzKHNjb3BlRmxhZ3MpCiAgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCiAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgLCBt
X3N0YXRlbWVudHMoY2hpbGRyZW4pCkBAIC0xMDcsMTQgKzEwNywxNCBAQCBTdGF0ZW1lbnROb2Rl
KiBTY29wZU5vZGU6OnNpbmdsZVN0YXRlbWVudCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1pbmxpbmUgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sq
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5l
TnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZh
cmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBQcm9ncmFtTm9kZTo6UHJv
Z3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgU2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAg
IDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZsYWdzLCBudW1Db25z
dGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVh
dGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0
cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxh
Z3MsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0g
bmV3IFByb2dyYW1Ob2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFj
aywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNv
bnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2Rl
KGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAg
Y2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgc2NvcGVGbGFncywgbnVtQ29uc3RhbnRzKTsKIAog
ICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2Fy
ZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTEyNSwxNCArMTI1LDE0IEBAIFBhc3NSZWZQdHI8UHJvZ3Jh
bU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQg
bGluZU51CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElk
ZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9k
ZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGlu
ZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51
bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29u
c3RhbnRzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwg
Y2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZs
YWdzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2Rl
OjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFz
c1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxh
Z3MsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3
IEV2YWxOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRz
KTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwg
bGluZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2UsIHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9k
ZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0
KCk7CkBAIC0xNDksMTMgKzE0OSwxMyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6OkZ1bmN0aW9uUGFy
YW1ldGVycyhQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlcikKICAgICAgICAgYXBwZW5kKHBh
cmFtZXRlci0+aWRlbnQoKSk7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlv
bkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGJvb2wg
aW5TdHJpY3RDb250ZXh0KQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIs
IGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNjb3BlRmxhZ3Mg
c2NvcGVGbGFncykKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzY29w
ZUZsYWdzKQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNr
LCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDog
U2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2
YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0
YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBT
Y29wZUZsYWdzIHNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUo
Z2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzY29wZUZsYWdzLCBudW1Db25zdGFudHMpCiB7
CiB9CiAKQEAgLTE3MiwxNCArMTcyLDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNo
UGFyc2luZyhQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gcGFyYW1ldGVycywKICAgICBt
X2lkZW50ID0gaWRlbnQ7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6
OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBib29sIGlu
U3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTY29wZUZsYWdzIHNj
b3BlRmxhZ3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEs
IGxpbmVOdW1iZXIsIGluU3RyaWN0Q29udGV4dCk7CisgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJv
ZHlOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNjb3BlRmxhZ3MpOwogfQogCi1QYXNzUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVy
U2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayog
dmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFNjb3BlRmxhZ3Mgc2Nv
cGVGbGFncywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9k
ZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGNo
aWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29k
ZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBjaGls
ZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUs
IHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5s
YXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggMjZjODI5ZGE2ZjViOGUxYTFjZTUyNTA0MmRk
OGU3NGIzYmMzMGIxNy4uZGI4NTFiNmRkNTAxNTE3OGM4OGUyNTQyYWFiMzI1ZjE0NWU2ZGZjOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNDcsMTkgKzQ3LDMxIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNjb3Bl
Tm9kZTsKIAotICAgIHR5cGVkZWYgdW5zaWduZWQgQ29kZUZlYXR1cmVzOwotCi0gICAgY29uc3Qg
Q29kZUZlYXR1cmVzIE5vRmVhdHVyZXMgPSAwOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBFdmFs
RmVhdHVyZSA9IDEgPDwgMDsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQXJndW1lbnRzRmVhdHVy
ZSA9IDEgPDwgMTsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgV2l0aEZlYXR1cmUgPSAxIDw8IDI7
Ci0gICAgY29uc3QgQ29kZUZlYXR1cmVzIENhdGNoRmVhdHVyZSA9IDEgPDwgMzsKLSAgICBjb25z
dCBDb2RlRmVhdHVyZXMgVGhpc0ZlYXR1cmUgPSAxIDw8IDQ7Ci0gICAgY29uc3QgQ29kZUZlYXR1
cmVzIFN0cmljdE1vZGVGZWF0dXJlID0gMSA8PCA1OwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBT
aGFkb3dzQXJndW1lbnRzRmVhdHVyZSA9IDEgPDwgNjsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IFNjb3BlRmxhZ3M7CisKKyAgICBjb25zdCBTY29wZUZsYWdzIE5vU2NvcGVGbGFncyA9IDA7
CisKKyAgICAvLyBTb21lIHNjb3BlIGZsYWdzIHByb3BhZ2F0ZSBkb3duIHRoZSBwYXJzZSB0cmVl
IGZyb20gcGFyZW50IHNjb3BlcywgbGlrZQorICAgIC8vIHN0cmljdCBtb2RlLiBUaGV5IGFyZSBt
b2RhbCB0byBhbiBlbnRpcmUgc2V0IG9mIG5lc3RlZCBzY29wZXMuCisgICAgY29uc3QgU2NvcGVG
bGFncyBTdHJpY3RNb2RlRmxhZyA9IDEgPDwgMDsKKyAgICBjb25zdCBTY29wZUZsYWdzIEZ1bmN0
aW9uTW9kZUZsYWcgPSAxIDw8IDE7CisgICAgY29uc3QgU2NvcGVGbGFncyBBbGxTY29wZU1vZGVG
bGFncyA9IFN0cmljdE1vZGVGbGFnIHwgRnVuY3Rpb25Nb2RlRmxhZzsKKworICAgIC8vIFNvbWUg
c2NvcGUgZmxhZ3MgcmVmZXIgb25seSB0byBhIHNwZWNpZmljIHNjb3BlLCBhbmQgZG9uJ3QgcHJv
cGFnYXRlIGRvd24KKyAgICAvLyBvciB1cC4KKyAgICBjb25zdCBTY29wZUZsYWdzIEJsb2NrU2Nv
cGVGbGFnID0gMSA8PCA0OworICAgIGNvbnN0IFNjb3BlRmxhZ3MgQWxsU2NvcGVLaW5kRmxhZ3Mg
PSBCbG9ja1Njb3BlRmxhZzsKKworICAgIC8vIE90aGVyIGZsYWdzIHJlZmxlY3QgdXNlcyB3aXRo
aW4gbmVzdGVkIHNjb3BlcywgYW5kIHNvIHByb3BhZ2F0ZSB1cAorICAgIC8vIGZyb20gdGhlIGxl
YXZlcy4KKyAgICBjb25zdCBTY29wZUZsYWdzIFVzZXNFdmFsRmxhZyA9IDEgPDwgODsKKyAgICBj
b25zdCBTY29wZUZsYWdzIFVzZXNBcmd1bWVudHNGbGFnID0gMSA8PCA5OworICAgIGNvbnN0IFNj
b3BlRmxhZ3MgVXNlc1dpdGhGbGFnID0gMSA8PCAxMDsKKyAgICBjb25zdCBTY29wZUZsYWdzIFVz
ZXNDYXRjaEZsYWcgPSAxIDw8IDExOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc1RoaXNGbGFn
ID0gMSA8PCAxMjsKKyAgICBjb25zdCBTY29wZUZsYWdzIFNoYWRvd3NBcmd1bWVudHNGbGFnID0g
MSA8PCAxMzsKKyAgICBjb25zdCBTY29wZUZsYWdzIEFsbFNjb3BlVXNlc0ZsYWdzID0gVXNlc0V2
YWxGbGFnIHwgVXNlc0FyZ3VtZW50c0ZsYWcgfCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFn
IHwgVXNlc1RoaXNGbGFnIHwgU2hhZG93c0FyZ3VtZW50c0ZsYWc7CiAgICAgCi0gICAgY29uc3Qg
Q29kZUZlYXR1cmVzIEFsbEZlYXR1cmVzID0gRXZhbEZlYXR1cmUgfCBBcmd1bWVudHNGZWF0dXJl
IHwgV2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUgfCBUaGlzRmVhdHVyZSB8IFN0cmljdE1vZGVG
ZWF0dXJlIHwgU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7Ci0KICAgICBlbnVtIE9wZXJhdG9yIHsK
ICAgICAgICAgT3BFcXVhbCwKICAgICAgICAgT3BQbHVzRXEsCkBAIC0xMzgzLDggKzEzOTUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2sgVmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRh
KiwgaW50LCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShKU0dsb2Jh
bERhdGEqLCBpbnQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNr
KiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOworICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTY29wZUZs
YWdzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgY29uc3QgU291cmNl
Q29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHVzaW5n
IFBhcnNlckFyZW5hUmVmQ291bnRlZDo6b3BlcmF0b3IgbmV3OwogCkBAIC0xMzk3LDI0ICsxNDA5
LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcy5j
bGVhcigpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYgc291cmNl
VVJMKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7IH0KLSAgICAg
ICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigp
LT5hc0lEKCk7IH0KLQotICAgICAgICB2b2lkIHNldEZlYXR1cmVzKENvZGVGZWF0dXJlcyBmZWF0
dXJlcykgeyBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7IH0KLSAgICAgICAgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzKCkgeyByZXR1cm4gbV9mZWF0dXJlczsgfQotCi0gICAgICAgIGJvb2wgdXNlc0V2YWwo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KLSAgICAgICAgYm9v
bCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gKG1fZmVhdHVyZXMgJiBBcmd1bWVudHNG
ZWF0dXJlKSAmJiAhKG1fZmVhdHVyZXMgJiBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZSk7IH0KLSAg
ICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgU3Ry
aWN0TW9kZUZlYXR1cmU7IH0KLSAgICAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKCkgeyBtX2Zl
YXR1cmVzIHw9IEFyZ3VtZW50c0ZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzVGhpcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBUaGlzRmVhdHVyZTsgfQotICAgICAgICBib29sIG5l
ZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsgfQotICAg
ICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChoYXNDYXB0dXJlZFZh
cmlhYmxlcygpKSB8fCAobV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwg
Q2F0Y2hGZWF0dXJlKSk7IH0KICAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuICEhbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgc2l6
ZV90IGNhcHR1cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJp
YWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQuaW1wbCgp
KTsgfQogCisgICAgICAgIHZvaWQgc2V0U2NvcGVGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxhZ3Mp
IHsgbV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KKyAgICAgICAgU2NvcGVGbGFncyBzY29w
ZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzOyB9CisKKyAgICAgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxh
ZzsgfQorICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdz
ICYgVXNlc0V2YWxGbGFnOyB9CisgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIChtX3Njb3BlRmxhZ3MgJiBVc2VzQXJndW1lbnRzRmxhZykgJiYgIShtX3Njb3BlRmxh
Z3MgJiBTaGFkb3dzQXJndW1lbnRzRmxhZyk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzQXJndW1l
bnRzKCkgeyBtX3Njb3BlRmxhZ3MgfD0gVXNlc0FyZ3VtZW50c0ZsYWc7IH0KKyAgICAgICAgYm9v
bCB1c2VzVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNUaGlzRmxhZzsg
fQorCisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFn
IHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25z
dCB7IHJldHVybiBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IG5lZWRzQWN0aXZhdGlvbkZvck1v
cmVUaGFuVmFyaWFibGVzKCk7IH0KKworICAgICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3Vy
Y2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQorICAg
ICAgICBpbnRwdHJfdCBzb3VyY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVy
KCktPmFzSUQoKTsgfQorCiAgICAgICAgIFZhclN0YWNrJiB2YXJTdGFjaygpIHsgcmV0dXJuIG1f
dmFyU3RhY2s7IH0KICAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25TdGFjazsgfQogCkBAIC0xNDM0LDcgKzE0NDgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1fc2NvcGVG
bGFnczsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgVmFyU3RhY2sgbV92
YXJTdGFjazsKICAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uU3RhY2s7CkBAIC0xNDQ2
LDEyICsxNDYwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDog
cHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50
cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgU2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFy
U3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUm
LCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9kZShK
U0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0
YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBTY29wZUZsYWdzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAgICAgfTsKQEAgLTE0NTks
MTIgKzE0NzMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbE5vZGUgOiBwdWJs
aWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
RnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2YWxOb2Rl
PiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZh
bE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBT
Y29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV2YWxO
b2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0
aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEV2YWxOb2RlKEpTR2xvYmFsRGF0YSosIGlu
dCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVy
U2V0JiwgY29uc3QgU291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAtMTQ4MSw4ICsxNDk1LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSA6IHB1YmxpYyBTY29wZU5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5v
ZGUgPSB0cnVlOwotICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSosIGludCwgYm9vbCBpc1N0cmljdE1vZGUpOwotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
c3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNjb3Bl
RmxhZ3MpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywg
aW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAgICAgICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9
CkBAIC0xNDk5LDggKzE1MTMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gdHJ1ZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBib29sIGluU3RyaWN0Q29udGV4
dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIFNjb3BlRmxhZ3MpOworICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29k
ZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIElkZW50aWZpZXIg
bV9pZGVudDsKICAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA0ODU2YTAwYTc0YWNkZTZhMjE2OWUyZmRl
NWQ4ZmNhNTZmZTRlNjZjLi5mNTg4NDdmZDI0Njc4ZjJmMjUyYzM1MWI1ZDhkM2JlOWU1MzVhYjcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC02MiwxMSArNjIs
MTIgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnUKICAgICBtX2xleGVyLT5zZXRDb2RlKHNvdXJj
ZSwgbV9hcmVuYSk7CiAKICAgICBtX2Z1bmN0aW9uQ2FjaGUgPSBzb3VyY2UucHJvdmlkZXIoKS0+
Y2FjaGUoKTsKLSAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwotICAgIGlmIChwYXJz
ZXJNb2RlID09IEpTUGFyc2VGdW5jdGlvbkNvZGUpCi0gICAgICAgIHNjb3BlLT5zZXRJc0Z1bmN0
aW9uKCk7CisgICAgU2NvcGVGbGFncyBzY29wZUZsYWdzID0gTm9TY29wZUZsYWdzOwogICAgIGlm
IChzdHJpY3RuZXNzID09IEpTUGFyc2VTdHJpY3QpCi0gICAgICAgIHNjb3BlLT5zZXRTdHJpY3RN
b2RlKCk7CisgICAgICAgIHNjb3BlRmxhZ3MgfD0gU3RyaWN0TW9kZUZsYWc7CisgICAgaWYgKHBh
cnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKKyAgICAgICAgc2NvcGVGbGFncyB8PSBG
dW5jdGlvbk1vZGVGbGFnOworICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKHNjb3BlRmxh
Z3MpOwogICAgIGlmIChwYXJhbWV0ZXJzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNjb3BlLT5kZWNsYXJl
UGFyYW1ldGVyKCZwYXJhbWV0ZXJzLT5hdChpKSk7CkBAIC05NiwxNiArOTcsMTIgQEAgVVN0cmlu
ZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcigpCiAKICAgICBJZGVudGlmaWVyU2V0IGNh
cHR1cmVkVmFyaWFibGVzOwogICAgIHNjb3BlLT5nZXRDYXB0dXJlZFZhcmlhYmxlcyhjYXB0dXJl
ZFZhcmlhYmxlcyk7Ci0gICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzID0gY29udGV4dC5mZWF0dXJl
cygpOwotICAgIGlmIChzY29wZS0+c3RyaWN0TW9kZSgpKQotICAgICAgICBmZWF0dXJlcyB8PSBT
dHJpY3RNb2RlRmVhdHVyZTsKLSAgICBpZiAoc2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKLSAg
ICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7CisgICAgU2NvcGVGbGFn
cyBzY29wZUZsYWdzID0gc2NvcGUtPm1vZGVGbGFncygpIHwgc2NvcGUtPnVzZXNGbGFncygpOwog
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uQ2FjaGVTaXplID0gbV9mdW5jdGlvbkNhY2hlID8gbV9mdW5j
dGlvbkNhY2hlLT5ieXRlU2l6ZSgpIDogMDsKICAgICBpZiAoZnVuY3Rpb25DYWNoZVNpemUgIT0g
b2xkRnVuY3Rpb25DYWNoZVNpemUpCiAgICAgICAgIG1fbGV4ZXItPnNvdXJjZVByb3ZpZGVyKCkt
Pm5vdGlmeUNhY2hlU2l6ZUNoYW5nZWQoZnVuY3Rpb25DYWNoZVNpemUgLSBvbGRGdW5jdGlvbkNh
Y2hlU2l6ZSk7CiAKLSAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0
LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVhdHVyZXMs
CisgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJEZWNsYXJh
dGlvbnMoKSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIHNjb3BlRmxhZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJl
ZFZhcmlhYmxlcyk7CiAKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKQEAgLTExMywxMyArMTEwLDEz
IEBAIFVTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgogdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFy
c2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMsIFBhcnNlckFyZW5hRGF0YTxEZWNs
YXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiB2YXJTdGFjaywgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2s+KiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5lLCBpbnQg
bnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2s+KiBmdW5jU3RhY2ssIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncywgaW50IGxhc3RMaW5l
LCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCiB7CiAgICAg
bV9zb3VyY2VFbGVtZW50cyA9IHNvdXJjZUVsZW1lbnRzOwogICAgIG1fdmFyRGVjbGFyYXRpb25z
ID0gdmFyU3RhY2s7CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gZnVuY1N0YWNrOwogICAgIG1f
Y2FwdHVyZWRWYXJpYWJsZXMuc3dhcChjYXB0dXJlZFZhcnMpOwotICAgIG1fZmVhdHVyZXMgPSBm
ZWF0dXJlczsKKyAgICBtX3Njb3BlRmxhZ3MgPSBzY29wZUZsYWdzOwogICAgIG1fbGFzdExpbmUg
PSBsYXN0TGluZTsKICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0KQEAgLTE0
Nyw3ICsxNDQsNyBAQCB0ZW1wbGF0ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPAogICAgICAgICAgICAgaWYgKGRp
cmVjdGl2ZSkgewogICAgICAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0IiBtdXN0IGJlIHRoZSBl
eGFjdCBsaXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNlcXVlbmNlcyBvciBsaW5lIGNvbnRpbnVhdGlv
bi4KICAgICAgICAgICAgICAgICBpZiAoIWhhc1NldFN0cmljdCAmJiBkaXJlY3RpdmVMaXRlcmFs
TGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgewotICAgICAgICAg
ICAgICAgICAgICBzZXRTdHJpY3RNb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT5zZXRGbGFncyhTdHJpY3RNb2RlRmxhZyk7CiAgICAgICAgICAgICAgICAgICAgIGhh
c1NldFN0cmljdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlzVmFs
aWRTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXQo
c3RhcnRPZmZzZXQpOwpAQCAtMjU1LDYgKzI1Miw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVjbGFyYXRp
CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgYm9vbCBoYXNJbml0aWFsaXplciA9IG1hdGNoKEVR
VUFMKTsKICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNs
YXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgbmFt
ZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7CisgICAgICAgIGlmIChtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSkKKyAgICAgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT5zZXRGbGFncyhVc2VzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIGNvbnRleHQuYWRk
VmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0Y2goSU5UT0tF
TikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwogICAgICAgICBp
ZiAoaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgIGludCB2YXJEaXZvdCA9IHRva2VuU3Rh
cnQoKSArIDE7CkBAIC0yODksNiArMjg4LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlQ29uc3REZWNsTGlzdCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDb25zdERlY2wKICAg
ICAgICAgbmV4dCgpOwogICAgICAgICBib29sIGhhc0luaXRpYWxpemVyID0gbWF0Y2goRVFVQUwp
OwogICAgICAgICBkZWNsYXJlVmFyaWFibGUobmFtZSk7CisgICAgICAgIGlmIChtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSkKKyAgICAgICAgICAgIGN1cnJl
bnRTY29wZSgpLT5zZXRGbGFncyhVc2VzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIGNvbnRleHQu
YWRkVmFyKG5hbWUsIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50IHwgKGhhc0luaXRpYWxp
emVyID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyIDogMCkpOwogICAgICAgICBU
cmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IDA7CiAgICAgICAgIGlmIChoYXNJbml0aWFsaXpl
cikgewpAQCAtNTExLDcgKzUxMiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VXaXRoU3RhdGVtZW50CiB7CiAgICAg
QVNTRVJUKG1hdGNoKFdJVEgpKTsKICAgICBmYWlsSWZUcnVlV2l0aE1lc3NhZ2Uoc3RyaWN0TW9k
ZSgpLCAiJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOwot
ICAgIGN1cnJlbnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7CisgICAgY3VycmVu
dFNjb3BlKCktPnNldEZsYWdzKFVzZXNXaXRoRmxhZyk7CiAgICAgaW50IHN0YXJ0TGluZSA9IHRv
a2VuTGluZSgpOwogICAgIG5leHQoKTsKICAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7CkBA
IC01MjYsNiArNTI3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVdpdGhTdGF0ZW1lbnQKICAgICBUcmVlU3RhdGVt
ZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CiAgICAgZmFp
bElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAKKyAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3Mo
VXNlc1dpdGhGbGFnKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50KG1f
bGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIGV4cHIsIHN0YXRlbWVudCwgc3RhcnQsIGVuZCwgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKIH0KIApAQCAtNjE0LDE1ICs2MTYsMTUgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVRy
eVN0YXRlbWVudCgKICAgICBpbnQgbGFzdExpbmUgPSBtX2xhc3RMaW5lOwogICAgIAogICAgIGlm
IChtYXRjaChDQVRDSCkpIHsKLSAgICAgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFj
dGl2YXRpb24oKTsKKyAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNDYXRjaEZs
YWcpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsK
ICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAgICAgICBpZGVudCA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIEF1dG9Qb3BTY29wZVJlZiBjYXRj
aFNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKKyAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGNhdGNo
U2NvcGUodGhpcywgcHVzaFNjb3BlKGN1cnJlbnRTY29wZSgpLT5tb2RlRmxhZ3MoKSkpOwogICAg
ICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVWYXJpYWJs
ZShpZGVudCksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgaWRlbnQtPmltcGwo
KSwgImluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIGNhdGNoU2NvcGUtPnByZXZlbnROZXdEZWNs
cygpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoQmxvY2tTY29wZUZsYWcgfCBV
c2VzQ2F0Y2hGbGFnKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKICAgICAg
ICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFKTsKICAgICAgICAgY2F0Y2hCbG9jayA9IHBhcnNlQmxv
Y2tTdGF0ZW1lbnQoY29udGV4dCk7CkBAIC03NTksNyArNzYxLDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9u
Qm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7CiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQotICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgc3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4
ZXItPmxhc3RMaW5lTnVtYmVyKCksIGN1cnJlbnRTY29wZSgpLT5tb2RlRmxhZ3MoKSk7CiAgICAg
RGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKICAgICBtX3N0
YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5
QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0
YSksIG1fbGV4ZXIuZ2V0KCkpOwpAQCAtNzcwLDggKzc3Miw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5j
dGlvbkJvCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPEZ1bmN0aW9u
UmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwg
Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25J
bmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgbmFtZSwgVHJlZUZv
cm1hbFBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsIFRyZWVGdW5jdGlvbkJvZHkmIGJvZHksIGlu
dCYgb3BlbkJyYWNlUG9zLCBpbnQmIGNsb3NlQnJhY2VQb3MsIGludCYgYm9keVN0YXJ0TGluZSkK
IHsKLSAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7
Ci0gICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigpOworICAgIEF1dG9Qb3BTY29wZVJl
ZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZShjdXJyZW50U2NvcGUoKS0+bW9kZUZsYWdz
KCkgfCBGdW5jdGlvbk1vZGVGbGFnKSk7CiAgICAgaWYgKG1hdGNoKElERU5UKSkgewogICAgICAg
ICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIG5leHQoKTsKQEAgLTc5Myw4
ICs3OTQsOCBAQCB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBi
b29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBjbGFzcwogICAgIC8vIElmIHdlIGtub3cgYWJv
dXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5LCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgaW5mbyBhbmQg
c2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgogICAgIGlmIChjb25z
dCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5V
c2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VQb3MpIDog
MCkgewogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBhIHN0cmljdCBjb250ZXh0LCB0aGUgY2FjaGVk
IGZ1bmN0aW9uIGluZm8gbXVzdCBzYXkgaXQgd2FzIHN0cmljdCB0b28uCi0gICAgICAgIEFTU0VS
VCghc3RyaWN0TW9kZSgpIHx8IGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOwotICAgICAgICBib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwg
Y2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CisgICAgICAgIEFTU0VSVCghc3RyaWN0TW9kZSgpIHx8
IChjYWNoZWRJbmZvLT5zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWcpKTsKKyAgICAgICAgYm9k
eSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCks
IGNhY2hlZEluZm8tPnNjb3BlRmxhZ3MpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+cmVzdG9yZUZ1bmN0aW9uSW5mbyhjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElmRmFsc2Uo
cG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5m
bykpOwpAQCAtODU0LDYgKzg1NSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRlY2xhCiAgICAgZmFp
bElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTmVlZHNOYW1lLCB0cnVlPihjb250
ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3Ms
IGJvZHlTdGFydExpbmUpKSk7CiAgICAgZmFpbElmRmFsc2UobmFtZSk7CiAgICAgZmFpbElmRmFs
c2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSkpOworICAgIGlmICgqbmFtZSA9PSBtX2ds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKKyAgICAgICAgY3VycmVudFNjb3Bl
KCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVGdW5jRGVjbFN0YXRlbWVudChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBuYW1lLCBib2R5
LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUs
IG1fbGFzdExpbmUpOwogfQogCkBAIC0xNDAxLDEzICsxNDA0LDE4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJp
bWFyeUV4cHJlCiAgICAgfQogICAgIGNhc2UgVEhJU1RPS0VOOiB7CiAgICAgICAgIG5leHQoKTsK
KyAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNUaGlzRmxhZyk7CiAgICAgICAg
IHJldHVybiBjb250ZXh0LnRoaXNFeHByKG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCkpOwogICAg
IH0KICAgICBjYXNlIElERU5UOiB7CiAgICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsK
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsK
ICAgICAgICAgbmV4dCgpOwotICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRl
bnQsIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOworICAgICAg
ICBpZiAobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCkKKyAgICAg
ICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhVc2VzRXZhbEZsYWcpOworICAgICAgICBl
bHNlIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQp
CisgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc0FyZ3VtZW50c0ZsYWcp
OworICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQpOwogICAgICAgICBt
X2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJl
c29sdmUobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgaWRlbnQsIHN0YXJ0KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA5Yjc2MjQyZDRkOTMyY2FkYWJm
ZmMyMTEzZDRiOThlZDM2OTFmN2E5Li43NTEzZDFmMTFmZDQ4OTU4MjhhZjhjYWViZTgwYWRhMTVi
NWY1N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTEzMCwzMCAr
MTMwLDE5IEBAIHN0cnVjdCBTY29wZUxhYmVsSW5mbyB7CiB9OwogCiBzdHJ1Y3QgU2NvcGUgewot
ICAgIFNjb3BlKGNvbnN0IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0Z1bmN0aW9u
LCBib29sIHN0cmljdE1vZGUpCisgICAgU2NvcGUoY29uc3QgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3MpCiAgICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCi0gICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQotICAgICAgICAsIG1f
dXNlc0V2YWwoZmFsc2UpCi0gICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZhbHNlKQot
ICAgICAgICAsIG1fYWxsb3dzTmV3RGVjbHModHJ1ZSkKLSAgICAgICAgLCBtX3N0cmljdE1vZGUo
c3RyaWN0TW9kZSkKLSAgICAgICAgLCBtX2lzRnVuY3Rpb24oaXNGdW5jdGlvbikKLSAgICAgICAg
LCBtX2lzRnVuY3Rpb25Cb3VuZGFyeShmYWxzZSkKKyAgICAgICAgLCBtX3Njb3BlRmxhZ3Moc2Nv
cGVGbGFncykKICAgICAgICAgLCBtX2lzVmFsaWRTdHJpY3RNb2RlKHRydWUpCiAgICAgICAgICwg
bV9sb29wRGVwdGgoMCkKICAgICAgICAgLCBtX3N3aXRjaERlcHRoKDApCiAgICAgeworICAgICAg
ICBBU1NFUlQoIShzY29wZUZsYWdzICYgfkFsbFNjb3BlTW9kZUZsYWdzKSk7CiAgICAgfQogCiAg
ICAgU2NvcGUoY29uc3QgU2NvcGUmIHJocykKICAgICAgICAgOiBtX2dsb2JhbERhdGEocmhzLm1f
Z2xvYmFsRGF0YSkKLSAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0Fy
Z3VtZW50cykKLSAgICAgICAgLCBtX3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQotICAgICAgICAs
IG1fbmVlZHNGdWxsQWN0aXZhdGlvbihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQotICAgICAg
ICAsIG1fYWxsb3dzTmV3RGVjbHMocmhzLm1fYWxsb3dzTmV3RGVjbHMpCi0gICAgICAgICwgbV9z
dHJpY3RNb2RlKHJocy5tX3N0cmljdE1vZGUpCi0gICAgICAgICwgbV9pc0Z1bmN0aW9uKHJocy5t
X2lzRnVuY3Rpb24pCi0gICAgICAgICwgbV9pc0Z1bmN0aW9uQm91bmRhcnkocmhzLm1faXNGdW5j
dGlvbkJvdW5kYXJ5KQorICAgICAgICAsIG1fc2NvcGVGbGFncyhyaHMubV9zY29wZUZsYWdzKQog
ICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUocmhzLm1faXNWYWxpZFN0cmljdE1vZGUpCiAg
ICAgICAgICwgbV9sb29wRGVwdGgocmhzLm1fbG9vcERlcHRoKQogICAgICAgICAsIG1fc3dpdGNo
RGVwdGgocmhzLm1fc3dpdGNoRGVwdGgpCkBAIC0xNjgsNiArMTU3LDIyIEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIFNjb3BlRmxhZ3Mgc2Nv
cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFnczsgfQorICAgIEFMV0FZU19JTkxJ
TkUgU2NvcGVGbGFncyBtb2RlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBB
bGxTY29wZU1vZGVGbGFnczsgfQorICAgIEFMV0FZU19JTkxJTkUgU2NvcGVGbGFncyB1c2VzRmxh
Z3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBBbGxTY29wZVVzZXNGbGFnczsgfQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGbGFncyhTY29wZUZsYWdzIHNjb3BlRmxhZ3MpIHsg
bV9zY29wZUZsYWdzIHw9IHNjb3BlRmxhZ3M7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBu
ZWVkc0Z1bGxBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgKFVzZXNF
dmFsRmxhZyB8IFVzZXNXaXRoRmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIHN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJp
Y3RNb2RlRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaGFkb3dzQXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU2hhZG93c0FyZ3VtZW50c0ZsYWc7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVG
bGFncyAmIEZ1bmN0aW9uTW9kZUZsYWc7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNCbG9j
a1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgQmxvY2tTY29wZUZsYWc7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvbkJvdW5kYXJ5KCkgY29uc3QgeyByZXR1
cm4gaXNGdW5jdGlvbigpICYmICFpc0Jsb2NrU2NvcGUoKTsgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIGFsbG93c05ld0RlY2xzKCkgY29uc3QgeyByZXR1cm4gIWlzQmxvY2tTY29wZSgpOyB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWRTdHJpY3RNb2RlOyB9CisKICAgICB2b2lkIHN0YXJ0U3dpdGNoKCkgeyBt
X3N3aXRjaERlcHRoKys7IH0KICAgICB2b2lkIGVuZFN3aXRjaCgpIHsgbV9zd2l0Y2hEZXB0aC0t
OyB9CiAgICAgdm9pZCBzdGFydExvb3AoKSB7IG1fbG9vcERlcHRoKys7IH0KQEAgLTIwMSwxNCAr
MjA2LDYgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRJc0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1faXNGdW5jdGlvbiA9IHRydWU7
Ci0gICAgICAgIG1faXNGdW5jdGlvbkJvdW5kYXJ5ID0gdHJ1ZTsKLSAgICB9Ci0gICAgYm9vbCBp
c0Z1bmN0aW9uKCkgeyByZXR1cm4gbV9pc0Z1bmN0aW9uOyB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9u
Qm91bmRhcnkoKSB7IHJldHVybiBtX2lzRnVuY3Rpb25Cb3VuZGFyeTsgfQotCiAgICAgYm9vbCBk
ZWNsYXJlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewogICAgICAgICBi
b29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFs
ICE9ICppZGVudCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyAhPSAq
aWRlbnQ7CkBAIC0yMTksMzUgKzIxNiwyOCBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgdm9pZCBk
ZWNsYXJlV3JpdGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9zdHJpY3RNb2RlKTsKKyAgICAgICAgQVNTRVJUKHN0cmljdE1vZGUoKSk7CiAgICAgICAg
IG1fd3JpdHRlblZhcmlhYmxlcy5hZGQoaWRlbnQtPmltcGwoKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBwcmV2ZW50TmV3RGVjbHMoKSB7IG1fYWxsb3dzTmV3RGVjbHMgPSBmYWxzZTsgfQotICAgIGJv
b2wgYWxsb3dzTmV3RGVjbHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c05ld0RlY2xzOyB9Ci0K
ICAgICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAg
ewogICAgICAgICBib29sIGlzQXJndW1lbnRzID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50OwogICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0g
bV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnVzdHJpbmcoKS5pbXBsKCkpLnNlY29uZCAm
JiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmICFpc0FyZ3Vt
ZW50czsKICAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUg
JiYgaXNWYWxpZFN0cmljdE1vZGU7CiAgICAgICAgIGlmIChpc0FyZ3VtZW50cykKLSAgICAgICAg
ICAgIG1fc2hhZG93c0FyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBzZXRGbGFncyhTaGFk
b3dzQXJndW1lbnRzRmxhZyk7CiAgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0TW9kZTsKICAg
ICB9CiAKLSAgICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBib29s
IGlzRXZhbCkKKyAgICB2b2lkIHVzZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQog
ICAgIHsKLSAgICAgICAgbV91c2VzRXZhbCB8PSBpc0V2YWw7CiAgICAgICAgIG1fdXNlZFZhcmlh
Ymxlcy5hZGQoaWRlbnQtPnVzdHJpbmcoKS5pbXBsKCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0
TmVlZHNGdWxsQWN0aXZhdGlvbigpIHsgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gdHJ1ZTsgfQot
CiAgICAgYm9vbCBjb2xsZWN0RnJlZVZhcmlhYmxlcyhTY29wZSogbmVzdGVkU2NvcGUsIGJvb2wg
c2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMpCiAgICAgewotICAgICAgICBpZiAobmVzdGVkU2Nv
cGUtPm1fdXNlc0V2YWwpCi0gICAgICAgICAgICBtX3VzZXNFdmFsID0gdHJ1ZTsKKyAgICAgICAg
c2V0RmxhZ3MobmVzdGVkU2NvcGUtPnVzZXNGbGFncygpKTsKICAgICAgICAgSWRlbnRpZmllclNl
dDo6aXRlcmF0b3IgZW5kID0gbmVzdGVkU2NvcGUtPm1fdXNlZFZhcmlhYmxlcy5lbmQoKTsKICAg
ICAgICAgZm9yIChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBwdHIgPSBuZXN0ZWRTY29wZS0+bV91
c2VkVmFyaWFibGVzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CiAgICAgICAgICAgICBp
ZiAobmVzdGVkU2NvcGUtPm1fZGVjbGFyZWRWYXJpYWJsZXMuY29udGFpbnMoKnB0cikpCkBAIC0y
NzksNyArMjY5LDcgQEAgc3RydWN0IFNjb3BlIHsKIAogICAgIHZvaWQgZ2V0Q2FwdHVyZWRWYXJp
YWJsZXMoSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMpCiAgICAgewotICAgICAgICBp
ZiAobV9uZWVkc0Z1bGxBY3RpdmF0aW9uIHx8IG1fdXNlc0V2YWwpIHsKKyAgICAgICAgaWYgKG5l
ZWRzRnVsbEFjdGl2YXRpb24oKSkgewogICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXMuc3dh
cChtX2RlY2xhcmVkVmFyaWFibGVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjg5LDExICsyNzksNiBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICAgICAgY2FwdHVyZWRW
YXJpYWJsZXMuYWRkKCpwdHIpOwogICAgICAgICB9CiAgICAgfQotICAgIHZvaWQgc2V0U3RyaWN0
TW9kZSgpIHsgbV9zdHJpY3RNb2RlID0gdHJ1ZTsgfQotICAgIGJvb2wgc3RyaWN0TW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaWN0TW9kZTsgfQotICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWRTdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCBzaGFkb3dz
QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzQXJndW1lbnRzOyB9Ci0KICAgICB2
b2lkIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKGNvbnN0IElkZW50aWZpZXJTZXQmIGNh
cHR1cmVkVmFyaWFibGVzLCBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4mIHZlY3RvcikKICAg
ICB7CiAgICAgICAgIElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IGNhcHR1cmVkVmFyaWFi
bGVzLmVuZCgpOwpAQCAtMzA3LDIwICsyOTIsMTYgQEAgc3RydWN0IFNjb3BlIHsKIAogICAgIHZv
aWQgc2F2ZUZ1bmN0aW9uSW5mbyhTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogaW5mbykKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOwotICAgICAgICBpbmZvLT51c2VzRXZhbCA9
IG1fdXNlc0V2YWw7Ci0gICAgICAgIGluZm8tPnN0cmljdE1vZGUgPSBtX3N0cmljdE1vZGU7Ci0g
ICAgICAgIGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb24gPSBtX25lZWRzRnVsbEFjdGl2YXRpb247
CisgICAgICAgIEFTU0VSVChpc0Z1bmN0aW9uKCkpOworICAgICAgICBpbmZvLT5zY29wZUZsYWdz
ID0gbV9zY29wZUZsYWdzOwogICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3Rvciht
X3dyaXR0ZW5WYXJpYWJsZXMsIGluZm8tPndyaXR0ZW5WYXJpYWJsZXMpOwogICAgICAgICBjb3B5
Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVzZWRWYXJp
YWJsZXMpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZUZ1bmN0aW9uSW5mbyhjb25zdCBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbSogaW5mbykKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2lzRnVu
Y3Rpb24pOwotICAgICAgICBtX3VzZXNFdmFsID0gaW5mby0+dXNlc0V2YWw7Ci0gICAgICAgIG1f
c3RyaWN0TW9kZSA9IGluZm8tPnN0cmljdE1vZGU7Ci0gICAgICAgIG1fbmVlZHNGdWxsQWN0aXZh
dGlvbiA9IGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb247CisgICAgICAgIEFTU0VSVChpc0Z1bmN0
aW9uKCkpOworICAgICAgICBtX3Njb3BlRmxhZ3MgfD0gaW5mby0+c2NvcGVGbGFnczsKICAgICAg
ICAgdW5zaWduZWQgc2l6ZSA9IGluZm8tPnVzZWRWYXJpYWJsZXMuc2l6ZSgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAgbV91c2VkVmFy
aWFibGVzLmFkZChpbmZvLT51c2VkVmFyaWFibGVzW2ldKTsKQEAgLTMzMSwxMyArMzEyLDcgQEAg
c3RydWN0IFNjb3BlIHsKIAogcHJpdmF0ZToKICAgICBjb25zdCBKU0dsb2JhbERhdGEqIG1fZ2xv
YmFsRGF0YTsKLSAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7Ci0gICAgYm9vbCBtX3Vz
ZXNFdmFsIDogMTsKLSAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbiA6IDE7Ci0gICAgYm9v
bCBtX2FsbG93c05ld0RlY2xzIDogMTsKLSAgICBib29sIG1fc3RyaWN0TW9kZSA6IDE7Ci0gICAg
Ym9vbCBtX2lzRnVuY3Rpb24gOiAxOwotICAgIGJvb2wgbV9pc0Z1bmN0aW9uQm91bmRhcnkgOiAx
OworICAgIFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOwogICAgIGJvb2wgbV9pc1ZhbGlkU3RyaWN0
TW9kZSA6IDE7CiAgICAgaW50IG1fbG9vcERlcHRoOwogICAgIGludCBtX3N3aXRjaERlcHRoOwpA
QCAtNDI3LDIwICs0MDIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgUGFyc2VyKiBtX3BhcnNlcjsK
ICAgICB9OwogCi0gICAgU2NvcGVSZWYgY3VycmVudFNjb3BlKCkKKyAgICBBTFdBWVNfSU5MSU5F
IFNjb3BlUmVmIGN1cnJlbnRTY29wZSgpCiAgICAgewogICAgICAgICByZXR1cm4gU2NvcGVSZWYo
Jm1fc2NvcGVTdGFjaywgbV9zY29wZVN0YWNrLnNpemUoKSAtIDEpOwogICAgIH0KICAgICAKLSAg
ICBTY29wZVJlZiBwdXNoU2NvcGUoKQorICAgIFNjb3BlUmVmIHB1c2hTY29wZShTY29wZUZsYWdz
IHNjb3BlRmxhZ3MpCiAgICAgewotICAgICAgICBib29sIGlzRnVuY3Rpb24gPSBmYWxzZTsKLSAg
ICAgICAgYm9vbCBpc1N0cmljdCA9IGZhbHNlOwotICAgICAgICBpZiAoIW1fc2NvcGVTdGFjay5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlzU3RyaWN0ID0gbV9zY29wZVN0YWNrLmxhc3QoKS5z
dHJpY3RNb2RlKCk7Ci0gICAgICAgICAgICBpc0Z1bmN0aW9uID0gbV9zY29wZVN0YWNrLmxhc3Qo
KS5pc0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChT
Y29wZShtX2dsb2JhbERhdGEsIGlzRnVuY3Rpb24sIGlzU3RyaWN0KSk7CisgICAgICAgIG1fc2Nv
cGVTdGFjay5hcHBlbmQoU2NvcGUobV9nbG9iYWxEYXRhLCBzY29wZUZsYWdzKSk7CiAgICAgICAg
IHJldHVybiBjdXJyZW50U2NvcGUoKTsKICAgICB9CiAgICAgCkBAIC00OTIsNyArNDYxLDcgQEAg
cHJpdmF0ZToKICAgICBVU3RyaW5nIHBhcnNlSW5uZXIoKTsKIAogICAgIHZvaWQgZGlkRmluaXNo
UGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNr
czo6VmFyU3RhY2s+KiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6
RnVuY3Rpb25TdGFjaz4qLCBTY29wZUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQsIGludCwgSWRlbnRpZmllclNldCYpOwogCiAgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgdHlw
ZSBvZiBlcnJvciB0byByZXBvcnQuCkBAIC04MjMsMTQgKzc5MiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IFVTdHJpbmcobXNnKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBzdGFydExvb3AoKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydExvb3AoKTsgfQotICAgIHZvaWQg
ZW5kTG9vcCgpIHsgY3VycmVudFNjb3BlKCktPmVuZExvb3AoKTsgfQotICAgIHZvaWQgc3RhcnRT
d2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydFN3aXRjaCgpOyB9Ci0gICAgdm9pZCBlbmRT
d2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRTd2l0Y2goKTsgfQotICAgIHZvaWQgc2V0U3Ry
aWN0TW9kZSgpIHsgY3VycmVudFNjb3BlKCktPnNldFN0cmljdE1vZGUoKTsgfQotICAgIGJvb2wg
c3RyaWN0TW9kZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5zdHJpY3RNb2RlKCk7IH0KLSAg
ICBib29sIGlzVmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmlzVmFs
aWRTdHJpY3RNb2RlKCk7IH0KLSAgICBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRp
ZmllciogaWRlbnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlUGFyYW1ldGVyKGlk
ZW50KTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzdGFydExvb3AoKSB7IGN1cnJlbnRTY29w
ZSgpLT5zdGFydExvb3AoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBlbmRMb29wKCkgeyBj
dXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHN0YXJ0
U3dpdGNoKCkgeyBjdXJyZW50U2NvcGUoKS0+c3RhcnRTd2l0Y2goKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBlbmRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRTd2l0Y2goKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3Bl
KCktPnN0cmljdE1vZGUoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkU3RyaWN0
TW9kZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5pc1ZhbGlkU3RyaWN0TW9kZSgpOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBib29sIGRlY2xhcmVQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciog
aWRlbnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlUGFyYW1ldGVyKGlkZW50KTsg
fQogICAgIGJvb2wgYnJlYWtJc1ZhbGlkKCkKICAgICB7CiAgICAgICAgIFNjb3BlUmVmIGN1cnJl
bnQgPSBjdXJyZW50U2NvcGUoKTsKQEAgLTk0OSw3ICs5MTcsNyBAQCBwcml2YXRlOgogICAgIFBh
cnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiBtX3ZhckRlY2xhcmF0
aW9uczsKICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2s+KiBtX2Z1bmNEZWNsYXJhdGlvbnM7CiAgICAgSWRlbnRpZmllclNldCBtX2NhcHR1cmVkVmFy
aWFibGVzOwotICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIFNjb3BlRmxhZ3MgbV9z
Y29wZUZsYWdzOwogICAgIGludCBtX251bUNvbnN0YW50czsKICAgICAKICAgICBzdHJ1Y3QgRGVw
dGhNYW5hZ2VyIHsKQEAgLTEwMTAsNyArOTc4LDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/
ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICptX3NvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Nj
b3BlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0
YW50cyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9s
YXN0TGluZSk7CiAgICAgfSBlbHNlIGlmIChsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmgKaW5kZXggMzY2MjM2N2EwMWI3MDlkOWNkNGVjM2Q0N2QyZjNkYjkzZTVlMjRhNy4uYWQ3YTc1
OWNlZmQ2MmYyYzI4Y2I3ZWIyOTk4YmI4ZDg2NjcxNmY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaApAQCAtNjEs
OSArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgaW50IGNsb3NlQnJhY2VMaW5lOwogICAgIGlu
dCBjbG9zZUJyYWNlUG9zOwotICAgIGJvb2wgdXNlc0V2YWw7Ci0gICAgYm9vbCBzdHJpY3RNb2Rl
OwotICAgIGJvb2wgbmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBzY29w
ZUZsYWdzOwogICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiB1c2VkVmFyaWFibGVzOwog
ICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiB3cml0dGVuVmFyaWFibGVzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggYzJjOTM3
NTZkZTAzYWJjYTI5NWRlMTNhYzhlZTEzODFjN2Q0MGM0OC4uMmFjYjUwOTdkOGJkMDRmNGQ0OWNm
OWM2ZWFmMDZlNzc4MzgwZDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
eW50YXhDaGVja2VyLmgKQEAgLTIyMCw3ICsyMjAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBl
bmRTdGF0ZW1lbnQoaW50LCBpbnQpIHsgfQogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElkZW50aWZp
ZXIqLCBib29sKSB7IH0KICAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoaW50LCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQotICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFja0RlcHRo
LCBpbnQgZXhwciwgaW50LCBpbnQsIGludCwgYm9vbCkKICAgICB7CiAgICAgICAgIGlmICghbV90
b3BCaW5hcnlFeHByKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAppbmRleCAyMTdhODUyNTIxNDIzYzA0YzZiYWYzOTQ1OThlZjJkNDA0N2M0NzI5Li5lYTQw
NDQ3ZTQ1ZTcyN2U0YWJmZTM1NGQzM2NjYjEzOWFjZThhYTJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIEpTT2Jq
ZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlCiAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgICAgIH0KLSAgICAgICAgcmVjb3JkUGFyc2Uo
ZXZhbE5vZGUtPmZlYXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBl
dmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsKKyAgICAgICAgcmVjb3Jk
UGFyc2UoZXZhbE5vZGUtPnNjb3BlRmxhZ3MoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFi
bGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwogICAgICAg
ICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2Rl
LT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgICAgIApAQCAtMzUzLDcgKzM1Myw3IEBAIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjCiAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgICAgIH0KLSAgICAgICAgcmVjb3JkUGFyc2Uo
cHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgpKTsKKyAg
ICAgICAgcmVjb3JkUGFyc2UocHJvZ3JhbU5vZGUtPnNjb3BlRmxhZ3MoKSwgcHJvZ3JhbU5vZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSwgcHJvZ3JhbU5v
ZGUtPmxhc3RMaW5lKCkpOwogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogICAgIApAQCAtNTA4LDcgKzUw
OCw3IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6
cHJvZHVjZUNvZGVCbG9ja0ZvcihTY29wZUNoYWluCiAgICAgaWYgKG1fZm9yY2VVc2VzQXJndW1l
bnRzKQogICAgICAgICBib2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7CiAgICAgYm9keS0+ZmluaXNo
UGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7Ci0gICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVh
dHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOworICAgIHJlY29yZFBhcnNlKGJvZHktPnNjb3BlRmxhZ3MoKSwgYm9k
eS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5l
KCkpOwogCiAgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7CiAgICAgQVNTRVJU
KChjb21waWxhdGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0Zvcihz
cGVjaWFsaXphdGlvbktpbmQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAppbmRleCAzMDZmZWNmOTFhMzRjYWIzMWE2M2I3ZjQ0Mjg1ODE1NjRlYmNkNDA4Li4w
OGIzOWZjZjBiNGM5MzAyOTA0MzdiY2E5MDE5N2NjOTUzMDBlZmU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC0yNzEsMTQgKzI3MSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJv
b2wgaXNJblN0cmljdENvbnRleHQpCiAgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQogICAgICAgICAg
ICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAgICAgICAsIG1fZmVhdHVyZXMoaXNJblN0cmlj
dENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCisgICAgICAgICAgICAsIG1fc2NvcGVG
bGFncyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGbGFnIDogTm9TY29wZUZsYWdzKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBpc0luU3RyaWN0Q29udGV4dCkKICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkK
ICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICAgICAgICAgLCBtX2ZlYXR1cmVz
KGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiAwKQorICAgICAgICAgICAg
LCBtX3Njb3BlRmxhZ3MoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmxhZyA6IE5vU2Nv
cGVGbGFncykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTI5MiwxMCArMjkyLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dExpbmU7IH0KICAgICAgICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGlu
ZTsgfQogCi0gICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
ICYgRXZhbEZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9mZWF0dXJlcyAmIEFyZ3VtZW50c0ZlYXR1cmU7IH0KLSAgICAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIHx8IG1f
ZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSk7IH0K
LSAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYg
U3RyaWN0TW9kZUZlYXR1cmU7IH0KKyAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNFdmFsRmxhZzsgfQorICAgICAgICBib29sIHVzZXNBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBVc2VzQXJndW1lbnRzRmxhZzsg
fQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2Fw
dHVyZWRWYXJpYWJsZXMgfHwgbV9zY29wZUZsYWdzICYgKFVzZXNFdmFsRmxhZyB8IFVzZXNXaXRo
RmxhZyB8IFVzZXNDYXRjaEZsYWcpOyB9CisgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgU3RyaWN0TW9kZUZsYWc7IH0KIAogICAgICAgICB2
b2lkIHVubGlua0NhbGxzKCk7CiAgICAgICAgIApAQCAtMzExLDE2ICszMTEsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcmVjb3JkUGFyc2Uo
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmly
c3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIHZvaWQgcmVjb3JkUGFyc2UoU2NvcGVGbGFn
cyBzY29wZUZsYWdzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBp
bnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJl
czsKKyAgICAgICAgICAgIG1fc2NvcGVGbGFncyA9IHNjb3BlRmxhZ3M7CiAgICAgICAgICAgICBt
X2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAgICAg
ICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKICAgICAgICAgICAgIG1fbGFzdExpbmUgPSBsYXN0
TGluZTsKICAgICAgICAgfQogCiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7Ci0gICAgICAg
IENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgICAgICBTY29wZUZsYWdzIG1fc2NvcGVGbGFn
czsKICAgICAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBpbnQgbV9m
aXJzdExpbmU7CiAgICAgICAgIGludCBtX2xhc3RMaW5lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131015</attachid>
            <date>2012-03-09 02:04:07 -0800</date>
            <delta_ts>2012-03-09 04:07:03 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-79112-20120309110405.patch</filename>
            <type>text/plain</type>
            <size>56194</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
Y2NkMzMxYTI1OTRhMDc2MDJmZGUzYzA3MmM4NjJiNmQ5MjBlNmI0Li5hNDM4MjU1Mzk4OTA2ZWIz
ODgzNGZjOWJjZGZiMWY1MWRlNjRlZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTYgQEAKKzIwMTItMDMtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIGNvZGUgZmVhdHVyZSBhbmFseXNpcyBpbiB0aGUgcGFyc2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTExMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgY29tbWl0
IHJlZmFjdG9ycyB0aGUgcGFyc2VyIHRvIG1vcmUgdW5pZm9ybWx5IHByb3BhZ2F0ZSBmbGFnCisg
ICAgICAgIGJpdHMgZG93biBhbmQgdXAgdGhlIHBhcnNlIHByb2Nlc3MsIGFzIHRoZSBwYXJzZXIg
ZGVzY2VuZHMgYW5kCisgICAgICAgIHJldHVybnMgaW50byBuZXN0ZWQgYmxvY2tzLiAgU29tZSBm
bGFncyBnZXQgcGFzc2VkIHRvd24gdG8KKyAgICAgICAgc3Vic2NvcGVzLCBzb21lIGFwcGx5IHRv
IHNwZWNpZmljIHNjb3BlcyBvbmx5LCBhbmQgc29tZSBnZXQKKyAgICAgICAgdW5pb25lZCB1cCBh
ZnRlciBwYXJzaW5nIHN1YnNjb3Blcy4KKworICAgICAgICBUaGUgZ29hbCBpcyB0byBldmVudHVh
bGx5IGJlIHZlcnkgcHJlY2lzZSB3aXRoIHNjb3BpbmcKKyAgICAgICAgaW5mb3JtYXRpb24sIG9u
Y2Ugd2UgaGF2ZSBibG9jayBzY29wZXM6IG9uZSBibG9jayBzY29wZSBtaWdodCB1c2UKKyAgICAg
ICAgYGV2YWwnLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBlbWlzc2lvbiBvZiBhIHN5bWJvbCB0
YWJsZSB3aXRoaW4KKyAgICAgICAgdGhhdCBibG9jayBhbmQgY29udGFpbmluZyBibG9ja3MsIHdo
ZXJlYXMgYW5vdGhlciBibG9jayBpbiB0aGUKKyAgICAgICAgc2FtZSBmdW5jdGlvbiBtaWdodCBu
b3QsIGFsbG93aW5nIHVzIHRvIG5vdCBlbWl0IGEgc3ltYm9sIHRhYmxlLgorCisgICAgICAgICog
cGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlRmxhZ3MpOiBSZW5hbWUgZnJvbSBD
b2RlRmVhdHVyZXMuCisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6YWRkU2NvcGVGbGFncyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2NvcGVGbGFncyk6IE5ldyBhY2Nlc3NvcnMgZm9yIG1f
c2NvcGVGbGFncy4KKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjppc1N0cmljdE1vZGUpOgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnVzZXNFdmFsKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
Ojp1c2VzQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRVc2VzQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjp1c2VzVGhpcyk6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRzQWN0aXZhdGlvbik6IFJlZmFjdG9yIHRoZXNlIGFjY2Vz
c29ycyB0bworICAgICAgICBvcGVyYXRlIG9uIHRoZSBtX3Njb3BlRmxhZ3MgbWVtYmVyLgorICAg
ICAgICAoSlNDOjpTY29wZU5vZGU6OnNvdXJjZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6
c291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJRCk6IFNodWZmbGUg
dGhlc2UgZGVmaW5pdGlvbnMgYXJvdW5kOyBubworICAgICAgICBzZW1hbnRpYyBjaGFuZ2UuCisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6U2NvcGVOb2RlKQorICAgICAgICAoSlNDOjpQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUpCisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpFdmFsTm9kZSkKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6IEhhdmUgdGhl
c2UgY29uc3RydWN0b3JzCisgICAgICAgIHRha2UgYSBTY29wZUZsYWdzIGFzIGFuIGFyZ3VtZW50
LCBpbnN0ZWFkIG9mIGEgYm9vbCBpblN0cmljdENvbnRleHQuCisKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9kZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1O
b2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZSk6IEFkYXB0IGNvbnN0cnVjdG9ycyB0byBjaGFuZ2UuCisKKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RCdWlsZGVyKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6U2Nv
cGU6OlNjb3BlKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKEFTVEJ1aWxkZXIpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZSk6IERvbid0IHRyYWNr
IHNjb3BlCisgICAgICAgIGZlYXR1cmVzIGhlcmUuICBJbnN0ZWFkIHJlbHkgb24gdGhlIGJhc2Ug
UGFyc2VyIG1lY2hhbmlzbSB0byB0cmFjaworICAgICAgICBmZWF0dXJlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2RlSW5mby5oIChOb2RlSW5mbywgTm9kZURlY2xhcmF0aW9uSW5mbyk6ICJTY29w
ZUZsYWdzIi4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2Nv
cGU6OlNjb3BlKTogTWFuYWdlIHNjb3BlIHRocm91Z2ggZmxhZ3MsIG5vdAorICAgICAgICBiaXQt
Ym9vbGVhbnMuICBUaGlzIGxldHMgdXMgdW5pZm9ybWx5IHByb3BhZ2F0ZSB0aGVtIHVwIGFuZCBk
b3duLgorICAgICAgICAoSlNDOjpTY29wZTo6ZGVjbGFyZVdyaXRlKToKKyAgICAgICAgKEpTQzo6
U2NvcGU6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTY29wZTo6dXNlVmFyaWFi
bGUpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAg
ICAoSlNDOjpTY29wZTo6Z2V0Q2FwdHVyZWRWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6c2F2ZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpyZXN0b3JlRnVuY3Rp
b25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOiBBZGFwdCB0byB1c2Ug
c2NvcGUgZmxhZ3MgYW5kIHRoZWlyCisgICAgICAgIGFjY2Vzc29ycyBpbnN0ZWFkIG9mIGJpdC1i
b29sZWFucy4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQ
YXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OmRp
ZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNlRWxlbWVudHMpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6IEhvaXN0IHNvbWUgb2YgdGhlIGZs
YWcgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIHRoZSAiY29udGV4dCIgKEFTVEJ1aWxkZXIgb3Ig
U3ludGF4Q2hlY2tlcikgYW5kIHRvIGhlcmUuCisgICAgICAgIERvZXMgbm90IHNlZW0gdG8gaGF2
ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRl
ckNhY2hlSXRlbS5oIChTb3VyY2VQcm92aWRlckNhY2hlSXRlbSk6CisgICAgICAgIENhY2hlIHRo
ZSBzY29wZWZsYWdzLgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6IFJlbW92ZSBl
dmFsQ291bnQoKSBkZWNsLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6dXNlc0V2YWwpOgor
ICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp1c2VzQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6aXNTdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6IFNjb3Bl
RmxhZ3MsIG5vdCBmZWF0dXJlcy4KKwogMjAxMi0wMy0wOCAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIE1TVkMgYWZ0ZXIgcjEx
MDI2NgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCAwZWI2
MGNmODk5MmZmMDkyNDk5MTM0NDMyOGJmOTMxYTFiZjczNmU3Li5hMTczY2MxMGZjYzc2ZTA3ZjBm
YTk4NjZjNDNiNGI2MzVjMDdkM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaApAQCAtNzcsNyArNzcsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAg
ICAgICwgbV9zY29wZShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fZXZhbENvdW50KDApCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTExOSw3ICsxMTgsNiBAQCBwdWJsaWM6CiAKICAgICBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyRGVjbGFyYXRpb25zKCkg
eyByZXR1cm4gbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9uczsgfQogICAgIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNEZWNsYXJhdGlvbnMoKSB7
IHJldHVybiBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9uczsgfQotICAgIGludCBmZWF0dXJlcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9mZWF0dXJlczsgfQogICAgIGludCBudW1Db25zdGFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fbnVtQ29uc3RhbnRzOyB9CiAKICAgICB2b2lk
IGFwcGVuZFRvQ29tbWEoQ29tbWFOb2RlKiBjb21tYU5vZGUsIEV4cHJlc3Npb25Ob2RlKiBleHBy
KSB7IGNvbW1hTm9kZS0+YXBwZW5kKGV4cHIpOyB9CkBAIC0xNTIsMTcgKzE1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgVm9pZE5vZGUobGluZU51bWJlciwgZXhwcik7CiAgICAgfQotICAgIEV4cHJlc3Npb25O
b2RlKiB0aGlzRXhwcihpbnQgbGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHVzZXNUaGlzKCk7
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05vZGUobGluZU51bWJlcik7
Ci0gICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGludCBsaW5lTnVtYmVy
LCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KQotICAgIHsKLSAgICAgICAgaWYg
KG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKLSAgICAg
ICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBSZXNvbHZlTm9kZShsaW5lTnVtYmVyLCAqaWRlbnQsIHN0YXJ0KTsKLSAgICB9CisgICAgRXhw
cmVzc2lvbk5vZGUqIHRoaXNFeHByKGludCBsaW5lTnVtYmVyKSB7IHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgVGhpc05vZGUobGluZU51bWJlcik7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlUmVzb2x2ZShpbnQgbGluZU51bWJlciwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBz
dGFydCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJlc29sdmVOb2RlKGxpbmVOdW1iZXIs
ICppZGVudCwgc3RhcnQpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVy
YWwoaW50IGxpbmVOdW1iZXIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRl
cmFsTm9kZShsaW5lTnVtYmVyKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RM
aXRlcmFsKGludCBsaW5lTnVtYmVyLCBQcm9wZXJ0eUxpc3ROb2RlKiBwcm9wZXJ0aWVzKSB7IHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgT2JqZWN0TGl0ZXJhbE5vZGUobGluZU51bWJlciwgcHJv
cGVydGllcyk7IH0KIApAQCAtMjYzLDkgKzI1Miw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJv
ZHkoaW50IGxpbmVOdW1iZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorICAgIEZ1bmN0aW9uQm9k
eU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShpbnQgbGluZU51bWJlciwgU2NvcGVGbGFncyBzY29w
ZUZsYWdzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZSht
X2dsb2JhbERhdGEsIGxpbmVOdW1iZXIsIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVy
biBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzY29w
ZUZsYWdzKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9kZSog
Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShpbnQgbGluZU51bWJlciwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFt
cywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJh
Y2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCkBAIC0zMTIsOCArMzAx
LDYgQEAgcHVibGljOgogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50
KGludCBsaW5lTnVtYmVyLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQg
Y2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSkKICAgICB7
CiAgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRGVj
bE5vZGUobGluZU51bWJlciwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lv
bihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpLCBwYXJhbWV0ZXJz
KTsKLSAgICAgICAgaWYgKCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzKQotICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBtX3Njb3BlLm1f
ZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoZGVjbC0+Ym9keSgpKTsKICAgICAgICAgYm9k
eS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIGRl
Y2w7CkBAIC00MjYsOCArNDEzLDYgQEAgcHVibGljOgogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZVRyeVN0YXRlbWVudChpbnQgbGluZU51bWJlciwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1l
bnROb2RlKiBmaW5hbGx5QmxvY2ssIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsK
ICAgICAgICAgVHJ5Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRyeU5vZGUobGlu
ZU51bWJlciwgdHJ5QmxvY2ssICppZGVudCwgY2F0Y2hCbG9jaywgZmluYWxseUJsb2NrKTsKLSAg
ICAgICAgaWYgKGNhdGNoQmxvY2spCi0gICAgICAgICAgICB1c2VzQ2F0Y2goKTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CkBAIC00NjMsNyArNDQ4LDYgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlV2l0aFN0YXRlbWVudChpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIHVzZXNXaXRoKCk7CiAgICAgICAg
IFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgV2l0aE5vZGUobGluZU51bWJl
ciwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUw
Niw4ICs0OTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFZhcihjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgaW50IGF0dHJzKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKLSAgICAgICAgICAgIHVzZXNBcmd1bWVu
dHMoKTsKICAgICAgICAgbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoaWRlbnQsIGF0dHJzKSk7CiAgICAgfQogCkBAIC01MjIsOCArNTA0LDYgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbW1hTm9kZShsaW5l
TnVtYmVyLCBsaXN0LCBpbml0KTsKICAgICB9CiAKLSAgICBpbnQgZXZhbENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9ldmFsQ291bnQ7IH0KLQogICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lv
bkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1cnJlbnQsIGlu
dCBleHByU3RhcnQsIGludCBsaHMsIGludCByaHMsIGJvb2wgaGFzQXNzaWdubWVudHMpCiAgICAg
ewogICAgICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwpAQCAtNjEwLDEzICs1OTAsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgU2NvcGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICAg
ICAgOiBtX3ZhckRlY2xhcmF0aW9ucyhuZXcgKGdsb2JhbERhdGEpIFBhcnNlckFyZW5hRGF0YTxE
ZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KQogICAgICAgICAgICAgLCBtX2Z1bmNEZWNsYXJh
dGlvbnMobmV3IChnbG9iYWxEYXRhKSBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6
OkZ1bmN0aW9uU3RhY2s+KQotICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKDApCiAgICAgICAgICAg
ICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBQYXJz
ZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogbV92YXJEZWNsYXJhdGlv
bnM7CiAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKLSAgICAgICAgaW50IG1fZmVhdHVyZXM7CiAgICAg
ICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogCkBAIC02MjYsMTUgKzYwNCw2IEBAIHBy
aXZhdGU6CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7IG1fc2NvcGUubV9udW1D
b25zdGFudHMrKzsgfQotICAgIHZvaWQgdXNlc1RoaXMoKSB7IG1fc2NvcGUubV9mZWF0dXJlcyB8
PSBUaGlzRmVhdHVyZTsgfQotICAgIHZvaWQgdXNlc0NhdGNoKCkgeyBtX3Njb3BlLm1fZmVhdHVy
ZXMgfD0gQ2F0Y2hGZWF0dXJlOyB9Ci0gICAgdm9pZCB1c2VzQXJndW1lbnRzKCkgeyBtX3Njb3Bl
Lm1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQotICAgIHZvaWQgdXNlc1dpdGgoKSB7
IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBXaXRoRmVhdHVyZTsgfQotICAgIHZvaWQgdXNlc0V2YWwo
KSAKLSAgICB7Ci0gICAgICAgIG1fZXZhbENvdW50Kys7Ci0gICAgICAgIG1fc2NvcGUubV9mZWF0
dXJlcyB8PSBFdmFsRmVhdHVyZTsKLSAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51
bWJlcihpbnQgbGluZU51bWJlciwgZG91YmxlIGQpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUobGluZU51bWJlciwgZCk7CkBAIC02NDcsNyArNjE2
LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QXNzaWdubWVudEluZm8sIDEwPiBtX2Fzc2lnbm1l
bnRJbmZvU3RhY2s7CiAgICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+LCAxMD4gbV9iaW5hcnlPcGVy
YXRvclN0YWNrOwogICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiwgMTA+IG1fdW5hcnlUb2tlblN0
YWNrOwotICAgIGludCBtX2V2YWxDb3VudDsKIH07CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWls
ZGVyOjptYWtlVHlwZU9mTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIp
CkBAIC03OTcsMTAgKzc2NSw4IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVu
Y3Rpb25DYWxsTm9kZShpbnQgbGluZU51bWJlciwgRXhwcmVzc2lvbk5vZGUqCiAgICAgaWYgKGZ1
bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIGlmIChpZGVudGlm
aWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCkgewotICAgICAgICAgICAg
dXNlc0V2YWwoKTsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsKQogICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBF
dmFsRnVuY3Rpb25DYWxsTm9kZShsaW5lTnVtYmVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFy
dCwgZW5kIC0gZGl2b3QpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFs
RGF0YSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobGluZU51bWJlciwgaWRlbnRpZmllciwgYXJn
cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9CiAgICAgaWYgKGZ1
bmMtPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVJbmZvLmgKaW5kZXggNDg1M2FlYzQyODk1YTQxMzVmNjVmNGZkZjA0MzlhNzA5MDZlOGQw
NC4uZTBkNGZmZWM0ZjYxMGNiNWI5NGIyZTY5MDdjNmUzNTIxNTYxNTUzNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlSW5mby5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZUluZm8uaApAQCAtMjYsNyArMjYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgTm9kZUluZm8gewogICAg
ICAgICBUIG1fbm9kZTsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAg
IFNjb3BlRmxhZ3MgbV9zY29wZUZsYWdzOwogICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAg
ICAgfTsKIApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVCBtX25v
ZGU7CiAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+
KiBtX3ZhckRlY2xhcmF0aW9uczsKICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpGdW5jdGlvblN0YWNrPiogbV9mdW5jRGVjbGFyYXRpb25zOwotICAgICAgICBDb2Rl
RmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICAgICAgU2NvcGVGbGFncyBtX3Njb3BlRmxhZ3M7CiAg
ICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAppbmRleCBjMzJlNGM3M2EyNGViZWIyMzNjZDVlMDFmZmZkNjNh
NDg2ODVjODg2Li43NWM4NDhiY2U3YTZjYWNlNTBlYTNlNmZhZDdkMDEwM2U2Zjg2NDIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtNzUsMTkgKzc1LDE5IEBAIFN0
YXRlbWVudE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdAogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NvcGVOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorU2NvcGVOb2Rl
OjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU2Nv
cGVGbGFncyBzY29wZUZsYWdzKQogICAgIDogU3RhdGVtZW50Tm9kZShsaW5lTnVtYmVyKQogICAg
ICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCi0gICAgLCBtX2ZlYXR1cmVzKGlu
U3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogTm9GZWF0dXJlcykKKyAgICAsIG1f
c2NvcGVGbGFncyhzY29wZUZsYWdzKQogICAgICwgbV9udW1Db25zdGFudHMoMCkKICAgICAsIG1f
c3RhdGVtZW50cygwKQogewogfQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
KiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitTY29wZU5vZGU6OlNjb3BlTm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBT
Y29wZUZsYWdzIHNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTdGF0ZW1lbnRO
b2RlKGxpbmVOdW1iZXIpCiAgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkK
LSAgICAsIG1fZmVhdHVyZXMoZmVhdHVyZXMpCisgICAgLCBtX3Njb3BlRmxhZ3Moc2NvcGVGbGFn
cykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0
YW50cykKICAgICAsIG1fc3RhdGVtZW50cyhjaGlsZHJlbikKQEAgLTEwNywxNCArMTA3LDE0IEBA
IFN0YXRlbWVudE5vZGUqIFNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW50KCkgY29uc3QKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxlbWVudHMqIGNoaWxk
cmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRp
ZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2RlKGds
b2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFBy
b2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5l
TnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxhZ3MsIGludCBudW1D
b25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNl
LCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNjb3Bl
RmxhZ3MsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJv
Z3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVy
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25T
dGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpCitQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNjb3Bl
RmxhZ3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3Jh
bU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBm
ZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBu
ZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNr
LCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBzY29wZUZsYWdzLCBudW1D
b25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwog
ICAgIG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpAQCAtMTI1LDE0ICsxMjUsMTQgQEAgUGFz
c1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGludCBsaW5lTnUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEV2YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBFdmFsTm9k
ZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291
cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sq
IGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQot
ICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxpbmVOdW1iZXIsIHNvdXJjZSwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTY29wZUZsYWdzIHNjb3BlRmxh
Z3MsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51
bWJlciwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNjb3BlRmxhZ3MsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxFdmFs
Tm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5l
TnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCitQYXNzUmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNjb3Bl
RmxhZ3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RXZhbE5v
ZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVz
LCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9k
ZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywg
Y2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgc2NvcGVGbGFncywgbnVtQ29uc3RhbnRzKTsKIAog
ICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2Fy
ZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTE0OSwxMyArMTQ5LDEzIEBAIEZ1bmN0aW9uUGFyYW1ldGVy
czo6RnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyKQogICAg
ICAgICBhcHBlbmQocGFyYW1ldGVyLT5pZGVudCgpKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9k
eU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGlu
ZU51bWJlciwgYm9vbCBpblN0cmljdENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0
YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KQoraW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6
OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJl
ciwgU2NvcGVGbGFncyBzY29wZUZsYWdzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGxp
bmVOdW1iZXIsIHNjb3BlRmxhZ3MpCiB7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpG
dW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIs
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc291cmNlQ29k
ZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0
dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9k
eU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cykKKyAg
ICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBzb3VyY2VDb2RlLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNjb3BlRmxhZ3MsIG51
bUNvbnN0YW50cykKIHsKIH0KIApAQCAtMTcyLDE0ICsxNzIsMTQgQEAgdm9pZCBGdW5jdGlvbkJv
ZHlOb2RlOjpmaW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBwYXJh
bWV0ZXJzLAogICAgIG1faWRlbnQgPSBpZGVudDsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVu
Y3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVO
dW1iZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25C
b2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIs
IFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKIHsKLSAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5v
ZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4g
bmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgbGluZU51bWJlciwgc2NvcGVGbGFncyk7
CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNz
UmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlm
aWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
U2NvcGVGbGFncyBzY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxG
dW5jdGlvbkJvZHlOb2RlPiBub2RlID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwg
bGluZU51bWJlciwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGxp
bmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxl
cywgc291cmNlQ29kZSwgc2NvcGVGbGFncywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChu
b2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxh
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCAyNmM4MjlkYTZmNWI4
ZTFhMWNlNTI1MDQyZGQ4ZTc0YjNiYzMwYjE3Li5mNzUyYjkxZTk1ZGQ5NDFiMWNmOThiMTIwNjUz
MWVkZjk0ZThjNzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC00Nywx
OSArNDcsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBDb2RlRmVhdHVyZXM7
Ci0KLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgTm9GZWF0dXJlcyA9IDA7Ci0gICAgY29uc3QgQ29k
ZUZlYXR1cmVzIEV2YWxGZWF0dXJlID0gMSA8PCAwOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBB
cmd1bWVudHNGZWF0dXJlID0gMSA8PCAxOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBXaXRoRmVh
dHVyZSA9IDEgPDwgMjsKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQ2F0Y2hGZWF0dXJlID0gMSA8
PCAzOwotICAgIGNvbnN0IENvZGVGZWF0dXJlcyBUaGlzRmVhdHVyZSA9IDEgPDwgNDsKLSAgICBj
b25zdCBDb2RlRmVhdHVyZXMgU3RyaWN0TW9kZUZlYXR1cmUgPSAxIDw8IDU7Ci0gICAgY29uc3Qg
Q29kZUZlYXR1cmVzIFNoYWRvd3NBcmd1bWVudHNGZWF0dXJlID0gMSA8PCA2OworICAgIHR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgU2NvcGVGbGFnczsKKworICAgIGNvbnN0IFNjb3BlRmxhZ3MgTm9T
Y29wZUZsYWdzID0gMDsKKworICAgIC8vIFNvbWUgc2NvcGUgZmxhZ3MgcHJvcGFnYXRlIGRvd24g
dGhlIHBhcnNlIHRyZWUgZnJvbSBwYXJlbnQgc2NvcGVzLCBsaWtlCisgICAgLy8gc3RyaWN0IG1v
ZGUuIFRoZXkgYXJlIG1vZGFsIHRvIGFuIGVudGlyZSBzZXQgb2YgbmVzdGVkIHNjb3Blcy4KKyAg
ICBjb25zdCBTY29wZUZsYWdzIFN0cmljdE1vZGVGbGFnID0gMSA8PCAwOworICAgIGNvbnN0IFNj
b3BlRmxhZ3MgRnVuY3Rpb25Nb2RlRmxhZyA9IDEgPDwgMTsKKyAgICBjb25zdCBTY29wZUZsYWdz
IEFsbFNjb3BlTW9kZUZsYWdzID0gU3RyaWN0TW9kZUZsYWcgfCBGdW5jdGlvbk1vZGVGbGFnOwor
CisgICAgLy8gU29tZSBzY29wZSBmbGFncyByZWZlciBvbmx5IHRvIGEgc3BlY2lmaWMgc2NvcGUs
IGFuZCBkb24ndCBwcm9wYWdhdGUgZG93bgorICAgIC8vIG9yIHVwLgorICAgIGNvbnN0IFNjb3Bl
RmxhZ3MgQmxvY2tTY29wZUZsYWcgPSAxIDw8IDQ7CisgICAgY29uc3QgU2NvcGVGbGFncyBBbGxT
Y29wZUtpbmRGbGFncyA9IEJsb2NrU2NvcGVGbGFnOworCisgICAgLy8gT3RoZXIgZmxhZ3MgcmVm
bGVjdCB1c2VzIHdpdGhpbiBuZXN0ZWQgc2NvcGVzLCBhbmQgc28gcHJvcGFnYXRlIHVwCisgICAg
Ly8gZnJvbSB0aGUgbGVhdmVzLgorICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc0V2YWxGbGFnID0g
MSA8PCA4OworICAgIGNvbnN0IFNjb3BlRmxhZ3MgVXNlc0FyZ3VtZW50c0ZsYWcgPSAxIDw8IDk7
CisgICAgY29uc3QgU2NvcGVGbGFncyBVc2VzV2l0aEZsYWcgPSAxIDw8IDEwOworICAgIGNvbnN0
IFNjb3BlRmxhZ3MgVXNlc0NhdGNoRmxhZyA9IDEgPDwgMTE7CisgICAgY29uc3QgU2NvcGVGbGFn
cyBVc2VzVGhpc0ZsYWcgPSAxIDw8IDEyOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgU2hhZG93c0Fy
Z3VtZW50c0ZsYWcgPSAxIDw8IDEzOworICAgIGNvbnN0IFNjb3BlRmxhZ3MgQWxsU2NvcGVVc2Vz
RmxhZ3MgPSBVc2VzRXZhbEZsYWcgfCBVc2VzQXJndW1lbnRzRmxhZyB8IFVzZXNXaXRoRmxhZyB8
IFVzZXNDYXRjaEZsYWcgfCBVc2VzVGhpc0ZsYWcgfCBTaGFkb3dzQXJndW1lbnRzRmxhZzsKICAg
ICAKLSAgICBjb25zdCBDb2RlRmVhdHVyZXMgQWxsRmVhdHVyZXMgPSBFdmFsRmVhdHVyZSB8IEFy
Z3VtZW50c0ZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSB8IFRoaXNGZWF0dXJl
IHwgU3RyaWN0TW9kZUZlYXR1cmUgfCBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKLQogICAgIGVu
dW0gT3BlcmF0b3IgewogICAgICAgICBPcEVxdWFsLAogICAgICAgICBPcFBsdXNFcSwKQEAgLTEz
ODMsOCArMTM5NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xhcmF0
aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlv
blN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNjb3BlTm9k
ZShKU0dsb2JhbERhdGEqLCBpbnQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgU2Nv
cGVOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIENvZGVGZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEq
LCBpbnQsIFNjb3BlRmxhZ3MpOworICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50
LCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9u
U3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgU2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cyk7CiAK
ICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7CiAKQEAg
LTEzOTcsMjQgKzE0MDksMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2NhcHR1
cmVkVmFyaWFibGVzLmNsZWFyKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgICAgICBjb25zdCBV
U3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT51
cmwoKTsgfQotICAgICAgICBpbnRwdHJfdCBzb3VyY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLnByb3ZpZGVyKCktPmFzSUQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0RmVhdHVyZXMoQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzKSB7IG1fZmVhdHVyZXMgPSBmZWF0dXJlczsgfQotICAgICAgICBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMoKSB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0KLSAgICAgICAg
Ym9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsg
fQotICAgICAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiAobV9mZWF0dXJl
cyAmIEFyZ3VtZW50c0ZlYXR1cmUpICYmICEobV9mZWF0dXJlcyAmIFNoYWRvd3NBcmd1bWVudHNG
ZWF0dXJlKTsgfQotICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsgfQotICAgICAgICB2b2lkIHNldFVzZXNBcmd1
bWVudHMoKSB7IG1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQotICAgICAgICBib29s
IHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIFRoaXNGZWF0dXJlOyB9Ci0g
ICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwgV2l0aEZlYXR1cmUgfCBDYXRjaEZl
YXR1cmUpOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
KGhhc0NhcHR1cmVkVmFyaWFibGVzKCkpIHx8IChtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwg
V2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUpKTsgfQogICAgICAgICBib29sIGhhc0NhcHR1cmVk
VmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gISFtX2NhcHR1cmVkVmFyaWFibGVzLnNpemUoKTsg
fQogICAgICAgICBzaXplX3QgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgYm9vbCBjYXB0dXJlcyhjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlu
cyhpZGVudC5pbXBsKCkpOyB9CiAKKyAgICAgICAgdm9pZCBhZGRTY29wZUZsYWdzKFNjb3BlRmxh
Z3Mgc2NvcGVGbGFncykgeyBtX3Njb3BlRmxhZ3MgfD0gc2NvcGVGbGFnczsgfQorICAgICAgICBT
Y29wZUZsYWdzIHNjb3BlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3M7IH0KKwor
ICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAm
IFN0cmljdE1vZGVGbGFnOyB9CisgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVy
biBtX3Njb3BlRmxhZ3MgJiBVc2VzRXZhbEZsYWc7IH0KKyAgICAgICAgYm9vbCB1c2VzQXJndW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gKG1fc2NvcGVGbGFncyAmIFVzZXNBcmd1bWVudHNGbGFnKSAm
JiAhKG1fc2NvcGVGbGFncyAmIFNoYWRvd3NBcmd1bWVudHNGbGFnKTsgfQorICAgICAgICB2b2lk
IHNldFVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGVGbGFncyB8PSBVc2VzQXJndW1lbnRzRmxhZzsg
fQorICAgICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYg
VXNlc1RoaXNGbGFnOyB9CisKKyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhh
blZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIChVc2VzRXZhbEZsYWcg
fCBVc2VzV2l0aEZsYWcgfCBVc2VzQ2F0Y2hGbGFnKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0
aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgfHwgbmVlZHNB
Y3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKTsgfQorCisgICAgICAgIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgICAgIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCkt
PnVybCgpOyB9CisgICAgICAgIGludHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpOyB9CisKICAgICAgICAgVmFyU3RhY2smIHZhclN0YWNr
KCkgeyByZXR1cm4gbV92YXJTdGFjazsgfQogICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlv
blN0YWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrOyB9CiAKQEAgLTE0MzQsNyArMTQ0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQYXJzZXJBcmVuYSBtX2FyZW5hOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAgIFNjb3Bl
RmxhZ3MgbV9zY29wZUZsYWdzOwogICAgICAgICBTb3VyY2VDb2RlIG1fc291cmNlOwogICAgICAg
ICBWYXJTdGFjayBtX3ZhclN0YWNrOwogICAgICAgICBGdW5jdGlvblN0YWNrIG1fZnVuY3Rpb25T
dGFjazsKQEAgLTE0NDYsMTIgKzE0NjAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
UHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQs
IFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNl
dCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAg
IFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFj
ayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIFNj
b3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAg
ICB9OwpAQCAtMTQ1OSwxMiArMTQ3MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBF
dmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRz
KiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGludCwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIFNjb3BlRmxhZ3MsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgRXZhbE5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRXZhbE5vZGUoSlNH
bG9iYWxEYXRhKiwgaW50LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywgaW50IG51
bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDgxLDgg
KzE0OTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDog
cHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2Rl
KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgaW50LCBib29sIGlzU3RyaWN0TW9kZSk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEq
LCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOworICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0
YSosIGludCwgU2NvcGVGbGFncyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFy
U3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUm
LCBTY29wZUZsYWdzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0K
ICAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0
ZXJzLT5zaXplKCk7IH0KQEAgLTE0OTksOCArMTUxMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBpbnQsIGJvb2wg
aW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEq
LCBpbnQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIGludCwgU2NvcGVG
bGFncyk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgaW50LCBTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBj
b25zdCBTb3VyY2VDb2RlJiwgU2NvcGVGbGFncywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAg
ICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDQ4NTZhMDBhNzRh
Y2RlNmEyMTY5ZTJmZGU1ZDhmY2E1NmZlNGU2NmMuLmY1ODg0N2ZkMjQ2NzhmMmYyNTJjMzUxYjVk
OGQzYmU5ZTUzNWFiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAK
QEAgLTYyLDExICs2MiwxMiBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdQogICAgIG1fbGV4ZXIt
PnNldENvZGUoc291cmNlLCBtX2FyZW5hKTsKIAogICAgIG1fZnVuY3Rpb25DYWNoZSA9IHNvdXJj
ZS5wcm92aWRlcigpLT5jYWNoZSgpOwotICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7
Ci0gICAgaWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKLSAgICAgICAgc2Nv
cGUtPnNldElzRnVuY3Rpb24oKTsKKyAgICBTY29wZUZsYWdzIHNjb3BlRmxhZ3MgPSBOb1Njb3Bl
RmxhZ3M7CiAgICAgaWYgKHN0cmljdG5lc3MgPT0gSlNQYXJzZVN0cmljdCkKLSAgICAgICAgc2Nv
cGUtPnNldFN0cmljdE1vZGUoKTsKKyAgICAgICAgc2NvcGVGbGFncyB8PSBTdHJpY3RNb2RlRmxh
ZzsKKyAgICBpZiAocGFyc2VyTW9kZSA9PSBKU1BhcnNlRnVuY3Rpb25Db2RlKQorICAgICAgICBz
Y29wZUZsYWdzIHw9IEZ1bmN0aW9uTW9kZUZsYWc7CisgICAgU2NvcGVSZWYgc2NvcGUgPSBwdXNo
U2NvcGUoc2NvcGVGbGFncyk7CiAgICAgaWYgKHBhcmFtZXRlcnMpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMtPnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
c2NvcGUtPmRlY2xhcmVQYXJhbWV0ZXIoJnBhcmFtZXRlcnMtPmF0KGkpKTsKQEAgLTk2LDE2ICs5
NywxMiBAQCBVU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKCkKIAogICAgIElk
ZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgc2NvcGUtPmdldENhcHR1cmVkVmFy
aWFibGVzKGNhcHR1cmVkVmFyaWFibGVzKTsKLSAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBj
b250ZXh0LmZlYXR1cmVzKCk7Ci0gICAgaWYgKHNjb3BlLT5zdHJpY3RNb2RlKCkpCi0gICAgICAg
IGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0dXJlOwotICAgIGlmIChzY29wZS0+c2hhZG93c0Fy
Z3VtZW50cygpKQotICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsK
KyAgICBTY29wZUZsYWdzIHNjb3BlRmxhZ3MgPSBzY29wZS0+bW9kZUZsYWdzKCkgfCBzY29wZS0+
dXNlc0ZsYWdzKCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25DYWNoZVNpemUgPSBtX2Z1bmN0aW9u
Q2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVTaXplKCkgOiAwOwogICAgIGlmIChmdW5jdGlv
bkNhY2hlU2l6ZSAhPSBvbGRGdW5jdGlvbkNhY2hlU2l6ZSkKICAgICAgICAgbV9sZXhlci0+c291
cmNlUHJvdmlkZXIoKS0+bm90aWZ5Q2FjaGVTaXplQ2hhbmdlZChmdW5jdGlvbkNhY2hlU2l6ZSAt
IG9sZEZ1bmN0aW9uQ2FjaGVTaXplKTsKIAotICAgIGRpZEZpbmlzaFBhcnNpbmcoc291cmNlRWxl
bWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0aW9u
cygpLCBmZWF0dXJlcywKKyAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250
ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgc2NvcGVG
bGFncywKICAgICAgICAgICAgICAgICAgICAgIG1fbGFzdExpbmUsIGNvbnRleHQubnVtQ29uc3Rh
bnRzKCksIGNhcHR1cmVkVmFyaWFibGVzKTsKIAogICAgIHJldHVybiBwYXJzZUVycm9yOwpAQCAt
MTEzLDEzICsxMTAsMTMgQEAgVVN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcigp
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5cGU+
OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFyc2Vy
QXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFycykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlv
blN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgU2NvcGVGbGFncyBzY29wZUZsYWdz
LCBpbnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFycykKIHsKICAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHM7CiAgICAgbV92
YXJEZWNsYXJhdGlvbnMgPSB2YXJTdGFjazsKICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSBmdW5j
U3RhY2s7CiAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcy5zd2FwKGNhcHR1cmVkVmFycyk7Ci0gICAg
bV9mZWF0dXJlcyA9IGZlYXR1cmVzOworICAgIG1fc2NvcGVGbGFncyA9IHNjb3BlRmxhZ3M7CiAg
ICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3Rh
bnRzOwogfQpAQCAtMTQ3LDcgKzE0NCw3IEBAIHRlbXBsYXRlIDxTb3VyY2VFbGVtZW50c01vZGUg
bW9kZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8CiAgICAg
ICAgICAgICBpZiAoZGlyZWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgLy8gInVzZSBzdHJpY3Qi
IG11c3QgYmUgdGhlIGV4YWN0IGxpdGVyYWwgd2l0aG91dCBlc2NhcGUgc2VxdWVuY2VzIG9yIGxp
bmUgY29udGludWF0aW9uLgogICAgICAgICAgICAgICAgIGlmICghaGFzU2V0U3RyaWN0ICYmIGRp
cmVjdGl2ZUxpdGVyYWxMZW5ndGggPT0gbGVuZ3RoT2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1fZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dXNlU3RyaWN0SWRlbnRpZmllciA9PSAqZGlyZWN0aXZl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFN0cmljdE1vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFN0cmljdE1vZGVGbGFnKTsKICAgICAgICAg
ICAgICAgICAgICAgaGFzU2V0U3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZmFp
bElmRmFsc2UoaXNWYWxpZFN0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fbGV4
ZXItPnNldE9mZnNldChzdGFydE9mZnNldCk7CkBAIC0yNTUsNiArMjUyLDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VWYXJEZWNsYXJhdGkKICAgICAgICAgbmV4dCgpOwogICAgICAgICBib29sIGhhc0luaXRpYWxp
emVyID0gbWF0Y2goRVFVQUwpOwogICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVB
bmRNZXNzYWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFi
bGUgbmFtZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZS4iKTsKKyAgICAgICAgaWYg
KG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lKQorICAgICAg
ICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsKICAgICAg
ICAgY29udGV4dC5hZGRWYXIobmFtZSwgKGhhc0luaXRpYWxpemVyIHx8ICghbV9hbGxvd3NJbiAm
JiBtYXRjaChJTlRPS0VOKSkpID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyIDog
MCk7CiAgICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgewogICAgICAgICAgICAgaW50IHZhckRp
dm90ID0gdG9rZW5TdGFydCgpICsgMTsKQEAgLTI4OSw2ICsyODgsOCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUNvbnN0RGVjbAogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIg
PSBtYXRjaChFUVVBTCk7CiAgICAgICAgIGRlY2xhcmVWYXJpYWJsZShuYW1lKTsKKyAgICAgICAg
aWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lKQorICAg
ICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNBcmd1bWVudHNGbGFnKTsKICAg
ICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQg
fCAoaGFzSW5pdGlhbGl6ZXIgPyBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIgOiAw
KSk7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsKICAgICAgICAgaWYg
KGhhc0luaXRpYWxpemVyKSB7CkBAIC01MTEsNyArNTEyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVdpdGhTdGF0
ZW1lbnQKIHsKICAgICBBU1NFUlQobWF0Y2goV0lUSCkpOwogICAgIGZhaWxJZlRydWVXaXRoTWVz
c2FnZShzdHJpY3RNb2RlKCksICInd2l0aCcgc3RhdGVtZW50cyBhcmUgbm90IHZhbGlkIGluIHN0
cmljdCBtb2RlIik7Ci0gICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFjdGl2YXRpb24o
KTsKKyAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc1dpdGhGbGFnKTsKICAgICBpbnQg
c3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgbmV4dCgpOwogICAgIGNvbnN1bWVPckZhaWwo
T1BFTlBBUkVOKTsKQEAgLTUyNiw2ICs1MjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlV2l0aFN0YXRlbWVudAog
ICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51
c2VkKTsKICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgIAorICAgIGN1cnJlbnRTY29w
ZSgpLT5zZXRGbGFncyhVc2VzV2l0aEZsYWcpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVdp
dGhTdGF0ZW1lbnQobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgZXhwciwgc3RhdGVtZW50LCBz
dGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCkBAIC02MTQsMTUgKzYxNiwxNSBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlVHJ5U3RhdGVtZW50KAogICAgIGludCBsYXN0TGluZSA9IG1fbGFzdExpbmU7
CiAgICAgCiAgICAgaWYgKG1hdGNoKENBVENIKSkgewotICAgICAgICBjdXJyZW50U2NvcGUoKS0+
c2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0Rmxh
Z3MoVXNlc0NhdGNoRmxhZyk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgY29uc3VtZU9yRmFp
bChPUEVOUEFSRU4pOwogICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgIGlkZW50
ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgQXV0b1Bv
cFNjb3BlUmVmIGNhdGNoU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOworICAgICAgICBBdXRvUG9w
U2NvcGVSZWYgY2F0Y2hTY29wZSh0aGlzLCBwdXNoU2NvcGUoY3VycmVudFNjb3BlKCktPm1vZGVG
bGFncygpKSk7CiAgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2Uo
ZGVjbGFyZVZhcmlhYmxlKGlkZW50KSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQi
LCBpZGVudC0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgY2F0Y2hTY29wZS0+
cHJldmVudE5ld0RlY2xzKCk7CisgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhCbG9j
a1Njb3BlRmxhZyB8IFVzZXNDYXRjaEZsYWcpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NF
UEFSRU4pOwogICAgICAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UpOwogICAgICAgICBjYXRjaEJs
b2NrID0gcGFyc2VCbG9ja1N0YXRlbWVudChjb250ZXh0KTsKQEAgLTc1OSw3ICs3NjEsNyBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShU
cmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAg
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5sYXN0TGluZU51
bWJlcigpLCBzdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5j
dGlvbkJvZHkobV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKSwgY3VycmVudFNjb3BlKCktPm1vZGVG
bGFncygpKTsKICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVw
dGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVy
OjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8SlNHbG9iYWxEYXRh
Kj4obV9nbG9iYWxEYXRhKSwgbV9sZXhlci5nZXQoKSk7CkBAIC03NzAsOCArNzcyLDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUZ1bmN0aW9uQm8KIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1w
bGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIq
JiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywgVHJlZUZ1bmN0aW9u
Qm9keSYgYm9keSwgaW50JiBvcGVuQnJhY2VQb3MsIGludCYgY2xvc2VCcmFjZVBvcywgaW50JiBi
b2R5U3RhcnRMaW5lKQogewotICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMs
IHB1c2hTY29wZSgpKTsKLSAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CisgICAg
QXV0b1BvcFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUodGhpcywgcHVzaFNjb3BlKGN1cnJlbnRTY29w
ZSgpLT5tb2RlRmxhZ3MoKSB8IEZ1bmN0aW9uTW9kZUZsYWcpKTsKICAgICBpZiAobWF0Y2goSURF
TlQpKSB7CiAgICAgICAgIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgbmV4
dCgpOwpAQCAtNzkzLDggKzc5NCw4IEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyBy
ZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzCiAgICAgLy8g
SWYgd2Uga25vdyBhYm91dCB0aGlzIGZ1bmN0aW9uIGFscmVhZHksIHdlIGNhbiB1c2UgdGhlIGNh
Y2hlZCBpbmZvIGFuZCBza2lwIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24u
CiAgICAgaWYgKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBjYWNoZWRJbmZvID0gVHJl
ZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgPyBmaW5kQ2FjaGVkRnVuY3Rpb25JbmZvKG9w
ZW5CcmFjZVBvcykgOiAwKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRl
eHQsIHRoZSBjYWNoZWQgZnVuY3Rpb24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4K
LSAgICAgICAgQVNTRVJUKCFzdHJpY3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7
Ci0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShtX2xleGVyLT5sYXN0
TGluZU51bWJlcigpLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgQVNTRVJUKCFz
dHJpY3RNb2RlKCkgfHwgKGNhY2hlZEluZm8tPnNjb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxhZykp
OworICAgICAgICBib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobV9sZXhlci0+bGFz
dExpbmVOdW1iZXIoKSwgY2FjaGVkSW5mby0+c2NvcGVGbGFncyk7CiAgICAgICAgIAogICAgICAg
ICBmdW5jdGlvblNjb3BlLT5yZXN0b3JlRnVuY3Rpb25JbmZvKGNhY2hlZEluZm8pOwogICAgICAg
ICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNG
cmVlVmFyaWFibGVJbmZvKSk7CkBAIC04NTQsNiArODU1LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9u
RGVjbGEKICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25OZWVkc05h
bWUsIHRydWU+KGNvbnRleHQsIG5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZVBvcywg
Y2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSkpKTsKICAgICBmYWlsSWZGYWxzZShuYW1lKTsK
ICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZShuYW1lKSk7CisgICAgaWYg
KCpuYW1lID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQorICAgICAg
ICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc0FyZ3VtZW50c0ZsYWcpOwogICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVy
KCksIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywg
Ym9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSk7CiB9CiAKQEAgLTE0MDEsMTMgKzE0MDQsMTggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUKICAgICB9CiAgICAgY2FzZSBUSElTVE9LRU46IHsKICAg
ICAgICAgbmV4dCgpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0RmxhZ3MoVXNlc1RoaXNG
bGFnKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQudGhpc0V4cHIobV9sZXhlci0+bGFzdExpbmVO
dW1iZXIoKSk7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6IHsKICAgICAgICAgaW50IHN0YXJ0ID0g
dG9rZW5TdGFydCgpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4u
bV9kYXRhLmlkZW50OwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgpLT51
c2VWYXJpYWJsZShpZGVudCwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpp
ZGVudCk7CisgICAgICAgIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0g
KmlkZW50KQorICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldEZsYWdzKFVzZXNFdmFsRmxh
Zyk7CisgICAgICAgIGVsc2UgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1l
bnRzID09ICppZGVudCkKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5zZXRGbGFncyhVc2Vz
QXJndW1lbnRzRmxhZyk7CisgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVu
dCk7CiAgICAgICAgIG1fbGFzdElkZW50aWZpZXIgPSBpZGVudDsKICAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlUmVzb2x2ZShtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBpZGVudCwgc3Rh
cnQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDliNzYy
NDJkNGQ5MzJjYWRhYmZmYzIxMTNkNGI5OGVkMzY5MWY3YTkuLjc1MTNkMWYxMWZkNDg5NTgyOGFm
OGNhZWJlODBhZGExNWI1ZjU3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aApAQCAtMTMwLDMwICsxMzAsMTkgQEAgc3RydWN0IFNjb3BlTGFiZWxJbmZvIHsKIH07CiAKIHN0
cnVjdCBTY29wZSB7Ci0gICAgU2NvcGUoY29uc3QgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBi
b29sIGlzRnVuY3Rpb24sIGJvb2wgc3RyaWN0TW9kZSkKKyAgICBTY29wZShjb25zdCBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICAgICAgOiBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2Up
Ci0gICAgICAgICwgbV91c2VzRXZhbChmYWxzZSkKLSAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2
YXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyh0cnVlKQotICAgICAgICAs
IG1fc3RyaWN0TW9kZShzdHJpY3RNb2RlKQotICAgICAgICAsIG1faXNGdW5jdGlvbihpc0Z1bmN0
aW9uKQotICAgICAgICAsIG1faXNGdW5jdGlvbkJvdW5kYXJ5KGZhbHNlKQorICAgICAgICAsIG1f
c2NvcGVGbGFncyhzY29wZUZsYWdzKQogICAgICAgICAsIG1faXNWYWxpZFN0cmljdE1vZGUodHJ1
ZSkKICAgICAgICAgLCBtX2xvb3BEZXB0aCgwKQogICAgICAgICAsIG1fc3dpdGNoRGVwdGgoMCkK
ICAgICB7CisgICAgICAgIEFTU0VSVCghKHNjb3BlRmxhZ3MgJiB+QWxsU2NvcGVNb2RlRmxhZ3Mp
KTsKICAgICB9CiAKICAgICBTY29wZShjb25zdCBTY29wZSYgcmhzKQogICAgICAgICA6IG1fZ2xv
YmFsRGF0YShyaHMubV9nbG9iYWxEYXRhKQotICAgICAgICAsIG1fc2hhZG93c0FyZ3VtZW50cyhy
aHMubV9zaGFkb3dzQXJndW1lbnRzKQotICAgICAgICAsIG1fdXNlc0V2YWwocmhzLm1fdXNlc0V2
YWwpCi0gICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKHJocy5tX25lZWRzRnVsbEFjdGl2
YXRpb24pCi0gICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyhyaHMubV9hbGxvd3NOZXdEZWNscykK
LSAgICAgICAgLCBtX3N0cmljdE1vZGUocmhzLm1fc3RyaWN0TW9kZSkKLSAgICAgICAgLCBtX2lz
RnVuY3Rpb24ocmhzLm1faXNGdW5jdGlvbikKLSAgICAgICAgLCBtX2lzRnVuY3Rpb25Cb3VuZGFy
eShyaHMubV9pc0Z1bmN0aW9uQm91bmRhcnkpCisgICAgICAgICwgbV9zY29wZUZsYWdzKHJocy5t
X3Njb3BlRmxhZ3MpCiAgICAgICAgICwgbV9pc1ZhbGlkU3RyaWN0TW9kZShyaHMubV9pc1ZhbGlk
U3RyaWN0TW9kZSkKICAgICAgICAgLCBtX2xvb3BEZXB0aChyaHMubV9sb29wRGVwdGgpCiAgICAg
ICAgICwgbV9zd2l0Y2hEZXB0aChyaHMubV9zd2l0Y2hEZXB0aCkKQEAgLTE2OCw2ICsxNTcsMjIg
QEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUg
U2NvcGVGbGFncyBzY29wZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBTY29wZUZsYWdzIG1vZGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1f
c2NvcGVGbGFncyAmIEFsbFNjb3BlTW9kZUZsYWdzOyB9CisgICAgQUxXQVlTX0lOTElORSBTY29w
ZUZsYWdzIHVzZXNGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIEFsbFNjb3Bl
VXNlc0ZsYWdzOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZsYWdzKFNjb3BlRmxhZ3Mg
c2NvcGVGbGFncykgeyBtX3Njb3BlRmxhZ3MgfD0gc2NvcGVGbGFnczsgfQorCisgICAgQUxXQVlT
X0lOTElORSBib29sIG5lZWRzRnVsbEFjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njb3Bl
RmxhZ3MgJiAoVXNlc0V2YWxGbGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nv
cGVGbGFncyAmIFN0cmljdE1vZGVGbGFnOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNoYWRv
d3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTaGFkb3dzQXJndW1l
bnRzRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY29wZUZsYWdzICYgRnVuY3Rpb25Nb2RlRmxhZzsgfQorICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0Jsb2NrU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBCbG9j
a1Njb3BlRmxhZzsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uQm91bmRhcnko
KSBjb25zdCB7IHJldHVybiBpc0Z1bmN0aW9uKCkgJiYgIWlzQmxvY2tTY29wZSgpOyB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgYWxsb3dzTmV3RGVjbHMoKSBjb25zdCB7IHJldHVybiAhaXNC
bG9ja1Njb3BlKCk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkU3RyaWN0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KKwogICAgIHZvaWQgc3Rh
cnRTd2l0Y2goKSB7IG1fc3dpdGNoRGVwdGgrKzsgfQogICAgIHZvaWQgZW5kU3dpdGNoKCkgeyBt
X3N3aXRjaERlcHRoLS07IH0KICAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgbV9sb29wRGVwdGgrKzsg
fQpAQCAtMjAxLDE0ICsyMDYsNiBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICB2b2lkIHNldElzRnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgbV9pc0Z1
bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9pc0Z1bmN0aW9uQm91bmRhcnkgPSB0cnVlOwotICAg
IH0KLSAgICBib29sIGlzRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzRnVuY3Rpb247IH0KLSAgICBi
b29sIGlzRnVuY3Rpb25Cb3VuZGFyeSgpIHsgcmV0dXJuIG1faXNGdW5jdGlvbkJvdW5kYXJ5OyB9
Ci0KICAgICBib29sIGRlY2xhcmVWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKICAg
ICB7CiAgICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzICE9ICppZGVudDsKQEAgLTIxOSwzNSArMjE2LDI4IEBAIHN0cnVjdCBTY29wZSB7
CiAKICAgICB2b2lkIGRlY2xhcmVXcml0ZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3N0cmljdE1vZGUpOworICAgICAgICBBU1NFUlQoc3RyaWN0TW9k
ZSgpKTsKICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZChpZGVudC0+aW1wbCgpKTsKICAg
ICB9CiAKLSAgICB2b2lkIHByZXZlbnROZXdEZWNscygpIHsgbV9hbGxvd3NOZXdEZWNscyA9IGZh
bHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NOZXdEZWNscygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dz
TmV3RGVjbHM7IH0KLQogICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVy
KiBpZGVudCkKICAgICB7CiAgICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQ7CiAgICAgICAgIGJvb2wgaXNWYWxp
ZFN0cmljdE1vZGUgPSBtX2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmlt
cGwoKSkuc2Vjb25kICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRl
bnQgJiYgIWlzQXJndW1lbnRzOwogICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1Zh
bGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3RyaWN0TW9kZTsKICAgICAgICAgaWYgKGlzQXJndW1l
bnRzKQotICAgICAgICAgICAgbV9zaGFkb3dzQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
IHNldEZsYWdzKFNoYWRvd3NBcmd1bWVudHNGbGFnKTsKICAgICAgICAgcmV0dXJuIGlzVmFsaWRT
dHJpY3RNb2RlOwogICAgIH0KIAotICAgIHZvaWQgdXNlVmFyaWFibGUoY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIGJvb2wgaXNFdmFsKQorICAgIHZvaWQgdXNlVmFyaWFibGUoY29uc3QgSWRlbnRp
ZmllciogaWRlbnQpCiAgICAgewotICAgICAgICBtX3VzZXNFdmFsIHw9IGlzRXZhbDsKICAgICAg
ICAgbV91c2VkVmFyaWFibGVzLmFkZChpZGVudC0+dXN0cmluZygpLmltcGwoKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2YXRp
b24gPSB0cnVlOyB9Ci0KICAgICBib29sIGNvbGxlY3RGcmVlVmFyaWFibGVzKFNjb3BlKiBuZXN0
ZWRTY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykKICAgICB7Ci0gICAgICAg
IGlmIChuZXN0ZWRTY29wZS0+bV91c2VzRXZhbCkKLSAgICAgICAgICAgIG1fdXNlc0V2YWwgPSB0
cnVlOworICAgICAgICBzZXRGbGFncyhuZXN0ZWRTY29wZS0+dXNlc0ZsYWdzKCkpOwogICAgICAg
ICBJZGVudGlmaWVyU2V0OjppdGVyYXRvciBlbmQgPSBuZXN0ZWRTY29wZS0+bV91c2VkVmFyaWFi
bGVzLmVuZCgpOwogICAgICAgICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIHB0ciA9IG5l
c3RlZFNjb3BlLT5tX3VzZWRWYXJpYWJsZXMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsK
ICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV9kZWNsYXJlZFZhcmlhYmxlcy5jb250YWlu
cygqcHRyKSkKQEAgLTI3OSw3ICsyNjksNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgdm9pZCBn
ZXRDYXB0dXJlZFZhcmlhYmxlcyhJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcykKICAg
ICB7Ci0gICAgICAgIGlmIChtX25lZWRzRnVsbEFjdGl2YXRpb24gfHwgbV91c2VzRXZhbCkgewor
ICAgICAgICBpZiAobmVlZHNGdWxsQWN0aXZhdGlvbigpKSB7CiAgICAgICAgICAgICBjYXB0dXJl
ZFZhcmlhYmxlcy5zd2FwKG1fZGVjbGFyZWRWYXJpYWJsZXMpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0yODksMTEgKzI3OSw2IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgICAg
ICAgICBjYXB0dXJlZFZhcmlhYmxlcy5hZGQoKnB0cik7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
dm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBtX3N0cmljdE1vZGUgPSB0cnVlOyB9Ci0gICAgYm9vbCBz
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCBpc1Zh
bGlkU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KLSAg
ICBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NBcmd1bWVu
dHM7IH0KLQogICAgIHZvaWQgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IoY29uc3QgSWRl
bnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4g
PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgSWRlbnRpZmllclNldDo6aXRlcmF0b3IgZW5kID0g
Y2FwdHVyZWRWYXJpYWJsZXMuZW5kKCk7CkBAIC0zMDcsMjAgKzI5MiwxNiBAQCBzdHJ1Y3QgU2Nv
cGUgewogCiAgICAgdm9pZCBzYXZlRnVuY3Rpb25JbmZvKFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
KiBpbmZvKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXNGdW5jdGlvbik7Ci0gICAgICAgIGlu
Zm8tPnVzZXNFdmFsID0gbV91c2VzRXZhbDsKLSAgICAgICAgaW5mby0+c3RyaWN0TW9kZSA9IG1f
c3RyaWN0TW9kZTsKLSAgICAgICAgaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbiA9IG1fbmVlZHNG
dWxsQWN0aXZhdGlvbjsKKyAgICAgICAgQVNTRVJUKGlzRnVuY3Rpb24oKSk7CisgICAgICAgIGlu
Zm8tPnNjb3BlRmxhZ3MgPSBtX3Njb3BlRmxhZ3M7CiAgICAgICAgIGNvcHlDYXB0dXJlZFZhcmlh
Ymxlc1RvVmVjdG9yKG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7
CiAgICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1fdXNlZFZhcmlhYmxlcywg
aW5mby0+dXNlZFZhcmlhYmxlcyk7CiAgICAgfQogCiAgICAgdm9pZCByZXN0b3JlRnVuY3Rpb25J
bmZvKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBpbmZvKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1faXNGdW5jdGlvbik7Ci0gICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2VzRXZh
bDsKLSAgICAgICAgbV9zdHJpY3RNb2RlID0gaW5mby0+c3RyaWN0TW9kZTsKLSAgICAgICAgbV9u
ZWVkc0Z1bGxBY3RpdmF0aW9uID0gaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAgICAg
QVNTRVJUKGlzRnVuY3Rpb24oKSk7CisgICAgICAgIG1fc2NvcGVGbGFncyB8PSBpbmZvLT5zY29w
ZUZsYWdzOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxlcy5zaXpl
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
ICAgICBtX3VzZWRWYXJpYWJsZXMuYWRkKGluZm8tPnVzZWRWYXJpYWJsZXNbaV0pOwpAQCAtMzMx
LDEzICszMTIsNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiBwcml2YXRlOgogICAgIGNvbnN0IEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDogMTsK
LSAgICBib29sIG1fdXNlc0V2YWwgOiAxOwotICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0aW9u
IDogMTsKLSAgICBib29sIG1fYWxsb3dzTmV3RGVjbHMgOiAxOwotICAgIGJvb2wgbV9zdHJpY3RN
b2RlIDogMTsKLSAgICBib29sIG1faXNGdW5jdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2lzRnVuY3Rp
b25Cb3VuZGFyeSA6IDE7CisgICAgU2NvcGVGbGFncyBtX3Njb3BlRmxhZ3M7CiAgICAgYm9vbCBt
X2lzVmFsaWRTdHJpY3RNb2RlIDogMTsKICAgICBpbnQgbV9sb29wRGVwdGg7CiAgICAgaW50IG1f
c3dpdGNoRGVwdGg7CkBAIC00MjcsMjAgKzQwMiwxNCBAQCBwcml2YXRlOgogICAgICAgICBQYXJz
ZXIqIG1fcGFyc2VyOwogICAgIH07CiAKLSAgICBTY29wZVJlZiBjdXJyZW50U2NvcGUoKQorICAg
IEFMV0FZU19JTkxJTkUgU2NvcGVSZWYgY3VycmVudFNjb3BlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBTY29wZVJlZigmbV9zY29wZVN0YWNrLCBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMSk7CiAg
ICAgfQogICAgIAotICAgIFNjb3BlUmVmIHB1c2hTY29wZSgpCisgICAgU2NvcGVSZWYgcHVzaFNj
b3BlKFNjb3BlRmxhZ3Mgc2NvcGVGbGFncykKICAgICB7Ci0gICAgICAgIGJvb2wgaXNGdW5jdGlv
biA9IGZhbHNlOwotICAgICAgICBib29sIGlzU3RyaWN0ID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
bV9zY29wZVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaXNTdHJpY3QgPSBtX3Njb3Bl
U3RhY2subGFzdCgpLnN0cmljdE1vZGUoKTsKLSAgICAgICAgICAgIGlzRnVuY3Rpb24gPSBtX3Nj
b3BlU3RhY2subGFzdCgpLmlzRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICBtX3Njb3Bl
U3RhY2suYXBwZW5kKFNjb3BlKG1fZ2xvYmFsRGF0YSwgaXNGdW5jdGlvbiwgaXNTdHJpY3QpKTsK
KyAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZShtX2dsb2JhbERhdGEsIHNjb3BlRmxh
Z3MpKTsKICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY29wZSgpOwogICAgIH0KICAgICAKQEAgLTQ5
Miw3ICs0NjEsNyBAQCBwcml2YXRlOgogICAgIFVTdHJpbmcgcGFyc2VJbm5lcigpOwogCiAgICAg
dm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgUGFyc2VyQXJlbmFEYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIENvZGVG
ZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIFNjb3BlRmxhZ3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCwgaW50LCBJZGVudGlmaWVyU2V0Jik7CiAKICAgICAvLyBVc2VkIHRv
IGRldGVybWluZSB0eXBlIG9mIGVycm9yIHRvIHJlcG9ydC4KQEAgLTgyMywxNCArNzkyLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gVVN0cmluZyhtc2cpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHN0YXJ0TG9vcCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9vcCgp
OyB9Ci0gICAgdm9pZCBlbmRMb29wKCkgeyBjdXJyZW50U2NvcGUoKS0+ZW5kTG9vcCgpOyB9Ci0g
ICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPnN0YXJ0U3dpdGNoKCk7IH0K
LSAgICB2b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPmVuZFN3aXRjaCgpOyB9Ci0g
ICAgdm9pZCBzZXRTdHJpY3RNb2RlKCkgeyBjdXJyZW50U2NvcGUoKS0+c2V0U3RyaWN0TW9kZSgp
OyB9Ci0gICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPnN0cmlj
dE1vZGUoKTsgfQotICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50
U2NvcGUoKS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQotICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRl
cihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xh
cmVQYXJhbWV0ZXIoaWRlbnQpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHN0YXJ0TG9vcCgp
IHsgY3VycmVudFNjb3BlKCktPnN0YXJ0TG9vcCgpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGVuZExvb3AoKSB7IGN1cnJlbnRTY29wZSgpLT5lbmRMb29wKCk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc3RhcnRTd2l0Y2goKSB7IGN1cnJlbnRTY29wZSgpLT5zdGFydFN3aXRjaCgpOyB9
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGVuZFN3aXRjaCgpIHsgY3VycmVudFNjb3BlKCktPmVu
ZFN3aXRjaCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHN0cmljdE1vZGUoKSB7IHJldHVy
biBjdXJyZW50U2NvcGUoKS0+c3RyaWN0TW9kZSgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmlzVmFsaWRTdHJp
Y3RNb2RlKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihjb25z
dCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xhcmVQYXJh
bWV0ZXIoaWRlbnQpOyB9CiAgICAgYm9vbCBicmVha0lzVmFsaWQoKQogICAgIHsKICAgICAgICAg
U2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29wZSgpOwpAQCAtOTQ5LDcgKzkxNyw3IEBAIHBy
aXZhdGU6CiAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4q
IG1fdmFyRGVjbGFyYXRpb25zOwogICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKICAgICBJZGVudGlmaWVyU2V0
IG1fY2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAg
U2NvcGVGbGFncyBtX3Njb3BlRmxhZ3M7CiAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIAog
ICAgIHN0cnVjdCBEZXB0aE1hbmFnZXIgewpAQCAtMTAxMCw3ICs5NzgsNyBAQCBQYXNzUmVmUHRy
PFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iagogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5j
RGVjbGFyYXRpb25zID8gJm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcHR1cmVkVmFyaWFibGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc2NvcGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbnVtQ29uc3RhbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZp
cnN0TGluZSgpLCBtX2xhc3RMaW5lKTsKICAgICB9IGVsc2UgaWYgKGxleGljYWxHbG9iYWxPYmpl
Y3QpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0uaAppbmRleCAzNjYyMzY3YTAxYjcwOWQ5Y2Q0ZWMzZDQ3ZDJmM2RiOTNl
NWUyNGE3Li5hZDdhNzU5Y2VmZDYyZjJjMjhjYjdlYjI5OThiYjhkODY2NzE2Zjc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hl
SXRlbS5oCkBAIC02MSw5ICs2MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBpbnQgY2xvc2VCcmFj
ZUxpbmU7CiAgICAgaW50IGNsb3NlQnJhY2VQb3M7Ci0gICAgYm9vbCB1c2VzRXZhbDsKLSAgICBi
b29sIHN0cmljdE1vZGU7Ci0gICAgYm9vbCBuZWVkc0Z1bGxBY3RpdmF0aW9uOworICAgIHVuc2ln
bmVkIHNob3J0IHNjb3BlRmxhZ3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHVz
ZWRWYXJpYWJsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHdyaXR0ZW5WYXJp
YWJsZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAppbmRleCBjMmM5Mzc1NmRlMDNhYmNhMjk1ZGUxM2FjOGVlMTM4MWM3ZDQwYzQ4Li4yYWNiNTA5
N2Q4YmQwNGY0ZDQ5Y2Y5YzZlYWYwNmU3NzgzODBkMWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtMjIwLDcgKzIyMCw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFwcGVuZFN0YXRlbWVudChpbnQsIGludCkgeyB9CiAgICAgdm9pZCBhZGRWYXIo
Y29uc3QgSWRlbnRpZmllciosIGJvb2wpIHsgfQogICAgIGludCBjb21iaW5lQ29tbWFOb2Rlcyhp
bnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KICAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3Bl
cmFuZFN0YWNrRGVwdGgsIGludCBleHByLCBpbnQsIGludCwgaW50LCBib29sKQogICAgIHsKICAg
ICAgICAgaWYgKCFtX3RvcEJpbmFyeUV4cHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDIxN2E4NTI1MjE0MjNjMDRjNmJhZjM5NDU5OGVmMmQ0
MDQ3YzQ3MjkuLmVhNDA0NDdlNDVlNzI3ZTRhYmZlMzU0ZDMzY2NiMTM5YWNlOGFhMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0yMjEsNyAr
MjIxLDcgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGUKICAgICAgICAgICAgIEFTU0VSVChleGNl
cHRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICAgICAgfQotICAgICAg
ICByZWNvcmRQYXJzZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwor
ICAgICAgICByZWNvcmRQYXJzZShldmFsTm9kZS0+c2NvcGVGbGFncygpLCBldmFsTm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSwgZXZhbE5vZGUtPmxpbmVObygpLCBldmFsTm9kZS0+bGFzdExp
bmUoKSk7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgCkBAIC0zNTMsNyAr
MzUzLDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2MKICAgICAgICAgICAgIEFTU0VSVChleGNl
cHRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICAgICAgfQotICAgICAg
ICByZWNvcmRQYXJzZShwcm9ncmFtTm9kZS0+ZmVhdHVyZXMoKSwgcHJvZ3JhbU5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSwgcHJvZ3JhbU5vZGUtPmxh
c3RMaW5lKCkpOworICAgICAgICByZWNvcmRQYXJzZShwcm9ncmFtTm9kZS0+c2NvcGVGbGFncygp
LCBwcm9ncmFtTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVO
bygpLCBwcm9ncmFtTm9kZS0+bGFzdExpbmUoKSk7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAg
CkBAIC01MDgsNyArNTA4LDcgQEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rp
b25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW4KICAgICBpZiAobV9m
b3JjZVVzZXNBcmd1bWVudHMpCiAgICAgICAgIGJvZHktPnNldFVzZXNBcmd1bWVudHMoKTsKICAg
ICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKLSAgICByZWNvcmRQ
YXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5
LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CisgICAgcmVjb3JkUGFyc2UoYm9keS0+c2Nv
cGVGbGFncygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5LT5saW5lTm8oKSwg
Ym9keS0+bGFzdExpbmUoKSk7CiAKICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3Vs
dDsKICAgICBBU1NFUlQoKGNvbXBpbGF0aW9uS2luZCA9PSBGaXJzdENvbXBpbGF0aW9uKSA9PSAh
Y29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDMwNmZlY2Y5MWEzNGNhYjMxYTYzYjdmNDQyODU4
MTU2NGViY2Q0MDguLjA4YjM5ZmNmMGI0YzkzMDI5MDQzN2JjYTkwMTk3Y2M5NTMwMGVmZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTI3MSwxNCAr
MjcxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKICAgICAgICAgICAgIDogRXhlY3V0
YWJsZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElM
RUQpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAgICAgICAgICwgbV9mZWF0
dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKKyAgICAgICAg
ICAgICwgbV9zY29wZUZsYWdzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZsYWcgOiBO
b1Njb3BlRmxhZ3MpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFNjcmlwdEV4ZWN1
dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQogICAgICAgICAgICAgOiBFeGVj
dXRhYmxlQmFzZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNf
Tk9UX0NPTVBJTEVEKQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAgICAg
ICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDAp
CisgICAgICAgICAgICAsIG1fc2NvcGVGbGFncyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1v
ZGVGbGFnIDogTm9TY29wZUZsYWdzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjkyLDEw
ICsyOTIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7
IHJldHVybiBtX2ZpcnN0TGluZTsgfQogICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RMaW5lOyB9CiAKLSAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQotICAgICAgICBib29sIHVzZXNBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQotICAg
ICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgfHwgbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0
Y2hGZWF0dXJlKTsgfQotICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsgfQorICAgICAgICBib29sIHVzZXNFdmFs
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZUZsYWdzICYgVXNlc0V2YWxGbGFnOyB9CisgICAgICAg
IGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVGbGFncyAmIFVzZXNB
cmd1bWVudHNGbGFnOyB9CisgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyB8fCBtX3Njb3BlRmxhZ3MgJiAoVXNlc0V2YWxG
bGFnIHwgVXNlc1dpdGhGbGFnIHwgVXNlc0NhdGNoRmxhZyk7IH0KKyAgICAgICAgYm9vbCBpc1N0
cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlRmxhZ3MgJiBTdHJpY3RNb2RlRmxhZzsg
fQogCiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCkBAIC0zMTEsMTYgKzMx
MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJp
YWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICAgICAgdm9pZCByZWNvcmRQ
YXJzZShTY29wZUZsYWdzIHNjb3BlRmxhZ3MsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGlu
dCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAgICAgICAgbV9mZWF0
dXJlcyA9IGZlYXR1cmVzOworICAgICAgICAgICAgbV9zY29wZUZsYWdzID0gc2NvcGVGbGFnczsK
ICAgICAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxl
czsKICAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICAgICAgbV9s
YXN0TGluZSA9IGxhc3RMaW5lOwogICAgICAgICB9CiAKICAgICAgICAgU291cmNlQ29kZSBtX3Nv
dXJjZTsKLSAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAgIFNjb3BlRmxh
Z3MgbV9zY29wZUZsYWdzOwogICAgICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7CiAg
ICAgICAgIGludCBtX2ZpcnN0TGluZTsKICAgICAgICAgaW50IG1fbGFzdExpbmU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>