<?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>178051</bug_id>
          
          <creation_ts>2017-10-07 10:56:31 -0700</creation_ts>
          <short_desc>direct-construct-arity-mismatch.js can have GCs that take ~70ms if you force poly proto and disable generational GC</short_desc>
          <delta_ts>2017-10-07 20:16:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1357928</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 10:56:31 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357929</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:06:33 -0700</bug_when>
    <thetext>Looks like there are insane amounts of weak handles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357930</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:13:02 -0700</bug_when>
    <thetext>I bet it&apos;s the PrototypeMap.

Looking at it more, PrototypeMap is basically a memory leak. It won&apos;t show up as a leak because it&apos;s the kind of leak where all leaked objects are reachable. So, the leaks tool won&apos;t catch it. But it&apos;s a leak nonetheless.

It won&apos;t show up in GC logging, either. The GC maintains a really nice steady state of heap usage according to its own accounting.

But if you look at top -u, then dayum.  We&apos;re growing 10MB/sec in that test with forced poly proto.

The reason why it&apos;s a leak is that WeakGCMap is a leak.  We&apos;re sort of magically relying on things being removed from the map, but they never quite are, and so we just leak hella memory.

Another way that this shows up - and the way I caught it - is that the GC is spending all of its time in weak block processing.

Both problems are solved if PrototypeMap is wired directly into the GC. Because I need to do this to get tests to pass on my machine (currently this test times out), I&apos;ll just do it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357931</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:17:52 -0700</bug_when>
    <thetext>Oh man, we can make PrototypeMap so efficient.

First of all, it totally needs a MarkingConstraint. We want it to mark the structure if the keys are live. And we want it to remove anything if any part of the key is dead.

That will have the downstream effect of being super nice for inline caches, since it means structure stability if all objects with that structure die but if all of the code needed to spawn those structures again is still live.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357932</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:39:40 -0700</bug_when>
    <thetext>Wait - there&apos;s no way that WeakGCMap can be leaking in this case, since the keys are just raw pointers and the values are weak. Also, we prune during full collections.

So, I don&apos;t understand why we are leaking memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357935</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:46:31 -0700</bug_when>
    <thetext>I think I know why the GC sees so many weak references: https://bugs.webkit.org/show_bug.cgi?id=177909#c12

I still don&apos;t know why that causes a memory leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357937</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 11:49:59 -0700</bug_when>
    <thetext>So I guess the plan should be:

1) PrototypeMap probably doesn&apos;t need anything special to replace WeakGCMap::m_structures.  I was wrong to assume that.  It&apos;s probably correct the way that it is now, including the clearEmptyObjectStructureForPrototype thing.

2) PrototypeMap definitely needs to get rid of m_prototypes. That thing is nuts! It means that every single prototype instance created by poly proto will end up being stuffed into this ginormous WeakGCMap. For some dumb reason, this also leads to a memory leak - but the fundamental problem is that we should not be using a HashSet to answer if an object is a prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357941</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 12:17:32 -0700</bug_when>
    <thetext>Aha!  Now I understand the leak.  The leak was fixed by Saam, but then the fix was rolled out, because that fix assumed that pruning was a requirement (it&apos;s only an optimization).  Details: https://bugs.webkit.org/show_bug.cgi?id=177952#c16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357951</commentid>
    <comment_count>8</comment_count>
      <attachid>323100</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 13:18:47 -0700</bug_when>
    <thetext>Created attachment 323100
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357988</commentid>
    <comment_count>9</comment_count>
      <attachid>323100</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-07 18:06:30 -0700</bug_when>
    <thetext>Comment on attachment 323100
the patch

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

r=me

&gt; Source/JavaScriptCore/runtime/IndexingType.h:76
&gt; +static const IndexingType IndexingTypeMayBePrototype      = 0x80;

Nice I was thinking of exactly this. I agree this is much better than a large hashset

&gt; Source/JavaScriptCore/runtime/PrototypeKey.h:45
&gt; +        : m_inlineCapacity(1)

There’s no technical reason to do this, but I think it’s clearer to use UINT_MAC here. After initially reading it, I was worried that it was wrong, but then realized we had default initializers below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357992</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-07 18:14:22 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #7)
&gt; Aha!  Now I understand the leak.  The leak was fixed by Saam, but then the
&gt; fix was rolled out, because that fix assumed that pruning was a requirement
&gt; (it&apos;s only an optimization).  Details:
&gt; https://bugs.webkit.org/show_bug.cgi?id=177952#c16

Right. It might be worth us adding a comment to WeakGCMap stating this is how it works so people don’t make the same bad assumption that I made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357998</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 18:58:21 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #9)
&gt; Comment on attachment 323100 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323100&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IndexingType.h:76
&gt; &gt; +static const IndexingType IndexingTypeMayBePrototype      = 0x80;
&gt; 
&gt; Nice I was thinking of exactly this. I agree this is much better than a
&gt; large hashset
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/PrototypeKey.h:45
&gt; &gt; +        : m_inlineCapacity(1)
&gt; 
&gt; There’s no technical reason to do this, but I think it’s clearer to use
&gt; UINT_MAC here. 

You mean UINT_MAX?  Why is that clearer?

&gt; After initially reading it, I was worried that it was wrong,
&gt; but then realized we had default initializers below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357999</commentid>
    <comment_count>12</comment_count>
      <attachid>323113</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 18:59:32 -0700</bug_when>
    <thetext>Created attachment 323113
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358016</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-07 19:38:20 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #11)
&gt; (In reply to Saam Barati from comment #9)
&gt; &gt; Comment on attachment 323100 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=323100&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/IndexingType.h:76
&gt; &gt; &gt; +static const IndexingType IndexingTypeMayBePrototype      = 0x80;
&gt; &gt; 
&gt; &gt; Nice I was thinking of exactly this. I agree this is much better than a
&gt; &gt; large hashset
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/PrototypeKey.h:45
&gt; &gt; &gt; +        : m_inlineCapacity(1)
&gt; &gt; 
&gt; &gt; There’s no technical reason to do this, but I think it’s clearer to use
&gt; &gt; UINT_MAC here. 
&gt; 
&gt; You mean UINT_MAX?  Why is that clearer?
I think it’s more intuitive because it’s an invalid inlineCapacity
&gt; 
&gt; &gt; After initially reading it, I was worried that it was wrong,
&gt; &gt; but then realized we had default initializers below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358023</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 20:16:14 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/223027/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323100</attachid>
            <date>2017-10-07 13:18:47 -0700</date>
            <delta_ts>2017-10-07 18:59:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzMDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxNy0xMC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGRpcmVjdC1jb25zdHJ1Y3QtYXJpdHktbWlzbWF0Y2guanMgY2FuIGhhdmUgR0NzIHRoYXQgdGFr
ZSB+NzBtcyBpZiB5b3UgZm9yY2UgcG9seSBwcm90byBhbmQgZGlzYWJsZSBnZW5lcmF0aW9uYWwg
R0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA1
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgQWZ0ZXIgSSBzdHVkaWVkIHRoZSBwcm9maWxlIG9mIHRoaXMgdGVzdCwgSSBmb3VuZCB0d28g
cGF0aG9sb2dpZXMgaW4gb3VyIGNvZGUgcmVsYXRpbmcgdG8KKyAgICAgICAgcHJvdG90eXBlcy4g
SSB0aGluayB0aGF0IG5vdyB0aGF0IHdlIHN1cHBvcnQgcG9seSBwcm90bywgaXQncyBtb3JlIGxp
a2VseSBmb3IgdGhlc2UgcGF0aG9sb2dpZXMgdG8KKyAgICAgICAgaGFwcGVuLiBBbHNvLCB0aGUg
ZmFjdCB0aGF0IHdlIGZvcmNlIHBvbHkgcHJvdG8gaW4gc29tZSB0ZXN0cywgaXQncyBwb3NzaWJs
ZSBmb3Igb25lIG9mIG91ciB0ZXN0cworICAgICAgICB0byB0cmlnZ2VyIHRoZXNlIHBhdGhvbG9n
aWVzLgorICAgICAgICAKKyAgICAgICAgLSBXZWFrR0NNYXA6Om1fcHJvdG90b3lwZXMgaXMgdGhl
IHNldCBvZiBhbGwgcHJvdG90eXBlcy4gVGhhdCdzIHN1cGVyIGRhbmdlcm91cy4gVGhpcyBwYXRj
aCB0dXJucworICAgICAgICAgIHRoaXMgaW50byBhIGJpdCBpbiB0aGUgSlNDZWxsIGhlYWRlci4g
SXQgdXNlcyB0aGUgbGFzdCBzcGFyZSBiaXQgaW4gaW5kZXhpbmdUeXBlQW5kTWlzYy4gTm90ZQor
ICAgICAgICAgIHRoYXQgd2Ugc3RpbGwgaGF2ZSA2IHNwYXJlIGJpdHMgaW4gY2VsbFN0YXRlLCBi
dXQgdGhvc2UgYXJlIGEgYml0IG1vcmUgYW5ub3lpbmcgdG8gZ2V0IGF0LgorICAgICAgICAKKyAg
ICAgICAgLSBXZWFrR0NNYXAgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIEdDIHVzaW5nIGEgc3RkOjpm
dW5jdGlvbi4gVGhhdCBtZWFucyBhbGxvY2F0aW5nIHRoaW5ncyBpbiB0aGUKKyAgICAgICAgICBt
YWxsb2MgaGVhcC4gVGhpcyBjaGFuZ2VzIGl0IHRvIGEgdmlydHVhbCBtZXRob2Qgb24gV2Vha0dD
TWFwLiBJIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCB0aGlzIGlzCisgICAgICAgICAgYSBwcm9i
bGVtIGFyZWEsIGJ1dCB0aGVyZSBhcmUgcGxhY2VzIHdoZXJlIHdlIGNvdWxkIGFsbG9jYXRlIGEg
bG90IG9mIFdlYWtHQ01hcHMsIGxpa2UgaWYgd2UgaGF2ZQorICAgICAgICAgIGEgbG90IG9mIHRy
YW5zaXRpb24gdGFibGVzLiBJdCdzIGdvb2QgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgbWVtb3J5
IHRob3NlIHJlcXVpcmUuCisgICAgICAgIAorICAgICAgICBBbHNvLCBJIHNhdyBhIEZJWE1FIGFi
b3V0IHR1cm5pbmcgdGhlIHN0ZDo6dHVwbGUgaW4gUHJvdG90eXBlTWFwIGludG8gYSBzdHJ1Y3Qs
IHNvIEkgZGlkIHRoYXQgd2hpbGUKKyAgICAgICAgSSB3YXMgYXQgaXQuIEkgaW5pdGlhbGx5IHRo
b3VnaHQgdGhhdCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUgcGFydCBvZiBteSBzb2x1dGlvbiwgYnV0
IGl0IHR1cm5lZCBvdXQKKyAgICAgICAgbm90IHRvIGJlLiBJIHRoaW5rIGl0J3Mgd29ydGggbGFu
ZGluZyBhbnl3YXkgc2luY2UgaXQgbWFrZXMgdGhlIGNvZGUgYSBsb3QgbW9yZSBjbGVhci4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIHRpbWVvdXQgaW4gdGhhdCB0ZXN0IGFuZCBw
cm9iYWJseSByZWR1Y2VzIG1lbW9yeSBjb25zdW1wdGlvbi4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpy
ZWdpc3RlcldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXApOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVj
dGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0
ZWRTY3JpcHRIb3N0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogaW5zcGVj
dG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jR2VuZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXN5bmNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6R2VuZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKU0NlbGw6Om1heUJlUHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpk
aWRCZWNvbWVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlRGlyZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpzZXRUYXJnZXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRp
bWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3RvdHlwZUtleS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5OjpQ
cm90b3R5cGVLZXkpOgorICAgICAgICAoSlNDOjpQcm90b3R5cGVLZXk6OnByb3RvdHlwZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aW5saW5lQ2FwYWNpdHkgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQcm90b3R5cGVLZXk6OmNsYXNzSW5mbyBjb25zdCk6CisgICAgICAgIChK
U0M6OlByb3RvdHlwZUtleTo6Z2xvYmFsT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJv
dG90eXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5
OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5OjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlND
OjpQcm90b3R5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogcnVudGltZS9Qcm90b3R5cGVN
YXAuY3BwOgorICAgICAgICAoSlNDOjpQcm90b3R5cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlTWFwOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5oOgorICAgICAg
ICAoSlNDOjpQcm90b3R5cGVNYXA6OlByb3RvdHlwZU1hcCk6CisgICAgICAgICogcnVudGltZS9Q
cm90b3R5cGVNYXBJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9TZXRJdGVy
YXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSXRl
cmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q01hcC5oOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXBCYXNlOjp+V2Vha0dDTWFwQmFzZSk6Cisg
ICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAqIHJ1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Oldl
YWtTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKwogMjAxNy0wOS0yOSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBnaWdhY2FnZSBvbiBpT1MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjMwMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzgxLDYgKzM4MSw3IEBACiAJCTBGNzI1Q0E4MUM1MDNE
RUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNDFDNTAzREVEMDBB
RDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oICovOyB9OwogCQkwRjcy
NUNBQTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQ
dXJlQ1NFLmggKi87IH07CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRo
Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9
OworCQkwRjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBC
OTM1RDMgLyogUHJvdG90eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzMDE1QThEQ0Uy
MDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQx
QzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQ3LDcgKzQ0OCw2IEBACiAJCTBGOUUz
MjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1
QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJ
CTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3
MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyB9OwogCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkExMzE3MTFE
OERENzJCMDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMTMxNzAxRDhERDcyOTAwRUMxMzBBIC8q
IFByb3RvdHlwZU1hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0
aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEy
QzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBNTgxQkIxNTBFOTUzMDAwQjlB
MkQ5IC8qIERGR05vZGVGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICov
OyB9OwogCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTU4MUI5MTUwRTk1MkEw
MEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovOyB9OwpAQCAtMjM2Myw2ICsyMzYzLDcgQEAKIAkJ
MEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1B1cmVDU0UuaDsgcGF0aCA9IGIzL0IzUHVyZUNTRS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0
M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVE
MyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJv
dG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVBNTAy
OEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1
YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ3OSw3ICsy
NDgwLDYgQEAKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFj
a0xheW91dFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNr
TGF5b3V0UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZBMTMxNzAxRDhERDcyOTAwRUMxMzBBIC8qIFByb3RvdHlw
ZU1hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBl
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3OTE3RDdD
Rjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9k
ZUZsYWdzLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxhZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjMyMyw5ICs2MzIzLDkgQEAKIAkJCQlFMTc4NjMzRjBEOUJFQzAwMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovLAogCQkJCUUzNUUwMzVEMUI3QUI0M0Uw
MDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwICovLAogCQkJCUUz
NUUwMzVFMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Qu
aCAqLywKKwkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCiAJ
CQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBN0E4
QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBE
Rjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAw
ODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIzMzFCNEUwRDY3MDBC
QzdGRUQgLyogSW50bENvbGxhdG9yLmNwcCAqLywKQEAgLTY0MjEsOSArNjQyMSw5IEBACiAJCQkJ
QkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAq
LywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuaCAqLywKIAkJCQk3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJ
bmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5
LmggKi8sCiAJCQkJMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICov
LAogCQkJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJ
CQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQlFMzNG
NTA3RTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwICovLAogCQkJCUUz
M0Y1MDdGMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oICovLAogCQkJCUUz
M0Y1MDc2MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNw
cCAqLywKQEAgLTY1MTEsMTAgKzY1MTEsMTAgQEAKIAkJCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3
NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgKi8sCiAJCQkJNTM5MTdFN0MxQjc5
MTEwNjAwMEVCRDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLywKIAkJCQk2NTA3
RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAotCQkJCTBGMkI2NkQ0MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJMEYyQjY2RDUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQkwRjJCNjZEMjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCiAJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQzMkFycmF5LmggKi8sCiAJCQkJQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpT
V2Vha01hcC5jcHAgKi8sCiAJCQkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01h
cC5oICovLAogCQkJCTcwOUZCODYxMUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwICov
LApAQCAtNjYwMCw5ICs2NjAwLDkgQEAKIAkJCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyog
UHJvcGVydHlTdG9yYWdlLmggKi8sCiAJCQkJQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFBy
b3BlcnR5VGFibGUuY3BwICovLAogCQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90
ZWN0LmggKi8sCisJCQkJMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovLAogCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuY3BwICov
LAogCQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAqLywKLQkJ
CQkwRkExMzE3MDFEOERENzI5MDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oICovLAog
CQkJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLywK
IAkJCQk3OUIwMENCOTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovLAog
CQkJCTc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi8sCkBAIC02
NzI3LDExICs2NzI3LDExIEBACiAJCQkJMEYyRDRERTAxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5oICovLAogCQkJCTBGMkQ0REUzMTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlU2V0
LmNwcCAqLywKIAkJCQkwRjJENERFNDE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5oICovLAor
CQkJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCisJCQkJQTdB
OEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQTdB
OEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDEx
M0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMz
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjMwMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCi0JCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMEZFMDUwMjMxQUE5MDk1NjAwRDMz
QjMzIC8qIFZhck9mZnNldC5jcHAgKi8sCiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8q
IFZhck9mZnNldC5oICovLAogCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAg
Ki8sCkBAIC04OTM1LDggKzg5MzUsOCBAQAogCQkJCUJDMThDNDU1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc0QjkzQjFG
ODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0
QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRkExMzE3MTFEOERENzJCMDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTM0RTAzNTYxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vz
c0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QjAwQ0JEMUM2QUIwN0UwMDg4QzY1RCAvKiBQ
cm94eUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUIwMENCRjFDNkFCMDdFMDA4
OEM2NUQgLyogUHJveHlPYmplY3QuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDksNyArMjQ5LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZVRoaQogICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgewogICAgICAgICAg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3Ip
LT5wcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3RvdHlwZSk7
Ci0gICAgICAgICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHByb3RvdHlwZSk7Cisg
ICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDggKzIxMTIsOCBAQCB2b2lkIEhlYXA6
OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hCiB7CiAgICAgaWYgKG1fY29sbGVjdGlvblNj
b3BlICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
YXV0byYgcHJ1bmVDYWxsYmFjayA6IG1fd2Vha0dDTWFwcy52YWx1ZXMoKSkKLSAgICAgICAgcHJ1
bmVDYWxsYmFjaygpOworICAgIGZvciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFr
R0NNYXBzKQorICAgICAgICB3ZWFrR0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CiB9CiAKIHZv
aWQgSGVhcDo6c3dlZXBBcnJheUJ1ZmZlcnMoKQpAQCAtMjU0MywxMiArMjU0MywxMiBAQCB2b2lk
IEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmCiAgICAgY29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcigpOwogfQogCi12b2lkIEhlYXA6OnJlZ2lzdGVyV2Vha0dDTWFwKHZvaWQqIHdl
YWtHQ01hcCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHBydW5pbmdDYWxsYmFjaykKK3ZvaWQgSGVh
cDo6cmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQogewotICAgIG1f
d2Vha0dDTWFwcy5hZGQod2Vha0dDTWFwLCBXVEZNb3ZlKHBydW5pbmdDYWxsYmFjaykpOworICAg
IG1fd2Vha0dDTWFwcy5hZGQod2Vha0dDTWFwKTsKIH0KIAotdm9pZCBIZWFwOjp1bnJlZ2lzdGVy
V2Vha0dDTWFwKHZvaWQqIHdlYWtHQ01hcCkKK3ZvaWQgSGVhcDo6dW5yZWdpc3RlcldlYWtHQ01h
cChXZWFrR0NNYXBCYXNlKiB3ZWFrR0NNYXApCiB7CiAgICAgbV93ZWFrR0NNYXBzLnJlbW92ZSh3
ZWFrR0NNYXApOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBj
bGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBW
TTsKK2NsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwogCiBu
YW1lc3BhY2UgREZHIHsKQEAgLTI2OSw4ICsyNzAsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJik7CiAjZW5kaWYKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVnaXN0ZXJXZWFrR0NNYXAodm9pZCogd2Vha0dD
TWFwLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gcHJ1bmluZ0NhbGxiYWNrKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAodm9pZCogd2Vha0dDTWFwKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDTWFwKFdlYWtHQ01hcEJhc2Uq
IHdlYWtHQ01hcCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bnJlZ2lzdGVyV2Vha0dD
TWFwKFdlYWtHQ01hcEJhc2UqIHdlYWtHQ01hcCk7CiAKICAgICB2b2lkIGFkZExvZ2ljYWxseUVt
cHR5V2Vha0Jsb2NrKFdlYWtCbG9jayopOwogCkBAIC02MjAsNyArNjIxLDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQ7CiAjZW5kaWYKIAot
ICAgIEhhc2hNYXA8dm9pZCosIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV93ZWFrR0NNYXBzOwor
ICAgIEhhc2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKICAgICAKICAgICBMb2Nr
IG1fdmlzaXRSYWNlTG9jazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHZvaWQgSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGU6OmZpbmkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJl
Y29tZVByb3RvdHlwZSgpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5T
SVRJT04oInN1YnR5cGUiLCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3Vi
dHlwZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJmdW5jdGlv
bkRldGFpbHMiLCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25E
ZXRhaWxzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
dm9pZCBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGU6OmZpbgogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAg
IHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90
eXBlKCk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZXZh
bHVhdGVXaXRoU2NvcGVFeHRlbnNpb24iLCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVG
dW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04oInNjb3BlRGVzY3JpcHRpb25zIiwganNKYXZhU2NyaXB0Q2Fs
bEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXQKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJp
bmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkFycmF5IEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgdm0u
cHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUo
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUo
dGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIGdsb2JhbE9iamVjdC0+
YXJyYXlQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3Rv
dHlwZTo6ZmluCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0
aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIEpTQ19CVUlMVElOX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTigibmV4dCIsIGFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3Rv
dHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKCJyZXR1cm4iLCBhc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVSZXR1cm5Db2Rl
R2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9u
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBc3luY0Z1bmN0aW9uUHJvdG90eXBlOjpm
aW5pc2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKCZ2bSwgIkFzeW5jRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICB2bS5wcm90b3R5cGVNYXAu
YWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVByb3RvdHlwZSgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCB2b2lkIEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpCiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiQXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUo
dGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fz
eW5jR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgQXN5bmNHZW5lcmF0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWEKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkFzeW5jR2Vu
ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAg
ICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9y
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXN5bmNJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgdm9pZCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlk
QmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0Z1bmN0aW9uKiBhc3luY0l0ZXJhdG9yUHJvdG90
eXBlRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGFzeW5jSXRlcmF0b3JQcm90b3R5
cGVTeW1ib2xBc3luY0l0ZXJhdG9yR2V0dGVyQ29kZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVj
dCk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PmFzeW5jSXRlcmF0b3JTeW1ib2wsIGFzeW5jSXRlcmF0b3JQcm90b3R5cGVGdW5jdGlvbiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogICAgICAgICBpZiAoc3RydWN0dXJlLT5o
YXNQb2x5UHJvdG8oKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGNvbnN0
cnVjdG9yLT5wcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3Rv
dHlwZSk7Ci0gICAgICAgICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHByb3RvdHlw
ZSk7CisgICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNi4wLyNzZWMtb3JkaW5hcnljcmVhdGVmcm9tY29uc3RydWN0b3IKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0
b3JGdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBl
OjpmaW5pc2hDCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkdlbmVyYXRvckZ1bmN0aW9u
IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRC
ZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
YXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBH
ZW5lcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKAogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcoJnZtLCAiR2VuZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFk
ZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ1R5cGUuaAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDExIEBAIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGkKIC8vIG1hc2tlZCBvZmYgdW5s
ZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOwogCi0vLyBUaGUgSW5kZXhp
bmdUeXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KKy8vIFRoZSBJbmRl
eGluZ1R5cGUgZmllbGQgb2YgSlNDZWxscyBpcyBzdG9sZW4gZm9yIGxvY2tzIGFuZCByZW1lbWJl
cmluZyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIGEKKy8vIHByb3RvdHlwZS4KIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAg
PSAweDQwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVNYXlCZVByb3Rv
dHlwZSAgICAgID0gMHg4MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgog
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHZvaWQgSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFYKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRp
ZEJlY29tZVByb3RvdHlwZSgpOwogCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBpdGVyYXRvclByb3Rv
dHlwZVN5bWJvbEl0ZXJhdG9yR2V0dGVyQ29kZUdlbmVyYXRvciwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjIzMDIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1hcElubGlu
ZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMy
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQg
PSAwOyB9CiAKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygp
IGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KKyAgICAKKyAgICBib29sIG1heUJlUHJvdG90eXBl
KCkgY29uc3Q7CisgICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIGNvbnN0IGNo
YXIqIGNsYXNzTmFtZShWTSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1Miw2ICszNTIsMTYgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0xvY2tlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OmlzTG9ja2VkKCpsb2NrKTsKIH0K
IAoraW5saW5lIGJvb2wgSlNDZWxsOjptYXlCZVByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlzYyAmIEluZGV4aW5nVHlwZU1heUJlUHJvdG90eXBlOwor
fQorCitpbmxpbmUgdm9pZCBKU0NlbGw6OmRpZEJlY29tZVByb3RvdHlwZSgpCit7CisgICAgbV9p
bmRleGluZ1R5cGVBbmRNaXNjIHw9IEluZGV4aW5nVHlwZU1heUJlUHJvdG90eXBlOworfQorCiBp
bmxpbmUgSlNPYmplY3QqIEpTQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc09iamVjdCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24g
MjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
UHJveHlPYmplY3QuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
ICJUeXBlRXJyb3IuaCIKQEAgLTEwMDUsNyArMTAwNCw3IEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlm
eVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFkZEluZGV4ZWRBY2Nlc3NvcnMpKTsKICAgICAKLSAgICBpZiAoIXZtLnByb3Rv
dHlwZU1hcC5pc1Byb3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBnbG9iYWxPYmplY3Qodm0pLT5oYXZlQUJhZFRpbWUo
dm0pOwpAQCAtMTYzMiw3ICsxNjMxLDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlRGly
ZWN0KFZNJiB2bQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwogICAgIGlmIChwcm90b3R5cGUu
aXNPYmplY3QoKSkKLSAgICAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZShhc09iamVj
dChwcm90b3R5cGUpKTsKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLT5kaWRCZWNvbWVQcm90
b3R5cGUoKTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlKHZtKS0+aGFzTW9ub1Byb3RvKCkpIHsK
ICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHByb3RvdHlwZSk7CkBAIC0xNjQzLDcg
KzE2NDIsNyBAQCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVEaXJlY3QoVk0mIHZtCiAgICAg
aWYgKCFhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAodm0ucHJvdG90eXBlTWFwLmlzUHJvdG90eXBlKHRo
aXMpKSB7CisgICAgaWYgKG1heUJlUHJvdG90eXBlKCkpIHsKICAgICAgICAgc3RydWN0dXJlKHZt
KS0+Z2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZSh2bSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2
aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1h
cElubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUzLDcgKzUyLDcgQEAgdm9pZCBK
U1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbAogICAgIHNldFByb3RvdHlwZURpcmVj
dCh2bSwgZ2xvYmFsT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSk7CiAKICAgICBQcm90b3R5
cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKLSAgICBpZiAoIXByb3RvdHlw
ZU1hcC5pc1Byb3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIHByZXZpb3VzR2xvYmFsT2JqZWN0IGNhbm5vdCBiZSBudWxs
IGJlY2F1c2UgaW4gb3JkZXIgZm9yIHRoaXMgSlNQcm94eSB0byBiZSB1c2VkIGFzIGEgcHJvdG90
eXBlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
bwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7Cisg
ICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04oIm5leHQiLCBtYXBJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJh
dG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXAgSXRlcmF0b3IiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIE1hcFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgdm0ucHJvdG90eXBlTWFw
LmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNs
ZWFyLCBtYXBQcm90b0Z1bmNDbGVhciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0Rl
bGV0ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIHZvaWQgT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
LSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVBy
b3RvdHlwZSgpOwogICAgIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoVGFi
bGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb3RvdHlwZUtleSB7CitwdWJsaWM6
CisgICAgUHJvdG90eXBlS2V5KCkgeyB9CisgICAgCisgICAgUHJvdG90eXBlS2V5KEpTT2JqZWN0
KiBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBtX3Byb3Rv
dHlwZShwcm90b3R5cGUpCisgICAgICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0
eSkKKyAgICAgICAgLCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCisgICAgICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvdG90eXBlS2V5
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2lubGluZUNhcGFj
aXR5KDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29u
c3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ2FwYWNpdHk7IH0KKyAgICBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3RvdHlwZUtleSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9wcm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUK
KyAgICAgICAgICAgICYmIG1faW5saW5lQ2FwYWNpdHkgPT0gb3RoZXIubV9pbmxpbmVDYXBhY2l0
eQorICAgICAgICAgICAgJiYgbV9jbGFzc0luZm8gPT0gb3RoZXIubV9jbGFzc0luZm8KKyAgICAg
ICAgICAgICYmIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0OworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdG90eXBlS2V5JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gUHJvdG90eXBlS2V5KCk7IH0KKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0gUHJvdG90
eXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQorICAgIAorICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRy
X3Q+OjpoYXNoKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHJvdG90eXBlKSBeIGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG1fY2xhc3NJbmZvKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1f
Z2xvYmFsT2JqZWN0KSkgKyBtX2lubGluZUNhcGFjaXR5OworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgLy8gV0FSTklORzogV2UgcmVxdWlyZSBhbGwgb2YgdGhlc2UgZGVmYXVsdCB2YWx1ZXMg
dG8gYmUgemVyby4gT3RoZXJ3aXNlLCB5b3UnbGwgbmVlZCB0byBhZGQKKyAgICAvLyAic3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOyIgdG8gdGhlIEhhc2hUcmFpdHMg
YXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCisgICAgSlNPYmplY3QqIG1fcHJvdG90eXBlIHsg
bnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHkgeyAwIH07CisgICAgY29u
c3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKKyAgICBKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitzdHJ1Y3QgUHJvdG90eXBlS2V5
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvdG90eXBlS2V5JiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm90
b3R5cGVLZXkmIGEsIGNvbnN0IFByb3RvdHlwZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OlByb3RvdHlwZUtleT4geworICAgIHR5cGVkZWYgSlNDOjpQcm90b3R5cGVL
ZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm90b3R5cGVLZXk+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvdG90eXBlS2V5PiB7IH07CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Rv
dHlwZU1hcC5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHJvdG90eXBlTWFwSW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsMTAgKzM2LDEwIEBAIGlubGluZSBT
dHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6Y3JlYXRlRW0KIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
IXByb3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJv
dG90eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11c3QgcHJv
dmlkZSBub24tbnVsbCBwcm90b3R5cGVzLgogCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVw
bGUobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNh
cGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBrZXkgPSBQcm90b3R5
cGVLZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGlu
ZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV9zdHJ1Y3R1cmVzLmdldChrZXkpKSB7CiAgICAgICAgIGlmIChtYWtlUG9s
eVByb3RvU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBhZGRQcm90b3R5cGUocHJvdG90eXBlKTsK
KyAgICAgICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygp
KTsKQEAgLTQ4LDcgKzQ3LDcgQEAgaW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVh
dGVFbQogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KIAotICAgIGFkZFByb3RvdHlw
ZShwcm90b3R5cGUpOworICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7
CkBAIC04MSw4ICs4MCw4IEBAIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0
cnUKIAogdm9pZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90
b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShzdGQ6Om1h
a2VfdHVwbGUob2JqZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBn
bG9iYWxPYmplY3QpKTsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKHN0ZDo6bWFrZV90dXBsZShu
dWxscHRyLCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmpl
Y3QpKTsKKyAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShvYmplY3QsIGlubGlu
ZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOworICAgIG1f
c3RydWN0dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5KG51bGxwdHIsIGlubGluZUNhcGFjaXR5LCBK
U0ZpbmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1h
cC5oCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm90b3R5cGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNs
dWRlICJQcm90b3R5cGVLZXkuaCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3
dGYvVHJpU3RhdGUuaD4KIApAQCAtNDEsMjMgKzQyLDE4IEBAIGNsYXNzIFZNOwogY2xhc3MgUHJv
dG90eXBlTWFwIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBQcm90b3R5cGVNYXAoVk0mIHZtKQot
ICAgICAgICA6IG1fcHJvdG90eXBlcyh2bSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZXModm0pCisg
ICAgICAgIDogbV9zdHJ1Y3R1cmVzKHZtKQogICAgIHsKICAgICB9CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtl
UG9seVByb3RvU3RydWN0dXJlID0gZmFsc2UpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVj
dHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBjbGVhckVtcHR5T2Jq
ZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZFByb3RvdHlw
ZShKU09iamVjdCopOwotICAgIEFMV0FZU19JTkxJTkUgVHJpU3RhdGUgaXNQcm90b3R5cGUoSlNP
YmplY3QqKSBjb25zdDsgLy8gUmV0dXJucyBhIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZS4KIAogcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8q
LCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJv
dG9TdHJ1Y3R1cmUpOwogCi0gICAgV2Vha0dDTWFwPEpTT2JqZWN0KiwgSlNPYmplY3Q+IG1fcHJv
dG90eXBlczsKLSAgICAvLyBGSVhNRTogbWFrZSB0aGUga2V5IGEgc3RydWN0LgotICAgIHVzaW5n
IFN0cnVjdHVyZU1hcCA9IFdlYWtHQ01hcDxzdGQ6OnR1cGxlPEpTT2JqZWN0KiwgdW5zaWduZWQs
IGNvbnN0IENsYXNzSW5mbyosIEpTR2xvYmFsT2JqZWN0Kj4sIFN0cnVjdHVyZT47CisgICAgdXNp
bmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJlPjsKICAg
ICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcElubGluZXMuaAkocmV2aXNpb24g
MjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwSW5s
aW5lcy5oCShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlBy
b3RvdHlwZU1hcC5oIgotI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLUFMV0FZU19JTkxJTkUgVHJpU3RhdGUgUHJvdG90eXBlTWFwOjppc1Byb3RvdHlw
ZShKU09iamVjdCogb2JqZWN0KSBjb25zdAotewotICAgIGlmICghbV9wcm90b3R5cGVzLmNvbnRh
aW5zKG9iamVjdCkpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotCi0gICAgLy8gV2Ug
a25vdyB0aGF0ICdvYmplY3QnIHdhcyB1c2VkIGFzIGEgcHJvdG90eXBlIGF0IG9uZSB0aW1lLCBz
byBiZQotICAgIC8vIGNvbnNlcnZhdGl2ZSBhbmQgc2F5IHRoYXQgaXQgbWlnaHQgc3RpbGwgYmUg
c28uIChJdCB3b3VsZCBiZSBleHBlbnNpdmUKLSAgICAvLyB0byBmaW5kIG91dCBmb3Igc3VyZSwg
YW5kIHdlIGRvbid0IGtub3cgb2YgYW55IGNhc2VzIHdoZXJlIGJlaW5nIHByZWNpc2UKLSAgICAv
LyB3b3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLikKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFByb3RvdHlwZU1hcDo6YWRkUHJvdG90eXBlKEpTT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgbV9wcm90b3R5cGVzLnNldChvYmplY3QsIG9iamVjdCk7Ci0K
LSAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbWFrZXMgdGhlIHNvbWV3aGF0IG9kZCBkZWNp
c2lvbiB0byBub3QgY2hlY2sgaWYgdGhpcwotICAgIC8vIG9iamVjdCBjdXJyZW50bHkgaGFzIGlu
ZGV4ZWQgYWNjZXNzb3JzLiBXZSBjb3VsZCBkbyB0aGF0IGNoZWNrIGhlcmUsIGFuZCBpZgotICAg
IC8vIGluZGV4ZWQgYWNjZXNzb3JzIHdlcmUgZm91bmQsIHdlIGNvdWxkIHRlbGwgdGhlIGdsb2Jh
bCBvYmplY3QgdG8gaGF2ZSBhIGJhZAotICAgIC8vIHRpbWUuIEJ1dCB3ZSBhdm9pZCB0aGlzLCB0
byBhbGxvdyB0aGUgZm9sbG93aW5nIHRvIGJlIGFsd2F5cyBmYXN0OgotICAgIC8vCi0gICAgLy8g
MSkgQ3JlYXRlIGFuIG9iamVjdC4KLSAgICAvLyAyKSBHaXZlIGl0IGEgc2V0dGVyIG9yIHJlYWQt
b25seSBwcm9wZXJ0eSB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBhIG51bWVyaWMgbmFtZS4KLSAgICAv
LyAzKSBBbGxvY2F0ZSBvYmplY3RzIHRoYXQgdXNlIHRoaXMgb2JqZWN0IGFzIGEgcHJvdG90eXBl
LgotICAgIC8vCi0gICAgLy8gVGhpcyBhdm9pZHMgYW55b25lIGhhdmluZyBhIGJhZCB0aW1lLiBF
dmVuIGlmIHRoZSBpbnN0YW5jZSBvYmplY3RzIGVuZCB1cAotICAgIC8vIGhhdmluZyBpbmRleGVk
IHN0b3JhZ2UsIHRoZSBjcmVhdGlvbiBvZiBpbmRleGVkIHN0b3JhZ2UgbGVhZHMgdG8gYSBwcm90
b3R5cGUKLSAgICAvLyBjaGFpbiB3YWxrIHRoYXQgZGV0ZWN0cyB0aGUgcHJlc2VuY2Ugb2YgaW5k
ZXhlZCBzZXR0ZXJzIGFuZCB0aGVuIGRvZXMgdGhlCi0gICAgLy8gcmlnaHQgdGhpbmcuIEFzIGEg
cmVzdWx0LCBoYXZpbmcgYSBiYWQgdGltZSBvbmx5IGhhcHBlbnMgaWYgeW91IGFkZCBhbgotICAg
IC8vIGluZGV4ZWQgc2V0dGVyIChvciBnZXR0ZXIsIG9yIHJlYWQtb25seSBmaWVsZCkgdG8gYW4g
b2JqZWN0IHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIHVzZWQgYXMgYSBwcm90b3R5cGUuCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBTZXRJdGVyYXRvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpbwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQ
cm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0NfQlVJ
TFRJTl9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oIm5leHQiLCBzZXRJdGVyYXRvclByb3Rv
dHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJTZXQgSXRl
cmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0g
ICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90
b3R5cGUoKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmFkZCwgc2V0UHJvdG9GdW5jQWRkLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5D
VElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIsIHNldFByb3Rv
RnVuY0NsZWFyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBTdHJpbmdJdGVyYXRvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAi
U3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0
aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkocmV2aXNp
b24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAvLyBB
IEhhc2hNYXAgd2l0aCBXZWFrPEpTQ2VsbD4gdmFsdWVzLCB3aGljaCBhdXRvbWF0aWNhbGx5IHJl
bW92ZXMgdmFsdWVzIG9uY2UgdGhleSdyZSBnYXJiYWdlIGNvbGxlY3RlZC4KIAorY2xhc3MgV2Vh
a0dDTWFwQmFzZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2Vha0dDTWFwQmFzZSgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpID0gMDsKK307CisKIHRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSB0
eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLAogICAgIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPj4KLWNsYXNzIFdlYWtHQ01hcCB7CitjbGFzcyBXZWFr
R0NNYXAgOiBwdWJsaWMgV2Vha0dDTWFwQmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgdHlwZWRlZiBXZWFrPFZhbHVlQXJnPiBWYWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBI
YXNoTWFwPEtleUFyZywgVmFsdWVUeXBlLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hNYXBU
eXBlOwpAQCAtOTQsNyArMTAwLDcgQEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgY29udGFp
bnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdDsKIAotICAgIHZvaWQgcHJ1bmVTdGFsZUVudHJp
ZXMoKTsKKyAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6
CiAgICAgSGFzaE1hcFR5cGUgbV9tYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrR0NNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDkgKzM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBW
YWx1ZQogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmc+OjpXZWFrR0NNYXAoVk0mIHZtKQogICAgIDogbV92bSh2bSkKIHsKLSAgICB2bS5oZWFw
LnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMsIFt0aGlzXSgpIHsKLSAgICAgICAgcHJ1bmVTdGFsZUVu
dHJpZXMoKTsKLSAgICB9KTsKKyAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIz
MDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBXZWFrTWFwUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQ
cm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVL
ZXl3b3JkLCBwcm90b0Z1bmNXZWFrTWFwRGVsZXRlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSk7CiAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgcHJvdG9G
dW5jV2Vha01hcEdldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIDEsIEpTV2Vha01hcEdldEludHJpbnNpYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBXZWFrU2V0UHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5h
ZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxl
dGVLZXl3b3JkLCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBwcm90b0Z1bmNXZWFr
U2V0SGFzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgMSk7Cg==
</data>
<flag name="review"
          id="342892"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323113</attachid>
            <date>2017-10-07 18:59:32 -0700</date>
            <delta_ts>2017-10-07 18:59:32 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52586</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzMDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxNy0xMC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGRpcmVjdC1jb25zdHJ1Y3QtYXJpdHktbWlzbWF0Y2guanMgY2FuIGhhdmUgR0NzIHRoYXQgdGFr
ZSB+NzBtcyBpZiB5b3UgZm9yY2UgcG9seSBwcm90byBhbmQgZGlzYWJsZSBnZW5lcmF0aW9uYWwg
R0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA1
MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorICAgICAgICAKKyAgICAgICAg
QWZ0ZXIgSSBzdHVkaWVkIHRoZSBwcm9maWxlIG9mIHRoaXMgdGVzdCwgSSBmb3VuZCB0d28gcGF0
aG9sb2dpZXMgaW4gb3VyIGNvZGUgcmVsYXRpbmcgdG8KKyAgICAgICAgcHJvdG90eXBlcy4gSSB0
aGluayB0aGF0IG5vdyB0aGF0IHdlIHN1cHBvcnQgcG9seSBwcm90bywgaXQncyBtb3JlIGxpa2Vs
eSBmb3IgdGhlc2UgcGF0aG9sb2dpZXMgdG8KKyAgICAgICAgaGFwcGVuLiBBbHNvLCB0aGUgZmFj
dCB0aGF0IHdlIGZvcmNlIHBvbHkgcHJvdG8gaW4gc29tZSB0ZXN0cywgaXQncyBwb3NzaWJsZSBm
b3Igb25lIG9mIG91ciB0ZXN0cworICAgICAgICB0byB0cmlnZ2VyIHRoZXNlIHBhdGhvbG9naWVz
LgorICAgICAgICAKKyAgICAgICAgLSBXZWFrR0NNYXA6Om1fcHJvdG90b3lwZXMgaXMgdGhlIHNl
dCBvZiBhbGwgcHJvdG90eXBlcy4gVGhhdCdzIHN1cGVyIGRhbmdlcm91cy4gVGhpcyBwYXRjaCB0
dXJucworICAgICAgICAgIHRoaXMgaW50byBhIGJpdCBpbiB0aGUgSlNDZWxsIGhlYWRlci4gSXQg
dXNlcyB0aGUgbGFzdCBzcGFyZSBiaXQgaW4gaW5kZXhpbmdUeXBlQW5kTWlzYy4gTm90ZQorICAg
ICAgICAgIHRoYXQgd2Ugc3RpbGwgaGF2ZSA2IHNwYXJlIGJpdHMgaW4gY2VsbFN0YXRlLCBidXQg
dGhvc2UgYXJlIGEgYml0IG1vcmUgYW5ub3lpbmcgdG8gZ2V0IGF0LgorICAgICAgICAKKyAgICAg
ICAgLSBXZWFrR0NNYXAgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIEdDIHVzaW5nIGEgc3RkOjpmdW5j
dGlvbi4gVGhhdCBtZWFucyBhbGxvY2F0aW5nIHRoaW5ncyBpbiB0aGUKKyAgICAgICAgICBtYWxs
b2MgaGVhcC4gVGhpcyBjaGFuZ2VzIGl0IHRvIGEgdmlydHVhbCBtZXRob2Qgb24gV2Vha0dDTWFw
LiBJIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCB0aGlzIGlzCisgICAgICAgICAgYSBwcm9ibGVt
IGFyZWEsIGJ1dCB0aGVyZSBhcmUgcGxhY2VzIHdoZXJlIHdlIGNvdWxkIGFsbG9jYXRlIGEgbG90
IG9mIFdlYWtHQ01hcHMsIGxpa2UgaWYgd2UgaGF2ZQorICAgICAgICAgIGEgbG90IG9mIHRyYW5z
aXRpb24gdGFibGVzLiBJdCdzIGdvb2QgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRo
b3NlIHJlcXVpcmUuCisgICAgICAgIAorICAgICAgICBBbHNvLCBJIHNhdyBhIEZJWE1FIGFib3V0
IHR1cm5pbmcgdGhlIHN0ZDo6dHVwbGUgaW4gUHJvdG90eXBlTWFwIGludG8gYSBzdHJ1Y3QsIHNv
IEkgZGlkIHRoYXQgd2hpbGUKKyAgICAgICAgSSB3YXMgYXQgaXQuIEkgaW5pdGlhbGx5IHRob3Vn
aHQgdGhhdCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUgcGFydCBvZiBteSBzb2x1dGlvbiwgYnV0IGl0
IHR1cm5lZCBvdXQKKyAgICAgICAgbm90IHRvIGJlLiBJIHRoaW5rIGl0J3Mgd29ydGggbGFuZGlu
ZyBhbnl3YXkgc2luY2UgaXQgbWFrZXMgdGhlIGNvZGUgYSBsb3QgbW9yZSBjbGVhci4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIHRpbWVvdXQgaW4gdGhhdCB0ZXN0IGFuZCBwcm9i
YWJseSByZWR1Y2VzIG1lbW9yeSBjb25zdW1wdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnBy
dW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdp
c3RlcldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NNYXAp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVk
U2NyaXB0SG9zdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
OkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFy
cmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkFzeW5jR2VuZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QXN5bmNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6R2VuZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2Vs
bC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpK
U0NlbGw6Om1heUJlUHJvdG90eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkaWRC
ZWNvbWVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlRGlyZWN0KToKKyAgICAgICAgKiBydW50
aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpzZXRUYXJnZXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpN
YXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
TWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1Byb3RvdHlwZUtleS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5OjpQcm90
b3R5cGVLZXkpOgorICAgICAgICAoSlNDOjpQcm90b3R5cGVLZXk6OnByb3RvdHlwZSBjb25zdCk6
CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aW5saW5lQ2FwYWNpdHkgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQcm90b3R5cGVLZXk6OmNsYXNzSW5mbyBjb25zdCk6CisgICAgICAgIChKU0M6
OlByb3RvdHlwZUtleTo6Z2xvYmFsT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90
eXBlS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5Ojpv
cGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5OjpvcGVyYXRvciBi
b29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvdG90eXBlS2V5Ojppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aGFzaCBjb25zdCk6
CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpQ
cm90b3R5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogcnVudGltZS9Qcm90b3R5cGVNYXAu
Y3BwOgorICAgICAgICAoSlNDOjpQcm90b3R5cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6UHJvdG90eXBlTWFwOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9y
UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5oOgorICAgICAgICAo
SlNDOjpQcm90b3R5cGVNYXA6OlByb3RvdHlwZU1hcCk6CisgICAgICAgICogcnVudGltZS9Qcm90
b3R5cGVNYXBJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9TZXRJdGVyYXRv
clByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSXRlcmF0
b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01h
cC5oOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXBCYXNlOjp+V2Vha0dDTWFwQmFzZSk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OktleVRyYWl0
c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6V2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OldlYWtT
ZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKwogMjAxNy0wOS0yOSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBnaWdhY2FnZSBvbiBpT1MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzgxLDYgKzM4MSw3IEBACiAJCTBGNzI1Q0E4MUM1MDNERUQw
MEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNDFDNTAzREVEMDBBRDk0
M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oICovOyB9OwogCQkwRjcyNUNB
QTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJl
Q1NFLmggKi87IH07CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29u
c3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9Owor
CQkwRjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1
RDMgLyogUHJvdG90eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5l
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzMDE1QThEQ0UyMDA4
RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQxQzE1
QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQ3LDcgKzQ0OCw2IEBACiAJCTBGOUUzMjY0
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIw
NDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBG
OUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBD
QjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0
MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkExMzE3MTFEOERE
NzJCMDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMTMxNzAxRDhERDcyOTAwRUMxMzBBIC8qIFBy
b3RvdHlwZU1hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3
QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBNTgxQkIxNTBFOTUzMDAwQjlBMkQ5
IC8qIERGR05vZGVGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovOyB9
OwogCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTU4MUI5MTUwRTk1MkEwMEI5
QTJEOSAvKiBERkdOb2RlVHlwZS5oICovOyB9OwpAQCAtMjM2Myw2ICsyMzYzLDcgQEAKIAkJMEY3
MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1B1cmVDU0UuaDsgcGF0aCA9IGIzL0IzUHVyZUNTRS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xk
UGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAv
KiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90
eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVBNTAyOEQw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2
NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJv
dXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ3OSw3ICsyNDgw
LDYgQEAKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5
b3V0UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEZBMTMxNzAxRDhERDcyOTAwRUMxMzBBIC8qIFByb3RvdHlwZU1h
cElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlTWFw
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3OTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2Rl
RmxhZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZUZs
YWdzLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxhZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjMyMyw5ICs2MzIzLDkgQEAKIAkJCQlFMTc4NjMzRjBEOUJFQzAwMDBENzRF
NzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovLAogCQkJCUUzNUUwMzVEMUI3QUI0M0UwMDcz
QUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwICovLAogCQkJCUUzNUUw
MzVFMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuaCAq
LywKKwkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCiAJCQkJ
QTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYy
RDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjJCMTdBREI1
RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4
NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2
NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIzMzFCNEUwRDY3MDBCQzdG
RUQgLyogSW50bENvbGxhdG9yLmNwcCAqLywKQEAgLTY0MjEsOSArNjQyMSw5IEBACiAJCQkJQkM3
NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywK
IAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aCAqLywKIAkJCQk3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxp
bmVzLmggKi8sCisJCQkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5Lmgg
Ki8sCiAJCQkJMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovLAog
CQkJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQkw
RjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQlFMzNGNTA3
RTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwICovLAogCQkJCUUzM0Y1
MDdGMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oICovLAogCQkJCUUzM0Y1
MDc2MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCAq
LywKQEAgLTY1MTEsMTAgKzY1MTEsMTAgQEAKIAkJCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3Njgg
LyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgKi8sCiAJCQkJNTM5MTdFN0MxQjc5MTEw
NjAwMEVCRDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLywKIAkJCQk2NTA3RDI5
NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAotCQkJCTBGMkI2NkQ0MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJMEYyQjY2RDUxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OEFycmF5LmggKi8sCiAJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQzMkFycmF5LmggKi8sCiAJCQkJQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vh
a01hcC5jcHAgKi8sCiAJCQkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5o
ICovLAogCQkJCTcwOUZCODYxMUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwICovLApA
QCAtNjYwMCw5ICs2NjAwLDkgQEAKIAkJCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJv
cGVydHlTdG9yYWdlLmggKi8sCiAJCQkJQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3Bl
cnR5VGFibGUuY3BwICovLAogCQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0
LmggKi8sCisJCQkJMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oICov
LAogCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuY3BwICovLAog
CQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAqLywKLQkJCQkw
RkExMzE3MDFEOERENzI5MDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oICovLAogCQkJ
CTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJ
CQk3OUIwMENCOTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovLAogCQkJ
CTc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi8sCkBAIC02NzI3
LDExICs2NzI3LDExIEBACiAJCQkJMEYyRDRERTAxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9m
aWxlckxvZy5oICovLAogCQkJCTBGMkQ0REUzMTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlU2V0LmNw
cCAqLywKIAkJCQkwRjJENERFNDE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5oICovLAorCQkJ
CUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCisJCQkJQTdBOEFG
MzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQTdBOEFG
MzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JG
REU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjMwMTdBREI1RjMw
MDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCi0JCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMEZFMDUwMjMxQUE5MDk1NjAwRDMzQjMz
IC8qIFZhck9mZnNldC5jcHAgKi8sCiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8qIFZh
ck9mZnNldC5oICovLAogCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8s
CkBAIC04OTM1LDggKzg5MzUsOCBAQAogCQkJCUJDMThDNDU1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdC
MiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc0QjkzQjFGODk2
MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMz
QjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RkExMzE3MTFEOERENzJCMDBFQzEzMEEgLyogUHJvdG90eXBlTWFwSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTM0RTAzNTYxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QjAwQ0JEMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94
eUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUIwMENCRjFDNkFCMDdFMDA4OEM2
NUQgLyogUHJveHlPYmplY3QuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDksNyArMjQ5LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRo
aQogICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSkgewogICAgICAgICAgICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5w
cm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3RvdHlwZSk7Ci0g
ICAgICAgICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHByb3RvdHlwZSk7CisgICAg
ICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDggKzIxMTIsOCBAQCB2b2lkIEhlYXA6OnBy
dW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hCiB7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3Bl
ICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoYXV0
byYgcHJ1bmVDYWxsYmFjayA6IG1fd2Vha0dDTWFwcy52YWx1ZXMoKSkKLSAgICAgICAgcHJ1bmVD
YWxsYmFjaygpOworICAgIGZvciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NN
YXBzKQorICAgICAgICB3ZWFrR0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CiB9CiAKIHZvaWQg
SGVhcDo6c3dlZXBBcnJheUJ1ZmZlcnMoKQpAQCAtMjU0MywxMiArMjU0MywxMiBAQCB2b2lkIEhl
YXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmCiAgICAgY29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpOwogfQogCi12b2lkIEhlYXA6OnJlZ2lzdGVyV2Vha0dDTWFwKHZvaWQqIHdlYWtH
Q01hcCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHBydW5pbmdDYWxsYmFjaykKK3ZvaWQgSGVhcDo6
cmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQogewotICAgIG1fd2Vh
a0dDTWFwcy5hZGQod2Vha0dDTWFwLCBXVEZNb3ZlKHBydW5pbmdDYWxsYmFjaykpOworICAgIG1f
d2Vha0dDTWFwcy5hZGQod2Vha0dDTWFwKTsKIH0KIAotdm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vh
a0dDTWFwKHZvaWQqIHdlYWtHQ01hcCkKK3ZvaWQgSGVhcDo6dW5yZWdpc3RlcldlYWtHQ01hcChX
ZWFrR0NNYXBCYXNlKiB3ZWFrR0NNYXApCiB7CiAgICAgbV93ZWFrR0NNYXBzLnJlbW92ZSh3ZWFr
R0NNYXApOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjIz
MDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CiBjbGFzcyBWTTsK
K2NsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwogCiBuYW1l
c3BhY2UgREZHIHsKQEAgLTI2OSw4ICsyNzAsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJik7CiAjZW5kaWYKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVnaXN0ZXJXZWFrR0NNYXAodm9pZCogd2Vha0dDTWFw
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gcHJ1bmluZ0NhbGxiYWNrKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAodm9pZCogd2Vha0dDTWFwKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDTWFwKFdlYWtHQ01hcEJhc2UqIHdl
YWtHQ01hcCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bnJlZ2lzdGVyV2Vha0dDTWFw
KFdlYWtHQ01hcEJhc2UqIHdlYWtHQ01hcCk7CiAKICAgICB2b2lkIGFkZExvZ2ljYWxseUVtcHR5
V2Vha0Jsb2NrKFdlYWtCbG9jayopOwogCkBAIC02MjAsNyArNjIxLDcgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQ7CiAjZW5kaWYKIAotICAg
IEhhc2hNYXA8dm9pZCosIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV93ZWFrR0NNYXBzOworICAg
IEhhc2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKICAgICAKICAgICBMb2NrIG1f
dmlzaXRSYWNlTG9jazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIHZvaWQgSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGU6OmZpbmkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29t
ZVByb3RvdHlwZSgpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04oInN1YnR5cGUiLCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3VidHlw
ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEp
OwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJmdW5jdGlvbkRl
dGFpbHMiLCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25EZXRh
aWxzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
MSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9p
ZCBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGU6OmZpbgogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZt
LnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBl
KCk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZXZhbHVh
dGVXaXRoU2NvcGVFeHRlbnNpb24iLCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5j
dGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04oInNjb3BlRGVzY3JpcHRpb25zIiwganNKYXZhU2NyaXB0Q2FsbEZy
YW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXQKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdU
YWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkFycmF5IEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgdm0ucHJv
dG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhp
cyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIGdsb2JhbE9iamVjdC0+YXJy
YXlQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCksIGds
b2JhbE9iamVjdC0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJh
dG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZTo6ZmluCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlz
KTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTigibmV4dCIsIGFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKCJyZXR1cm4iLCBhc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVSZXR1cm5Db2RlR2Vu
ZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBc3luY0Z1bmN0aW9uUHJvdG90eXBlOjpmaW5p
c2hDcmVhdAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpz
U3RyaW5nKCZ2bSwgIkFzeW5jRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRk
UHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVByb3RvdHlwZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVy
YXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCB2b2lkIEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiQXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhp
cyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgQXN5bmNHZW5lcmF0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWEKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkFzeW5jR2VuZXJh
dG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBk
aWRCZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0l0ZXJhdG9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgdm9pZCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVj
b21lUHJvdG90eXBlKCk7CiAKICAgICBKU0Z1bmN0aW9uKiBhc3luY0l0ZXJhdG9yUHJvdG90eXBl
RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGFzeW5jSXRlcmF0b3JQcm90b3R5cGVT
eW1ib2xBc3luY0l0ZXJhdG9yR2V0dGVyQ29kZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVjdCk7
CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmFz
eW5jSXRlcmF0b3JTeW1ib2wsIGFzeW5jSXRlcmF0b3JQcm90b3R5cGVGdW5jdGlvbiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQ
b2x5UHJvdG8oKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGNvbnN0cnVj
dG9yLT5wcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3RvdHlw
ZSk7Ci0gICAgICAgICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHByb3RvdHlwZSk7
CisgICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wLyNzZWMtb3JkaW5hcnljcmVhdGVmcm9tY29uc3RydWN0b3IKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JG
dW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpm
aW5pc2hDCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkdlbmVyYXRvckZ1bmN0aW9uIiks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNv
bWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRv
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBHZW5l
cmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCAiR2VuZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFkZFBy
b3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDExIEBAIHN0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGkKIC8vIG1hc2tlZCBvZmYgdW5sZXNz
IHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1h
eUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOwogCi0vLyBUaGUgSW5kZXhpbmdU
eXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KKy8vIFRoZSBJbmRleGlu
Z1R5cGUgZmllbGQgb2YgSlNDZWxscyBpcyBzdG9sZW4gZm9yIGxvY2tzIGFuZCByZW1lbWJlcmlu
ZyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIGEKKy8vIHByb3RvdHlwZS4KIHN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CiBzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAw
eDQwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVNYXlCZVByb3RvdHlw
ZSAgICAgID0gMHg4MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJh
dG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIHZvaWQgSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFYKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJl
Y29tZVByb3RvdHlwZSgpOwogCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBpdGVyYXRvclByb3RvdHlw
ZVN5bWJvbEl0ZXJhdG9yR2V0dGVyQ29kZUdlbmVyYXRvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1hcElubGluZXMu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDkg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQgPSAw
OyB9CiAKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNv
bnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KKyAgICAKKyAgICBib29sIG1heUJlUHJvdG90eXBlKCkg
Y29uc3Q7CisgICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIGNvbnN0IGNoYXIq
IGNsYXNzTmFtZShWTSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw2ICszNTIsMTYgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0xvY2tlZCgpIGNvbnN0CiAgICAg
cmV0dXJuIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OmlzTG9ja2VkKCpsb2NrKTsKIH0KIAor
aW5saW5lIGJvb2wgSlNDZWxsOjptYXlCZVByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW5kZXhpbmdUeXBlQW5kTWlzYyAmIEluZGV4aW5nVHlwZU1heUJlUHJvdG90eXBlOworfQor
CitpbmxpbmUgdm9pZCBKU0NlbGw6OmRpZEJlY29tZVByb3RvdHlwZSgpCit7CisgICAgbV9pbmRl
eGluZ1R5cGVBbmRNaXNjIHw9IEluZGV4aW5nVHlwZU1heUJlUHJvdG90eXBlOworfQorCiBpbmxp
bmUgSlNPYmplY3QqIEpTQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc09iamVjdCgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjIz
MDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
QXJyYXkuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJv
eHlPYmplY3QuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJU
eXBlRXJyb3IuaCIKQEAgLTEwMDUsNyArMTAwNCw3IEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlmeVBy
ZXNlbmNlT2ZJbmRleGVkQWMKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFkZEluZGV4ZWRBY2Nlc3NvcnMpKTsKICAgICAKLSAgICBpZiAoIXZtLnByb3RvdHlw
ZU1hcC5pc1Byb3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBnbG9iYWxPYmplY3Qodm0pLT5oYXZlQUJhZFRpbWUodm0p
OwpAQCAtMTYzMiw3ICsxNjMxLDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlRGlyZWN0
KFZNJiB2bQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwogICAgIGlmIChwcm90b3R5cGUuaXNP
YmplY3QoKSkKLSAgICAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZShhc09iamVjdChw
cm90b3R5cGUpKTsKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLT5kaWRCZWNvbWVQcm90b3R5
cGUoKTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlKHZtKS0+aGFzTW9ub1Byb3RvKCkpIHsKICAg
ICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlw
ZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHByb3RvdHlwZSk7CkBAIC0xNjQzLDcgKzE2
NDIsNyBAQCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVEaXJlY3QoVk0mIHZtCiAgICAgaWYg
KCFhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBpZiAodm0ucHJvdG90eXBlTWFwLmlzUHJvdG90eXBlKHRoaXMp
KSB7CisgICAgaWYgKG1heUJlUHJvdG90eXBlKCkpIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+
Z2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZSh2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNp
b24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1hcElu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUzLDcgKzUyLDcgQEAgdm9pZCBKU1By
b3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbAogICAgIHNldFByb3RvdHlwZURpcmVjdCh2
bSwgZ2xvYmFsT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSk7CiAKICAgICBQcm90b3R5cGVN
YXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKLSAgICBpZiAoIXByb3RvdHlwZU1h
cC5pc1Byb3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIHByZXZpb3VzR2xvYmFsT2JqZWN0IGNhbm5vdCBiZSBudWxsIGJl
Y2F1c2UgaW4gb3JkZXIgZm9yIHRoaXMgSlNQcm94eSB0byBiZSB1c2VkIGFzIGEgcHJvdG90eXBl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRl
cmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpbwog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAg
ZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04oIm5leHQiLCBtYXBJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJhdG9y
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXAgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIE1hcFByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgdm0ucHJvdG90eXBlTWFwLmFk
ZFByb3RvdHlwZSh0aGlzKTsKKyAgICBkaWRCZWNvbWVQcm90b3R5cGUoKTsKIAogICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFy
LCBtYXBQcm90b0Z1bmNDbGVhciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0RlbGV0
ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMjMwMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IHZvaWQgT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAg
ICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVByb3Rv
dHlwZSgpOwogICAgIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb3RvdHlwZUtleSB7CitwdWJsaWM6Cisg
ICAgUHJvdG90eXBlS2V5KCkgeyB9CisgICAgCisgICAgUHJvdG90eXBlS2V5KEpTT2JqZWN0KiBw
cm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBtX3Byb3RvdHlw
ZShwcm90b3R5cGUpCisgICAgICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkK
KyAgICAgICAgLCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCisgICAgICAgICwgbV9nbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvdG90eXBlS2V5KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2lubGluZUNhcGFjaXR5
KDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBKU09iamVjdCogcHJvdG90eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQ2FwYWNpdHk7IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3RvdHlwZUtleSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9wcm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUKKyAg
ICAgICAgICAgICYmIG1faW5saW5lQ2FwYWNpdHkgPT0gb3RoZXIubV9pbmxpbmVDYXBhY2l0eQor
ICAgICAgICAgICAgJiYgbV9jbGFzc0luZm8gPT0gb3RoZXIubV9jbGFzc0luZm8KKyAgICAgICAg
ICAgICYmIG1fZ2xvYmFsT2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0OworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdG90eXBlS2V5JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gUHJvdG90eXBlS2V5KCk7IH0KKyAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0gUHJvdG90eXBl
S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRyX3Q+
OjpoYXNoKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHJvdG90eXBlKSBeIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fY2xhc3NJbmZvKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZ2xv
YmFsT2JqZWN0KSkgKyBtX2lubGluZUNhcGFjaXR5OworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgLy8gV0FSTklORzogV2UgcmVxdWlyZSBhbGwgb2YgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgdG8g
YmUgemVyby4gT3RoZXJ3aXNlLCB5b3UnbGwgbmVlZCB0byBhZGQKKyAgICAvLyAic3RhdGljIGNv
bnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOyIgdG8gdGhlIEhhc2hUcmFpdHMgYXQg
dGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCisgICAgSlNPYmplY3QqIG1fcHJvdG90eXBlIHsgbnVs
bHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHkgeyAwIH07CisgICAgY29uc3Qg
Q2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKKyAgICBKU0dsb2JhbE9iamVjdCog
bV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitzdHJ1Y3QgUHJvdG90eXBlS2V5SGFz
aCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvdG90eXBlS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm90b3R5
cGVLZXkmIGEsIGNvbnN0IFByb3RvdHlwZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OlByb3RvdHlwZUtleT4geworICAgIHR5cGVkZWYgSlNDOjpQcm90b3R5cGVLZXlI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpQcm90b3R5cGVLZXk+IDogU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPEpTQzo6UHJvdG90eXBlS2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlw
ZU1hcC5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2
IEBACiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHJvdG90eXBlTWFwSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsMTggKzM2LDE4IEBAIGlubGluZSBTdHJ1
Y3R1cmUqIFByb3RvdHlwZU1hcDo6Y3JlYXRlRW0KIHsKICAgICBSRUxFQVNFX0FTU0VSVCghIXBy
b3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90
eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlk
ZSBub24tbnVsbCBwcm90b3R5cGVzLgogCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVwbGUo
bWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNhcGFj
aXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBrZXkgPSBQcm90b3R5cGVL
ZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNh
cGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9zdHJ1Y3R1cmVzLmdldChrZXkpKSB7CiAgICAgICAgIGlmIChtYWtlUG9seVBy
b3RvU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBhZGRQcm90b3R5cGUocHJvdG90eXBlKTsKKyAg
ICAgICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsK
LSAgICAgICAgQVNTRVJUKGlzUHJvdG90eXBlKHByb3RvdHlwZSkpOworICAgICAgICBBU1NFUlQo
cHJvdG90eXBlLT5tYXlCZVByb3RvdHlwZSgpKTsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsK
ICAgICB9CiAKLSAgICBhZGRQcm90b3R5cGUocHJvdG90eXBlKTsKKyAgICBwcm90b3R5cGUtPmRp
ZEJlY29tZVByb3RvdHlwZSgpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwpAQCAtODEsOCArODAsOCBAQCBTdHJ1Y3R1cmUqIFBy
b3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1CiAKIHZvaWQgUHJvdG90eXBlTWFwOjpjbGVhckVt
cHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogewotICAgIG1f
c3RydWN0dXJlcy5yZW1vdmUoc3RkOjptYWtlX3R1cGxlKG9iamVjdCwgaW5saW5lQ2FwYWNpdHks
IEpTRmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgbV9zdHJ1Y3R1cmVz
LnJlbW92ZShzdGQ6Om1ha2VfdHVwbGUobnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxP
YmplY3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7CisgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQ
cm90b3R5cGVLZXkob2JqZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygp
LCBnbG9iYWxPYmplY3QpKTsKKyAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShu
dWxscHRyLCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNs
dWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvdG90eXBlS2V5LmgiCiAjaW5jbHVkZSAi
V2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+CiAKQEAgLTQxLDIzICs0Miwx
OCBAQCBjbGFzcyBWTTsKIGNsYXNzIFByb3RvdHlwZU1hcCB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKLSAgICAgICAgOiBtX3Byb3RvdHlwZXModm0pCi0gICAg
ICAgICwgbV9zdHJ1Y3R1cmVzKHZtKQorICAgICAgICA6IG1fc3RydWN0dXJlcyh2bSkKICAgICB7
CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0
cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA9IGZhbHNlKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBl
RnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOwotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhZGRQcm90b3R5cGUoSlNPYmplY3QqKTsKLSAgICBBTFdBWVNfSU5MSU5F
IFRyaVN0YXRlIGlzUHJvdG90eXBlKEpTT2JqZWN0KikgY29uc3Q7IC8vIFJldHVybnMgYSBjb25z
ZXJ2YXRpdmUgZXN0aW1hdGUuCiAKIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBjcmVhdGVFbXB0
eVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5
cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKTsKIAotICAgIFdlYWtHQ01hcDxK
U09iamVjdCosIEpTT2JqZWN0PiBtX3Byb3RvdHlwZXM7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhl
IGtleSBhIHN0cnVjdC4KLSAgICB1c2luZyBTdHJ1Y3R1cmVNYXAgPSBXZWFrR0NNYXA8c3RkOjp0
dXBsZTxKU09iamVjdCosIHVuc2lnbmVkLCBjb25zdCBDbGFzc0luZm8qLCBKU0dsb2JhbE9iamVj
dCo+LCBTdHJ1Y3R1cmU+OworICAgIHVzaW5nIFN0cnVjdHVyZU1hcCA9IFdlYWtHQ01hcDxQcm90
b3R5cGVLZXksIFN0cnVjdHVyZT47CiAgICAgU3RydWN0dXJlTWFwIG1fc3RydWN0dXJlczsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5
cGVNYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3RvdHlwZU1hcElubGluZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIKLSNpbmNsdWRlICJXZWFrR0NN
YXBJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1BTFdBWVNfSU5MSU5FIFRyaVN0YXRl
IFByb3RvdHlwZU1hcDo6aXNQcm90b3R5cGUoSlNPYmplY3QqIG9iamVjdCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcHJvdG90eXBlcy5jb250YWlucyhvYmplY3QpKQotICAgICAgICByZXR1cm4gRmFs
c2VUcmlTdGF0ZTsKLQotICAgIC8vIFdlIGtub3cgdGhhdCAnb2JqZWN0JyB3YXMgdXNlZCBhcyBh
IHByb3RvdHlwZSBhdCBvbmUgdGltZSwgc28gYmUKLSAgICAvLyBjb25zZXJ2YXRpdmUgYW5kIHNh
eSB0aGF0IGl0IG1pZ2h0IHN0aWxsIGJlIHNvLiAoSXQgd291bGQgYmUgZXhwZW5zaXZlCi0gICAg
Ly8gdG8gZmluZCBvdXQgZm9yIHN1cmUsIGFuZCB3ZSBkb24ndCBrbm93IG9mIGFueSBjYXNlcyB3
aGVyZSBiZWluZyBwcmVjaXNlCi0gICAgLy8gd291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS4pCi0g
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBQcm90b3R5
cGVNYXA6OmFkZFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0KQotewotICAgIG1fcHJvdG90eXBl
cy5zZXQob2JqZWN0LCBvYmplY3QpOwotCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG1h
a2VzIHRoZSBzb21ld2hhdCBvZGQgZGVjaXNpb24gdG8gbm90IGNoZWNrIGlmIHRoaXMKLSAgICAv
LyBvYmplY3QgY3VycmVudGx5IGhhcyBpbmRleGVkIGFjY2Vzc29ycy4gV2UgY291bGQgZG8gdGhh
dCBjaGVjayBoZXJlLCBhbmQgaWYKLSAgICAvLyBpbmRleGVkIGFjY2Vzc29ycyB3ZXJlIGZvdW5k
LCB3ZSBjb3VsZCB0ZWxsIHRoZSBnbG9iYWwgb2JqZWN0IHRvIGhhdmUgYSBiYWQKLSAgICAvLyB0
aW1lLiBCdXQgd2UgYXZvaWQgdGhpcywgdG8gYWxsb3cgdGhlIGZvbGxvd2luZyB0byBiZSBhbHdh
eXMgZmFzdDoKLSAgICAvLwotICAgIC8vIDEpIENyZWF0ZSBhbiBvYmplY3QuCi0gICAgLy8gMikg
R2l2ZSBpdCBhIHNldHRlciBvciByZWFkLW9ubHkgcHJvcGVydHkgdGhhdCBoYXBwZW5zIHRvIGhh
dmUgYSBudW1lcmljIG5hbWUuCi0gICAgLy8gMykgQWxsb2NhdGUgb2JqZWN0cyB0aGF0IHVzZSB0
aGlzIG9iamVjdCBhcyBhIHByb3RvdHlwZS4KLSAgICAvLwotICAgIC8vIFRoaXMgYXZvaWRzIGFu
eW9uZSBoYXZpbmcgYSBiYWQgdGltZS4gRXZlbiBpZiB0aGUgaW5zdGFuY2Ugb2JqZWN0cyBlbmQg
dXAKLSAgICAvLyBoYXZpbmcgaW5kZXhlZCBzdG9yYWdlLCB0aGUgY3JlYXRpb24gb2YgaW5kZXhl
ZCBzdG9yYWdlIGxlYWRzIHRvIGEgcHJvdG90eXBlCi0gICAgLy8gY2hhaW4gd2FsayB0aGF0IGRl
dGVjdHMgdGhlIHByZXNlbmNlIG9mIGluZGV4ZWQgc2V0dGVycyBhbmQgdGhlbiBkb2VzIHRoZQot
ICAgIC8vIHJpZ2h0IHRoaW5nLiBBcyBhIHJlc3VsdCwgaGF2aW5nIGEgYmFkIHRpbWUgb25seSBo
YXBwZW5zIGlmIHlvdSBhZGQgYW4KLSAgICAvLyBpbmRleGVkIHNldHRlciAob3IgZ2V0dGVyLCBv
ciByZWFkLW9ubHkgZmllbGQpIHRvIGFuIG9iamVjdCB0aGF0IGlzIGFscmVhZHkKLSAgICAvLyB1
c2VkIGFzIGEgcHJvdG90eXBlLgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW8KIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
LSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVBy
b3RvdHlwZSgpOwogCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KCJuZXh0Iiwgc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUdlbmVyYXRvciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcoJnZtLCAiU2V0IEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUo
dGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHNldFByb3RvRnVu
Y0FkZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmNsZWFyLCBzZXRQcm90b0Z1bmNDbGVhciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IHZvaWQgU3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWEKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdU
YWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIlN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHZtLnBy
b3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgZGlkQmVjb21lUHJvdG90eXBlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogLy8gQSBIYXNoTWFwIHdpdGggV2VhazxKU0NlbGw+IHZhbHVl
cywgd2hpY2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFn
ZSBjb2xsZWN0ZWQuCiAKK2NsYXNzIFdlYWtHQ01hcEJhc2UgeworcHVibGljOgorICAgIHZpcnR1
YWwgfldlYWtHQ01hcEJhc2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJp
ZXMoKSA9IDA7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6SGFz
aCwKICAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFyZz4+Ci1jbGFz
cyBXZWFrR0NNYXAgeworY2xhc3MgV2Vha0dDTWFwIDogcHVibGljIFdlYWtHQ01hcEJhc2Ugewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHR5cGVkZWYgV2VhazxWYWx1ZUFyZz4g
VmFsdWVUeXBlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIFZhbHVlVHlwZSwgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKQEAgLTk0LDcgKzEwMCw3IEBAIHB1YmxpYzoK
IAogICAgIGlubGluZSBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3Q7CiAK
LSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgdm9pZCBwcnVuZVN0YWxlRW50cmll
cygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEhhc2hNYXBUeXBlIG1fbWFwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMuaAko
cmV2aXNpb24gMjIzMDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dD
TWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWUKIGlubGluZSBXZWFrR0NNYXA8S2V5QXJnLCBW
YWx1ZUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPjo6V2Vha0dDTWFwKFZNJiB2bSkKICAgICA6
IG1fdm0odm0pCiB7Ci0gICAgdm0uaGVhcC5yZWdpc3RlcldlYWtHQ01hcCh0aGlzLCBbdGhpc10o
KSB7Ci0gICAgICAgIHBydW5lU3RhbGVFbnRyaWVzKCk7Ci0gICAgfSk7CisgICAgdm0uaGVhcC5y
ZWdpc3RlcldlYWtHQ01hcCh0aGlzKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
LSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29tZVBy
b3RvdHlwZSgpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgcHJvdG9GdW5jV2Vha01hcERlbGV0ZSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEpOwog
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5nZXQsIHByb3RvRnVuY1dlYWtNYXBHZXQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAxLCBKU1dlYWtNYXBHZXRJbnRyaW5z
aWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1Nl
dFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIyMzAyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHZvaWQgV2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKLSAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIGRpZEJlY29t
ZVByb3RvdHlwZSgpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgcHJvdG9GdW5jV2Vha1NldERlbGV0
ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEp
OwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmhhcywgcHJvdG9GdW5jV2Vha1NldEhhcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>